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çã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