Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by Diego ( 18 years ago )
/*Faherey.cpp*/

#include <iostream>

using namespace std;


/*-----------------Classe Racional--------------------*/
template <class T>
class Racional {
	
	public :
		int a;
		int b;
	public :
		Racional(int a, int b);
		int getNumerador();
		int getDenominador();
		Racional(){}
		template <class U> friend ostream& operator <<(ostream& entrada, Racional<U> rac);

};

template <class U>
ostream& operator <<(ostream& entrada, Racional<U> rac){
	entrada << rac.a <<"/"<<rac.b;
	return entrada;
}

template <class T>
int Racional<T>::getNumerador(){
	return this->a;
}

template <class T>
int Racional<T>::getDenominador(){
	return this->b;
}

template <class T>
Racional<T>::Racional(int a, int b){
	this->a = a;
	this->b = b;
}


template <class T>
class No {
	private:
		T dado;
		No<T> *prox;
		No<T> *ant;
	public:
		No(T dado);
		No(){};
		T getDado();
		No<T>* getProx();
		void setProx(No<T>* prox);
		No<T>* getAnt();
		void setAnt(No<T>* ant);
	
		
};

template <class T>
No<T>* No<T>::getAnt(){
	return this->ant;
}

template <class T>
void No<T>::setAnt(No<T>* ant){
	this->ant = ant;
}

template <class T>
void No<T>::setProx(No<T>* prox){
	this->prox = prox;
}

template <class T>
T No<T>::getDado(){
	return this->dado;
}

template <class T>
No<T>::No(T dado){
	this->dado = dado;
	ant = prox = NULL;
}


template <class T>
No<T>* No<T>::getProx(){
	return this->prox;
}

/*------------------ Classe Iterator -------------------*/

template <class T>
class Lista;

template <class T>
class Iterator {

	private:
		No<T>* COMECO;
		No<T>* atual;
	public:
		Iterator(No<T>* nodo);
		bool hasNext();
		No<T>* getNodo();
		T next();

};

template <class T>
No<T>* Iterator<T>::getNodo(){
	return atual;
}

template <class T>
bool Iterator<T>::hasNext(){
	return (atual!=NULL);
}

template <class T>
Iterator<T>::Iterator(No<T>* nodo){
	this->COMECO = nodo;
	atual = COMECO;
}

template <class T>
T Iterator<T>::next(){
	No<T> *temp = atual;
	atual = atual->getProx();
	return temp->getDado();
}


/*----------------- Classe Lista -----------------------*/
template <class T>
class Lista {

	public : 
		No<T>* INICIO;
	public:
		Lista();
		T getDado();
		void insert(No<T>* ant, T* dado);
		void insert(T dado);
		void remove(No<T>* rem);
		Iterator<T>* iterator();
		
};

template <class T>
Iterator<T>* Lista<T>::iterator(){

	return (new Iterator<T>(this->INICIO));

}

template <class T>
void Lista<T>::remove(No<T>* rem){

	if(rem == INICIO){
		if(INICIO->getProx())
			INICIO->getProx()->setAnt(NULL);
		INICIO = INICIO->getProx();
		delete rem;	
		return;
	}
	rem->getAnt()->setProx(rem->getProx());
		
	if(rem->getProx())
		rem->getProx()->setAnt(rem->getAnt());
	

	delete rem;
	
}

template <class T>
Lista<T>::Lista(){
	INICIO = NULL;
}

template <class T>
void Lista<T>::insert(T dado){
	No<T> *novo = new No<T>(dado);

	if(INICIO==NULL){
		INICIO = novo;
		return;
	}
	INICIO->setAnt(novo);
	novo->setProx(INICIO);
	INICIO = novo;

}

template <class T>
void Lista<T>::insert(No<T>* ant, T* dado){
	No<T> *novo = new No<T>(*dado);
	novo->setProx(ant->getProx());
	ant->setProx(novo);
}

/*--------------------------fun&Atilde;&sect;&Atilde;&pound;o main ---------------------------*/

int main(void){
	
	
	int teste = 1;
	int valor;
	while((cin >> valor) && valor){
		Lista< Racional<int> > lista;
		
		lista.insert(Racional<int>(1,1));
		lista.insert(Racional<int>(0,1));
	for(int i=2; i<=valor; i++){
		int a, b;
		No<Racional<int> >* ant, *prox;
		Iterator<Racional<int> > *it = lista.iterator();
			while(it->hasNext()){
			
				ant = it->getNodo();
				prox = ant->getProx();
				if(!prox)break;
				b = ant->getDado().getDenominador() + 
					prox->getDado().getDenominador();
				if(b<=i){
					a = ant->getDado().getNumerador() + 
						prox->getDado().getNumerador();
					lista.insert(ant, new Racional<int>(a, b));
				}
				it->next();

			}
	
		}
		Iterator<Racional<int> > *it = lista.iterator();
		cout << "Teste " << teste++ << endl;
		cout<<"(";
		while(it->hasNext()){
			cout << it->next() ;
			if(it->hasNext())
				cout << ", ";
		}
		cout <<")"<<endl<<endl;
		
	}


}

 

Revise this Paste

Your Name: Code Language: