Programmo sviluppato con la collaborazione della Classe
Nel dettaglio sviluppo del metodo "+=" e "-=":
#include <iostream>
using namespace std;
class Frazione{ //classe Frazione
public: //metodi pubblici
Frazione(); //costruttore senza passaggio di parametri
Frazione(int a,int b); //costruttore con passaggio di due parametri di tipo intero per valore
Frazione(int c); //costruttore con passaggio di un parametro di tipo intero per valore
void inserimento(); //metodo per l'inserimento dei dati num e den
void visualizza(); //metodo per la visualizzazione dei dati inseriti
void aggiorna(); //metodo per aggiornare i dati inseriti
Frazione operator +(Frazione a);
Frazione operator -(Frazione a);
Frazione operator *(Frazione a);
Frazione operator /(Frazione a);
void operator += (Frazione a);
void operator -= (Frazione a);
bool operator >(Frazione); //prototipo
bool operator <(Frazione); //prototipo
bool operator !=(Frazione a);
int num; //dichiarazione di una variabile di tipo intera
int den; //dichiarazione di una variabile di tipo intera
};
Frazione::Frazione() //costruttore senza passaggio di parametri
{
num=1;
den=1;
};
Frazione::Frazione(int a, int b) //costruttore con passaggio di parametri dove passo i valori dal main alle variabili a e b per valore
{
num=a; //associo il contenuto puntato da a alla variabile num
den=b; //associo il contenuto puntato da b alla variabile den
};
Frazione::Frazione(int c) //costruttore con passaggio di parametri dove passo i valori dal main alla variabile c per valore
{
num=c;
den=1; //trattandosi di un intero dichiaro il denominatore uguale a 1
};
void Frazione::inserimento() //metodo per l'inserimento dei dati
{
cout<<"Inserisci il numeratore: "<<endl;
cin>>num;
do
{
cout<<"Inserisci il denominatore: "<<endl;
cin>>den;
if(den==0) //se il denominatore e' uguale a 0 non accetto i dati inseriti e richiedo di ripetere l'inserimento
cout<<"Il denominatore deve essere diverso da '0'"<<endl;
}while(den==0);
};
void Frazione::aggiorna() //metodo per l'inserimento dei dati
{
cout<<"Inserisci il numeratore: "<<endl;
cin>>num;
do
{
cout<<"Inserisci il denominatore: "<<endl;
cin>>den;
if(den==0) //se il denominatore e' uguale a 0 non accetto i dati inseriti e richiedo di ripetere l'inserimento
cout<<"Il denominatore deve essere diverso da '0'"<<endl;
}while(den==0);
};
void Frazione::visualizza() //metodo per visualizzare i dati inseriti
{
if(den!=1) //se a denominatre c'è un valore diverso da uno allora è una frzione e visualizzo num/den
cout<<"La frazione inserita e': "<<num<< "/" <<den<<endl;
else //altrimenti è un intero e visualizzo solo num
cout<<"La frazione inserita e': "<<num<<endl;
};
Frazione Frazione :: operator +(Frazione a)
{
Frazione b;
b.den= this->den*a.den;
b.num= (this->den*a.num)+(this->num*a.den);
//b.Semplifica();
return b;
};
Frazione Frazione :: operator -(Frazione a)
{
Frazione b;
b.den= this->den*a.den;
b.num= (this->den*a.num)-(this->num*a.den);
//b.Semplifica();
return b;
};
Frazione Frazione :: operator / (Frazione a)
{
Frazione b;
b.den=this->den*a.num;
b.num=this->num*a.den;
// b.Semplifica();
return b;
};
Frazione Frazione :: operator * (Frazione a)
{
Frazione b;
b.den=this->den*a.den;
b.num=this->num*a.num;
//b.Semplifica();
return b;
};
void Frazione :: operator += (Frazione a) //metodo per la somma tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
{
*this=a+*this;
};
void Frazione :: operator -= (Frazione a) //metodo per la somma tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
{
*this=a-*this;
if(num==0) //if per la visualizzazione del solo numeratore in caso di risultato uguale a 0
{
num=0;
den=1;
}
};
bool Frazione::operator >(Frazione a){
bool ris=false;
Frazione appoggio; //istanzio l'oggetto appoggio di classe frazione
int fraz1=this->num*a.den; // numeratore fraz1 * den fraz2
int fraz2=this->den*a.num; //numeratore fraz2 * den fraz1
if(fraz1>fraz2)
ris=true;
return ris;
};
bool Frazione::operator <(Frazione a){
bool ris=false;
Frazione appoggio;
int fraz1=this->num*a.den;
int fraz2=this->den*a.num;
if(fraz1<fraz2)
ris=true;
return ris;
};
bool Frazione::operator !=(Frazione a)
{
bool x;
if((a.num==num)&&(a.den==den))
{
x=0;
}
else
{
x=1;
}
return x;
}
main()
{
int *scelta;
int *modfraz;
char mod;
char *input;
Frazione obj1; //istanza oggetto obj1
Frazione obj2; //istanza oggetto obj2
Frazione ris;
cout<<"CALCOLATRICE PER FRAZIONI:"<<endl;
scelta=new int;
cout<<"Quale operazione vuoi eseguire? "<<endl;
cout<<"1)Somma\n2)Sottrazione\n3)Moltiplicazione\n4)Divisione\n5)'+='\n6)'-='\n7)'>' o '<'\n8)'=' o '!='"<<endl;
cout<<"Scegli 1-2-3-4-5-6-7-8: ";
cin>>*scelta;
cout<<endl;
obj1.inserimento(); //metodo per inserimento in oggetto obj1
obj2.inserimento(); //metodo per inserimento in oggetto obj2
cout<<"Dati inseriti: "<<endl;
obj1.visualizza(); //metodo per visualizzare dati inseriti in obj1
obj2.visualizza(); //metodo per visualizzare dati inseriti in obj2
Frazione risultato; //istanza oggetto risultato
input=new char;
do
{
cout<<"Vuoi modificare i dati inseriti? (s/n)";
cin>>*input;
}while(((*input=='S')&&(*input=='s'))&&((*input!='n')&&(*input!='N')));
if((*input=='s')||(*input=='S'))
{
modfraz=new int;
do{
cout<<endl<<"Quale frazione vuoi modificare? (1/2)";
cin>>*modfraz;
if(*modfraz==1)
obj1.aggiorna();
else
if(*modfraz==2)
obj2.aggiorna();
else
cout<<endl<<"Scelta non valida"<<endl;
}while((*modfraz!=1)&&(*modfraz!=2));
delete modfraz;
}
else
if((*input!='n')&&(*input!='N'))
cout<<"Scelta non valida"<<endl;
delete input;
switch (*scelta)
{
case 1: ris=obj1+obj2; //metodo per somma
ris.visualizza();
break;
case 2: ris=obj1-obj2; //metodo per somma
ris.visualizza();
break;
case 3: ris=obj1*obj2; //metodo per somma
ris.visualizza();
break;
case 4: ris=obj1/obj2; //metodo per somma
ris.visualizza();
break;
case 5: obj1+=obj2; //metodo per somma
obj1.visualizza();
break;
case 6: obj1-=obj2; //metodo per somma
obj1.visualizza();
break;
case 7: bool ris;
if(ris=obj1>obj2)cout<<endl<<"La prima frazione e' maggiore della seconda"<<endl;
if(ris=obj1<obj2)cout<<endl<<"La prima frazione e' minore della seconda"<<endl;
break;
case 8: bool x;
ris=obj1!=obj2;
if(x==0)
cout<<"Le due Frazioni sono uguali"<<endl;
else
cout<<"Le due frazioni sono diverse"<<endl;
break;
}
delete scelta;
}
Nel dettaglio sviluppo del metodo "+=" e "-=":
#include <iostream>
using namespace std;
class Frazione{ //classe Frazione
public: //metodi pubblici
Frazione(); //costruttore senza passaggio di parametri
Frazione(int a,int b); //costruttore con passaggio di due parametri di tipo intero per valore
Frazione(int c); //costruttore con passaggio di un parametro di tipo intero per valore
void inserimento(); //metodo per l'inserimento dei dati num e den
void visualizza(); //metodo per la visualizzazione dei dati inseriti
void aggiorna(); //metodo per aggiornare i dati inseriti
Frazione operator +(Frazione a);
Frazione operator -(Frazione a);
Frazione operator *(Frazione a);
Frazione operator /(Frazione a);
void operator += (Frazione a);
void operator -= (Frazione a);
bool operator >(Frazione); //prototipo
bool operator <(Frazione); //prototipo
bool operator !=(Frazione a);
int num; //dichiarazione di una variabile di tipo intera
int den; //dichiarazione di una variabile di tipo intera
};
Frazione::Frazione() //costruttore senza passaggio di parametri
{
num=1;
den=1;
};
Frazione::Frazione(int a, int b) //costruttore con passaggio di parametri dove passo i valori dal main alle variabili a e b per valore
{
num=a; //associo il contenuto puntato da a alla variabile num
den=b; //associo il contenuto puntato da b alla variabile den
};
Frazione::Frazione(int c) //costruttore con passaggio di parametri dove passo i valori dal main alla variabile c per valore
{
num=c;
den=1; //trattandosi di un intero dichiaro il denominatore uguale a 1
};
void Frazione::inserimento() //metodo per l'inserimento dei dati
{
cout<<"Inserisci il numeratore: "<<endl;
cin>>num;
do
{
cout<<"Inserisci il denominatore: "<<endl;
cin>>den;
if(den==0) //se il denominatore e' uguale a 0 non accetto i dati inseriti e richiedo di ripetere l'inserimento
cout<<"Il denominatore deve essere diverso da '0'"<<endl;
}while(den==0);
};
void Frazione::aggiorna() //metodo per l'inserimento dei dati
{
cout<<"Inserisci il numeratore: "<<endl;
cin>>num;
do
{
cout<<"Inserisci il denominatore: "<<endl;
cin>>den;
if(den==0) //se il denominatore e' uguale a 0 non accetto i dati inseriti e richiedo di ripetere l'inserimento
cout<<"Il denominatore deve essere diverso da '0'"<<endl;
}while(den==0);
};
void Frazione::visualizza() //metodo per visualizzare i dati inseriti
{
if(den!=1) //se a denominatre c'è un valore diverso da uno allora è una frzione e visualizzo num/den
cout<<"La frazione inserita e': "<<num<< "/" <<den<<endl;
else //altrimenti è un intero e visualizzo solo num
cout<<"La frazione inserita e': "<<num<<endl;
};
Frazione Frazione :: operator +(Frazione a)
{
Frazione b;
b.den= this->den*a.den;
b.num= (this->den*a.num)+(this->num*a.den);
//b.Semplifica();
return b;
};
Frazione Frazione :: operator -(Frazione a)
{
Frazione b;
b.den= this->den*a.den;
b.num= (this->den*a.num)-(this->num*a.den);
//b.Semplifica();
return b;
};
Frazione Frazione :: operator / (Frazione a)
{
Frazione b;
b.den=this->den*a.num;
b.num=this->num*a.den;
// b.Semplifica();
return b;
};
Frazione Frazione :: operator * (Frazione a)
{
Frazione b;
b.den=this->den*a.den;
b.num=this->num*a.num;
//b.Semplifica();
return b;
};
void Frazione :: operator += (Frazione a) //metodo per la somma tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
{
*this=a+*this;
};
void Frazione :: operator -= (Frazione a) //metodo per la somma tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
{
*this=a-*this;
if(num==0) //if per la visualizzazione del solo numeratore in caso di risultato uguale a 0
{
num=0;
den=1;
}
};
bool Frazione::operator >(Frazione a){
bool ris=false;
Frazione appoggio; //istanzio l'oggetto appoggio di classe frazione
int fraz1=this->num*a.den; // numeratore fraz1 * den fraz2
int fraz2=this->den*a.num; //numeratore fraz2 * den fraz1
if(fraz1>fraz2)
ris=true;
return ris;
};
bool Frazione::operator <(Frazione a){
bool ris=false;
Frazione appoggio;
int fraz1=this->num*a.den;
int fraz2=this->den*a.num;
if(fraz1<fraz2)
ris=true;
return ris;
};
bool Frazione::operator !=(Frazione a)
{
bool x;
if((a.num==num)&&(a.den==den))
{
x=0;
}
else
{
x=1;
}
return x;
}
main()
{
int *scelta;
int *modfraz;
char mod;
char *input;
Frazione obj1; //istanza oggetto obj1
Frazione obj2; //istanza oggetto obj2
Frazione ris;
cout<<"CALCOLATRICE PER FRAZIONI:"<<endl;
scelta=new int;
cout<<"Quale operazione vuoi eseguire? "<<endl;
cout<<"1)Somma\n2)Sottrazione\n3)Moltiplicazione\n4)Divisione\n5)'+='\n6)'-='\n7)'>' o '<'\n8)'=' o '!='"<<endl;
cout<<"Scegli 1-2-3-4-5-6-7-8: ";
cin>>*scelta;
cout<<endl;
obj1.inserimento(); //metodo per inserimento in oggetto obj1
obj2.inserimento(); //metodo per inserimento in oggetto obj2
cout<<"Dati inseriti: "<<endl;
obj1.visualizza(); //metodo per visualizzare dati inseriti in obj1
obj2.visualizza(); //metodo per visualizzare dati inseriti in obj2
Frazione risultato; //istanza oggetto risultato
input=new char;
do
{
cout<<"Vuoi modificare i dati inseriti? (s/n)";
cin>>*input;
}while(((*input=='S')&&(*input=='s'))&&((*input!='n')&&(*input!='N')));
if((*input=='s')||(*input=='S'))
{
modfraz=new int;
do{
cout<<endl<<"Quale frazione vuoi modificare? (1/2)";
cin>>*modfraz;
if(*modfraz==1)
obj1.aggiorna();
else
if(*modfraz==2)
obj2.aggiorna();
else
cout<<endl<<"Scelta non valida"<<endl;
}while((*modfraz!=1)&&(*modfraz!=2));
delete modfraz;
}
else
if((*input!='n')&&(*input!='N'))
cout<<"Scelta non valida"<<endl;
delete input;
switch (*scelta)
{
case 1: ris=obj1+obj2; //metodo per somma
ris.visualizza();
break;
case 2: ris=obj1-obj2; //metodo per somma
ris.visualizza();
break;
case 3: ris=obj1*obj2; //metodo per somma
ris.visualizza();
break;
case 4: ris=obj1/obj2; //metodo per somma
ris.visualizza();
break;
case 5: obj1+=obj2; //metodo per somma
obj1.visualizza();
break;
case 6: obj1-=obj2; //metodo per somma
obj1.visualizza();
break;
case 7: bool ris;
if(ris=obj1>obj2)cout<<endl<<"La prima frazione e' maggiore della seconda"<<endl;
if(ris=obj1<obj2)cout<<endl<<"La prima frazione e' minore della seconda"<<endl;
break;
case 8: bool x;
ris=obj1!=obj2;
if(x==0)
cout<<"Le due Frazioni sono uguali"<<endl;
else
cout<<"Le due frazioni sono diverse"<<endl;
break;
}
delete scelta;
}
Nessun commento:
Posta un commento