using namespace std;
class Frazione{
public:
Frazione();
~Frazione();
Frazione(int in);
void visualizza();
void aggiorna();
int* num;
int* den;
private:
int in;
};
class Calcolatrice{
public:
void somma(Frazione* b, int* dim);
void sottrazione(Frazione* b, int* dim);
void moltiplicazione(Frazione* b, int* dim);
void divisione(Frazione* b, int* dim);
void semplificazione(Frazione* b);
};
void Calcolatrice::semplificazione(Frazione *b)
{
int* i;
i= new int;
int* dim;
dim=new int;
if(*b->num<*b->den)
{
*dim=*b->den;
}
else
{
*dim=*b->num;
}
for(*i=1;*i<*dim;*i=*i+1)
{
if((*b->num%*i==0)&&(*b->den%*i==0))
{
*b->num=*b->num/ *i;
*b->den=*b->den/ *i;
}
}
cout<<endl<<"frazione semplificata= "<<*b->num<<"/"<<*b->den;
}
void Calcolatrice::divisione(Frazione* b, int* dim)
{
int i;
i=0;
Frazione* ris;
ris=new Frazione(i);
*ris->num=(*b[0].num * *b[1].den);
*ris->den=(*b[0].den * *b[1].den);
for(i=2;i<*dim;i++)
{
*ris->num=(*ris->num * *b[i].den);
*ris->den=(*ris->den * *b[i].num);
}
cout<<"il risultato è="<<*ris->num<<"/"<<*ris->den;
semplificazione(ris);
delete ris;
}
void Calcolatrice::moltiplicazione(Frazione* b, int* dim)
{
int i;
i=0;
Frazione* ris;
ris=new Frazione(i);
*ris->num=(*b[0].num * *b[1].num);
*ris->den=(*b[0].den * *b[1].den);
for(i=2;i<*dim;i++)
{
*ris->num=(*b[i].num * *ris->num);
*ris->den=(*b[i].den * *ris->den);
}
cout<<"il risultato è="<<*ris->num<<"/"<<*ris->den;
semplificazione(ris);
delete ris;
}
void Calcolatrice:: sottrazione(Frazione* b, int* dim)
{
int i;
i=0;
Frazione *ris;
ris=new Frazione(i);
//cout<<*dim<<b;
*ris->num=((*b[0].num * *b[1].den)-(*b[1].num * *b[0].den));
*ris->den=(*b[0].den * *b[1].den);
for(i=2;i<*dim;i++)
{
*ris->num=(*ris->num * *b[i].den)-(*b[i].num * *ris->den);
*ris->den=(*ris->den * *b[i].den);
}
cout<<"il risultato è="<<*ris->num<<"/"<<*ris->den;
semplificazione(ris);
delete ris;
}
Frazione::~Frazione()
{
delete num;
delete den;
}
void Calcolatrice::somma(Frazione* b, int* dim)
{
int i;
i=0;
Frazione *ris;
ris=new Frazione(i);
//cout<<*dim<<b;
*ris->num=((*b[0].num * *b[1].den)+(*b[1].num * *b[0].den));
*ris->den=(*b[0].den * *b[1].den);
for(i=2;i<*dim;i++)
{
*ris->num=(*ris->num * *b[i].den)+(*b[i].num * *ris->den);
*ris->den=(*ris->den * *b[i].den);
}
cout<<"il risultato è="<<*ris->num<<"/"<<*ris->den;
semplificazione(ris);
delete ris;
//return 0;
}
Frazione::Frazione(int in)
{
num=new int;
den=new int;
*num=in;
*den=in;
}
Frazione::Frazione ()
{
num=new int;
den=new int;
cout<<"inserire il numeratore: ";
cin>>*num;
cout<<"inserire il denoinatore: ";
cin>>*den;
}
void Frazione::visualizza()
{
char*scelta;
scelta=new char;
cout<<"la frazione inserita è: "<<*num<<"/"<<*den<<" ";
/* cout<<"si vuole modificare un elemento della frazione?";
cin>>*scelta;
if(*scelta=='s')
aggiorna();*/
}
void Frazione::aggiorna()
{
char*scelta;
char* c;
c=new char;
scelta=new char;
cout<<endl<<"si desidera cambiare un elemento?s-n";
cin>>*c;
while(*c=='s')
{
cout<<"Si desidera cambiare il numeratore(n) o il denominatore (d)? ";
cin>>*scelta;
if(*scelta=='n')
{
cout<<"inserisci il numeratore: ";
cin>>*num;
}
else
{
cout<<"inserisci il denominatore: ";
cin>>*den;
}
visualizza();
cout<<endl<<"si desidera cambiare un altro elemento?s-n ";
cin>>*c;
}
*c='n';
delete scelta;
delete c;
}
main()
{
int* dim;
int *i;
char *oper;
oper=new char;
dim=new int;
i=new int;
cout<<"quante frazioni vuoi inserire?";
cin>>*dim;
Frazione* a;
a=new Frazione[*dim];
//cout<<endl<<a;
for(*i=0;*i<*dim;*i=*i+1)
{
a[*i].visualizza();
a[*i].aggiorna();
}
cout<<"quale operazione si vuole eseguire?(+ - x /)";
cin>>*oper;
Calcolatrice* calc;
calc= new Calcolatrice;
switch(*oper)
{
case '+': calc->somma( a, dim);
break;
case '-': calc->sottrazione(a, dim);
break;
case 'x': calc->moltiplicazione(a, dim);
break;
case '/': calc->divisione(a, dim);
break;
}
//cout<<"fine programma";
delete [] a;
// a.visualizza();
//a.aggiorna();
}