Esempio della nostra Classe Frazione tradotto seguendo le specifiche "Class Diagram":
Etichette
- Informatica 2014/2015 (27)
- informatica (19)
- Laboratorio Inf (15)
- Informatica 2015/2016 (3)
- Sistemi (3)
domenica 9 novembre 2014
domenica 2 novembre 2014
Compito di Gruppo
Compito sviluppato con la collaborazione della Classe per il programma Classe Frazione:
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;
}
mercoledì 22 ottobre 2014
Esercizio su Classe Frazione
Creare una Classe Frazione che esegua le operazioni di somma, sottrazione, moltiplicazione e divisione tra frazioni:
#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;
}
#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;
}
martedì 14 ottobre 2014
Esercizio 13/10/2014
Esercizio:
Definire un nuovo tipo di dato tramite l'istruzione typedef di nome dipendente, creare poi un array di puntatori di n elementi di tipo dipendente con n scelto dall'utente.#include <iostream>
using namespace std;
typedef struct persona {
char Nome[15];
char Cognome[15];
float Stipendio;
}dipendente; //creo un nuovo tipo di dato "dipendente"
dipendente *puntatore; //creo una variabile di tipo puntatore (dipendente)
main()
{
int ndip;
cout<<"Compito del 13/10/2014";
//Input da utente per dimensione array di puntatori
cout<<endl<<endl<<"Quanti dipendenti vuoi inserire?"<<endl;
cin>>ndip;
puntatore=new dipendente[ndip]; //creo un array di puntatori della dimensione "ndip"
*!* con l'istruzione new dipendente si alloca spazio in memoria nella quantità prevista dal tipo di puntatore utilizzato e si genera l'indirizzo da assegnare al primo elemento dell'array puntatore
//Inserimento dell'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<endl<<"Inserisci il Nome: ";
cin>>puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<"Inserisci il Cognome: "; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cin>>puntatore[i].Cognome;
cout<<"Inserisci lo Stipendio: "; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cin>>puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
}
cout << endl << endl;
//Visualizzo l'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Dati Inseriti nell'elemento "<<i<<": "<<endl;
cout<<endl<<"Nome: " << puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
return 0;
}
Vediamo alcune prove svolte sull'istruzione DELETE per la deallocazione della memoria allocata in precedenza tramite NEW DIPENDENTE
#include <iostream>
using namespace std;
typedef struct persona {
char Nome[15];
char Cognome[15];
float Stipendio;
}dipendente; //creo un nuovo tipo di dato "dipendente"
dipendente *puntatore; //creo una variabile di tipo puntatore (dipendente)
main()
{
int ndip;
cout<<"Compito del 13/10/2014";
//Input da utente per dimensione array di puntatori
cout<<endl<<endl<<"Quanti dipendenti vuoi inserire?"<<endl;
cin>>ndip;
//Visualizzo gli indirizzi puntati dall'array di puntatori SENZA allocazione tramite "new dipendente"
for(int i=0;i<ndip;i++)
{
cout<<"Indirizzi SENZA ALLOCAZIONE 'NEW PUNTATORE' puntato dall'elemento "<<i<< ": "<<endl;
cout<<endl<<"Nome: " << &puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << &puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
puntatore=new dipendente[ndip]; //creo un array di puntatori della dimensione "ndip"
//Visualizzo gli indirizzi puntati dall'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Indirizzi CON ALLOCAZIONE 'NEW PUNTATORE' puntati dall'elemento "<<i<< ": "<<endl;
cout<<endl<<"Nome: " << &puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << &puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
//Inserimento dell'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Inserimento dell'elemento "<<i<< ": "<<endl;
cout<<"Inserisci il Nome: ";
cin>>puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<"Inserisci il Cognome: "; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cin>>puntatore[i].Cognome;
cout<<"Inserisci lo Stipendio: "; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cin>>puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
}
cout << endl;
//Visualizzo l'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Dati Inseriti nell'elemento "<<i<<": "<<endl;
cout<<endl<<"Nome: " << puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl;
}
cout<<"_____________________________________________________________"<<endl;
cout<<endl<<"Ripetiamo ora la visualizzazione degli array dopo aver utilizzato"<<endl<<"l'istruzione 'delete' per deallocare lo spazio di memoria"<<endl<<endl;
delete [] puntatore;
//Visualizzo l'array di puntatori
for(int i=0;i<ndip;i++)
for(int i=0;i<ndip;i++)
{
cout<<"Indirizzi DOPO ISTRUZIONE 'DELETE []' puntati dall'elemento "<<i<< ": "<<endl;
cout<<endl<<"Nome: " << &puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << &puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
//Visualizzo l'array di puntatori
for(int i=0;i<ndip;i++)
{
cout<<"Dati presenti nell'elemento "<<i<<" dopo istruzione 'delete': "<<endl;
cout<<endl<<"Nome: " << puntatore[i].Nome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Cognome: " << puntatore[i].Cognome; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout<<endl<<"Stipendio: " << puntatore[i].Stipendio; //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
cout << endl << endl;
}
return 0;
}
domenica 12 ottobre 2014
I Puntatori 2
I Puntatori - Seconda Lezione
La caratteristica alla base dei puntatori è che con essi si
lavora su indirizzi di memoria, questo con il loro utilizzo comporta grandi
proprietà a vantaggio del programmatore ma anche alcune possibili problematiche
che potrebbero nascere dal loro utilizzo non appropriato: si potrebbe correre
il rischio di andare a modificare aree di memoria riservate ad altri processi
(ad esempio si potrebbe andare a modificare un area di memoria riservata al
sistema operativo il che potrebbe provocare blocchi o problemi di varia natura).
Proprio per questo motivo il compilatore esegue dei controlli prima di eseguire la compilazione del codice con puntatori.
Quando lavoriamo con tipi di dati primitivi
(int,float,char, ecc…) il compilatore non si pone particolari riserve e cerca
di fare quello che gli viene chiesto dalle istruzioni scritte dal programmatore, ma proprio per quanto detto poco fa quando si utilizzano i
puntatori invece il compilatore andrà ad eseguire una serie di controlli atti ad evitare un
utilizzo inappropriato.
*!* L’area di memoria valida di un puntatore è legata al
tipo di puntatore dichiarato (int, float, ecc…)
Vediamo alcuni esempi:
*!* La potenza dei puntatori sta nella possibilità di poter
allocare e successivamente liberare (quando non se ne ha più la necessità di
utilizzo) lo spaio di memoria allocato al puntatore stesso, cosa che non può invece
accadere con le variabili tradizionali (int, float, ecc…) che di conseguenza continuano a
mantenere memoria allocata anche qualora non fosse più necessario.
Vediamo alcuni esempi di Codice:
#include <iostream>
using namespace std;
int main()
{
int a=1;
int b=10;
int c;
cout<<"Inserisci un valore";
cin >> c;
if(c>5)
{
a++;
cout<<a;
}
else
{
b++;
cout<<b;
}
return 0;
}
In questo esempio la variabile contatore “a” o “b” viene
incrementata a seconda che il valore inserito dall’utente (contenuto nella
variabile “c”) sia o meno maggiore del valore 5. Ricollegandoci a quanto detto sopra possiamo vedere come in ogni caso, a prescindere dal valore dato
in Input dall’utente, il compilatore allocherà spazio nella memoria per tutte e
tre le variabili “a”, “b” e “c”.
Vediamo invece lo stesso esempio di codice scritto questa volta sfruttando le proprietà sopra elencate dei puntatori:
#include <iostream>
using namespace std;
int main()
{
int *a;
int *b;
int c;
cout<<"Inserisci un valore";
cin >> c;
if(c>5)
{
a=new int;
*a=1;
*a+=1;
cout<<*a;
delete a;
}
else
{
b=new int;
*b=10;
*b+=1;
cout<<*b;
delete b;
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int *a;
int *b;
int c;
cout<<"Inserisci un valore";
cin >> c;
if(c>5)
{
a=new int;
*a=1;
*a+=1;
cout<<*a;
delete a;
}
else
{
b=new int;
*b=10;
*b+=1;
cout<<*b;
delete b;
}
return 0;
}
In questo esempio la variabile “a” e la variabile “b” sono
di tipo puntatore. Così facendo è possibile tramite l’istruzione “new int”
allocare spazio in memoria per la variabile puntatore sono al momento della necessità di utilizzo della variabile senza allocare spazio a prescindere, come succede con le viste
nell’esempio precedente, di conseguenza se l’utente inserirà un valore maggiore di 5
nella variabile “c” il programma allocherà memoria per il puntatore “a”,
assegnerà il valore 1 all’area di memoria da esso puntata, incrementerà tale
valore, visualizzerà “a” in Output e poi tramite l’istruzione delete libererà
lo spazio di memoria utilizzato dalla variabile puntatore “a” da li in poi non
più necessaria.
Lo stesso procedimento verrà eseguito per la variabile puntatore
“b” se il valore inserito in Input dall’utente sarà minore di 5.
Schema puntatore e indirizzi:
Schema logico di un doppio puntatore:
*!* In questo esempio la variabile puntatore “r” punta ad un
indirizzo che punta a sua volta ad un altro indirizzo che contiene un dato di
tipo intero.
Fonti:
Prof. Alemanno
Marchesi Giacomo
mercoledì 8 ottobre 2014
Esercizio 06/10/2014 - AGGIORNATO! (11/10/14)
Compito per casa assegnato il 06/10/2014 con consegna per il 08/10/2014
Esercizio su classi, ereditarietà, metodi
e proprietà:
Creare una classe "Padre"
Persona dalla quale ereditare due classi "Figlio" Studente e
Dipendente.
La classe "Padre" deve contenere un metodo
per l’inserimento, uno per la visualizzazione dei dati e uno per l’aggiornamento
di uno o più campi inseriti.
Il programmatore dovrà decidere i criteri public,protected o
private da assegnare al modificatore.
#include <iostream>
using namespace std;
class Persona{
public:
Persona();
void inserisciPersona()
{
cout<<"Inserisci il Nome: "<<endl;
cin>>nome;
cout<<"Inserisci il Cognome: "<<endl;
cin>>cognome;
cout<<"Inserisci la Data di Nascita: "<<endl;
cin>>dataNascita;
cout<<"Inserisci la Citta': "<<endl;
cin>>citta;
}
void visualizzaPersona()
{
cout<<"Nome: "<<nome<<endl;
cout<<"Cognome: "<<cognome<<endl;
cout<<"Data di Nascita: "<<dataNascita<<endl;
cout<<"Citta': "<<citta<<endl;
};
void aggiornaPersona()
{
char menu;
do
{
cout<<"Quale campo vuoi modificare? 1)Nome 2)Cognome 3)Data di Nascita 4)Citta"<<endl;
cin>>menu;
switch(menu)
{
case '1': cout<<"Inserisci il Nome: "<<endl;
cin>>nome;
break;
case '2': cout<<"Inserisci il Cognome: "<<endl;
cin>>cognome;
break;
case '3': cout<<"Inserisci la Data di Nascita: "<<endl;
cin>>dataNascita;
break;
case '4': cout<<"Inserisci la Citta': "<<endl;
cin>>citta;
break;
default: cout<<"Scelta non valida"<<endl;
}
}while((menu<'1')||(menu>'4'));
};
protected:
char nome[15];
char cognome[15];
char dataNascita[11];
char citta[15];
};
Persona::Persona()
{
char nome[15];
char cognome[15];
char dataNascita[11];
char citta[15];
}
class Studente : public Persona {
public:
Studente();
void inserisciStudente()
{
cout<<"Inserisci la classe dello studente: "<<endl;
cin>>classe;
cout<<"Inserisci la sezione dello studente: "<<endl;
cin>>sezione;
cout<<"Inserisci l'indirizzo di studi dello studente: "<<endl;
cin>>indirizzo;
}
void aggiornaStudente();
void visualizzaStudente()
{
visualizzaPersona();
cout<<"Classe: "<<classe<<endl;
cout<<"Sezione: "<<sezione<<endl;
cout<<"Indirizzo: "<<indirizzo<<endl;
};
protected:
char classe[10];
char sezione[2];
char indirizzo[15];
};
void Studente::aggiornaStudente()
{
char scelt;
char menu;
do{
cout<<"Quale parte vuoi modificare? 1)persona 2)studente"<<endl;
cin>>scelt;
switch(scelt)
{
case '1': aggiornaPersona();
break;
case '2':
do{
cout<<"Quale campo vuoi modificare? 1)Classe 2)Sezione 3)Indirizzo"<<endl;
cin>>menu;
switch(menu)
{
case '1': cout<<"Inserisci la classe dello studente: "<<endl;
cin>>classe;
break;
case '2': cout<<"Inserisci la sezione dello studente: "<<endl;
cin>>sezione;
break;
case '3': cout<<"Inserisci l'indirizzo di studi dello studente: "<<endl;
cin>>indirizzo;
break;
default: cout<<"Scelta non valida"<<endl;
};
}while((menu<'1')||(menu>'3'));
break;
default: cout<<"Scelta non valida!"<<endl;
}
}while((scelt<'1')||(scelt>'2'));
}
Studente::Studente()
{
char classe[10];
char sezione[2];
char indirizzo[15];
}
class Dipendente : public Persona {
public:
Dipendente();
void inserisciDipendente()
{
cout<<"Inserisci la mansione del dipendente: "<<endl;
cin>>mansione;
cout<<"Inserisci lo stipendio del dipendente: "<<endl;
cin>>stipendio;
}
void aggiornaDipendente();
void visualizzaDipendente()
{
visualizzaPersona();
cout<<"Mansione: "<<mansione<<endl;
cout<<"Stipendio: "<<stipendio<<endl;
};
protected:
char mansione[15];
char stipendio[6];
};
void Dipendente::aggiornaDipendente() {
char scelt;
char menu;
do{
cout<<"Quale parte vuoi modificare? 1)persona 2)dipendente"<<endl;
cin>>scelt;
switch(scelt)
{
case '1': aggiornaPersona();
break;
case '2':
do{
cout<<"Quale campo vuoi modificare? 1)Mansione 2)Stipendio"<<endl;
cin>>menu;
switch(menu)
{
case '1': cout<<"Inserisci la mansione del dipendente: "<<endl;
cin>>mansione;
break;
case '2': cout<<"Inserisci lo stipendio del dipendente: "<<endl;
cin>>stipendio;
break;
default: cout<<"Scelta non valida"<<endl;
};
}while((menu!='1')&&(menu!='2'));
break;
default: cout<<"Scelta non valida!"<<endl;
};
}while((scelt<'1')||(scelt>'2'));
}
Dipendente::Dipendente()
{
char mansione[15];
char stipendio[6];
}
main()
{
int menu;
char scelta1;
cout << "Esercizio 06/10/2014";
cout << endl << endl;
Persona prova;
Studente prova2;
Dipendente prova3;
do{
cout << "Che tipo di oggetto usi? 1)Persona 2)Studente 3)Dipendente"<<endl;
cin>>menu;
if((menu<1)||(menu>3))
cout<<"Scelta non valida!"<<endl;
}while((menu<1)||(menu>3));
if(menu==1)
{
prova.inserisciPersona();
do{
cout << "Vuoi visualizzare i dati inseriti? s/n"<<endl;
cin >> scelta1;
}while((scelta1!='s')&&(scelta1!='n'));
if(scelta1=='s')
prova.visualizzaPersona();
do{
cout << "Vuoi aggiornare i dati inseriti? s/n"<<endl;
cin >> scelta1;
}while((scelta1!='s')&&(scelta1!='n'));
if(scelta1=='s')
prova.aggiornaPersona();
cout<<endl<<endl;
prova.visualizzaPersona();
}
else
if(menu==2)
{
prova2.inserisciPersona();
prova2.inserisciStudente();
do{
cout << "Vuoi visualizzare i dati inseriti? s/n"<<endl;
cin >> scelta1;
}while((scelta1!='s')&&(scelta1!='n'));
if(scelta1=='s')
prova2.visualizzaStudente();
do{
cout << "Vuoi aggiornare i dati inseriti? s/n"<<endl;
cin >> scelta1;
}while((scelta1!='s')&&(scelta1!='n'));
if(scelta1=='s')
prova2.aggiornaStudente();
cout<<endl<<endl;
prova2.visualizzaStudente();
}
else
if(menu==3)
{
prova3.inserisciPersona();
prova3.inserisciDipendente();
do{
cout << "Vuoi visualizzare i dati inseriti? s/n"<<endl;
cin >> scelta1;
}while((scelta1!='s')&&(scelta1!='n'));
if(scelta1=='s')
{
prova3.visualizzaDipendente();
do{
cout << "Vuoi aggiornare i dati inseriti? s/n"<<endl;
cin >> scelta1;
}while((scelta1!='s')&&(scelta1!='n'));
if(scelta1=='s')
prova3.aggiornaDipendente();
cout<<endl<<endl;
prova3.visualizzaDipendente();
}
}
return 0;
}
Lavoro di gruppo sviluppato con Mattia Callegaro
Iscriviti a:
Post (Atom)