#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
void somma(Frazione uno, Frazione due); //metodo per la somma tra frazioni con passaggio di due parametri di tipo oggetto per valore
void sottrazione(Frazione uno, Frazione due); //metodo per la sottrazione tra frazioni con passaggio di due parametri di tipo oggetto per valore
void moltiplicazione(Frazione uno, Frazione due); //metodo per la moltiplicazione tra frazioni con passaggio di due parametri di tipo oggetto per valore
void divisione(Frazione uno, Frazione due); //metodo per la divisione tra frazioni con passaggio di due parametri di tipo oggetto per valore
protected: //proprietà protette
int num; //dichiarazione di una variabile di tipo intera
int den; //dichiarazione di una variabile di tipo intera
int risnum; //dichiarazione di una variabile di tipo intera
int risden; //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;
};
void Frazione::somma(Frazione uno, Frazione due) //metodo per la somma tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
{
this->num=(uno.num*due.den)+(uno.den*due.num); //(a*d+c*b)
this->den=(uno.den*due.den); //(b*d)
risnum=this->num;
risden=this->den;
if(risnum==risden)
{
risnum=1;
risden=1;
cout<<"La SOMMA e': "<<risnum<<endl;
}
else
cout<<"La SOMMA tra "<<uno.num<<"/"<<uno.den<<" e "<<due.num<<"/"<<due.den<<" e': "<<risnum<<"/"<<risden<<endl;
};
void Frazione::sottrazione(Frazione uno, Frazione due) //metodo per la sottrazione tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
{
this->num=(uno.num*due.den)-(uno.den*due.num); //(a*d+c*b)
this->den=(uno.den*due.den); //(b*d)
risnum=this->num;
risden=this->den;
if(risnum==0)
{
risnum=0;
risden=1;
cout<<"La SOTTRAZIONE e': "<<risnum<<endl;
}
else
cout<<"La SOTTRAZIONE tra "<<uno.num<<"/"<<uno.den<<" e "<<due.num<<"/"<<due.den<<" e': "<<risnum<<"/"<<risden<<endl;
};
void Frazione::moltiplicazione(Frazione uno, Frazione due) //metodo per la moltiplicazione tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
{
this->num=uno.num*due.num; //(a*c)
this->den=(uno.den*due.den); //(b*d)
risnum=this->num;
risden=this->den;
if(risnum==risden)
{
risnum=1;
risden=1;
cout<<"La MOLTIPLICAZIONE e': "<<risnum<<endl;
}
else
cout<<"La MOLTIPLICAZIONE tra "<<uno.num<<"/"<<uno.den<<" e "<<due.num<<"/"<<due.den<<" e': "<<risnum<<"/"<<risden<<endl;
};
void Frazione::divisione(Frazione uno, Frazione due) //metodo per la divisione tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
{
this->num=uno.num*due.den; //(a*c)
this->den=(uno.den*due.num); //(b*d)
risnum=this->num;
risden=this->den;
if(risnum==risden)
{
risnum=1;
risden=1;
cout<<"La DIVISIONE e': "<<risnum<<endl;
}
else
cout<<"La DIVISIONE tra "<<uno.num<<"/"<<uno.den<<" e "<<due.num<<"/"<<due.den<<" e': "<<risnum<<"/"<<risden<<endl;
};
main()
{
int *scelta;
int *modfraz;
char mod;
char *input;
Frazione obj1; //istanza oggetto obj1
Frazione obj2; //istanza oggetto obj2
cout<<"CALCOLATRICE PER FRAZIONI:"<<endl;
scelta=new int;
cout<<"Quale operazione vuoi eseguire? "<<endl;
cout<<"1)Somma\n2)Sottrazione\n3)Moltiplicazione\n4)Divisione"<<endl;
cout<<"Scegli 1-2-3-4: ";
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: risultato.somma(obj1, obj2);
break;
case 2: risultato.sottrazione(obj1, obj2);
break;
case 3: risultato.moltiplicazione(obj1,obj2);
break;
case 4: risultato.divisione(obj1,obj2);
break;
}
delete scelta;
}
Nessun commento:
Posta un commento