Ciao a tutti, sto svolgendo questo tema di esame per esercitarmi:
E' richiesto lo svolgimento in 30 minuti con l'ambiente "microsoft visual c++".
Vi posto il codice che ho buttato giù, mi vengono però segnalati degli errori dopo l'inserimento delle informazioni richieste e credo dipenda soprattutto dalla funzione "ordina".
#include <iostream>
#include <string>
#define N 200
using namespace std;
struct data{
int gg,mm,aa;
};
class animale{
public:
int codice;
string descrizione, provenienza;
data data_nascita;
void get(int cod, string des, string prov, int gg, int mm, int aa){
cod=codice;
des=descrizione;
prov=provenienza;
gg=data_nascita.gg;
mm=data_nascita.mm;
aa=data_nascita.aa;
}
void set(int cod, string des, string prov, int gg, int mm, int aa){
codice=cod;
descrizione=des;
provenienza=prov;
data_nascita.gg=gg;
data_nascita.mm=mm;
data_nascita.aa=aa;
}
};
class pecora:public animale{
string tosata;
public:
void get(int cod, string des, string prov, int gg, int mm, int aa, string tos){
cod=codice;
des=descrizione;
prov=provenienza;
gg=data_nascita.gg;
mm=data_nascita.mm;
aa=data_nascita.aa;
tos=tosata;
}
void get(int cod, int gg, int mm, int aa){
cod=codice;
gg=data_nascita.gg;
mm=data_nascita.mm;
aa=data_nascita.aa;
}
void get(int gg, int mm, int aa){
gg=data_nascita.gg;
mm=data_nascita.mm;
aa=data_nascita.aa;
}
void get(string tos){
tos=tosata;
}
void set(int cod, string des, string prov, int gg, int mm, int aa, string tos){
codice=cod;
descrizione=des;
provenienza=prov;
data_nascita.gg=gg;
data_nascita.mm=mm;
data_nascita.aa=aa;
tosata=tos;
}
};
int controllodata(int gg, int mm, int aa){
if(aa<2007 || aa>2011){
return 0;
}else if(aa==2007&&mm==03){
if(gg<13){
return 0;
}else{
return 1;
}
}else if(aa==2011&&mm==01){
if(gg>6){
return 0;
}else{
return 1;
}
}else if((aa==2007&&mm<03)||(aa==2011&&mm>01)){
return 0;
}else{
return 1;
}
}
void carica(pecora pec[N]){
int cod; string des, prov; int gg, mm, aa; string tos;
for(int i=0; i<N; i++){
do{
cout<<"Inserire codice, descrizione, provenienza, data nascita (gg mm aaaa), tosata (SI o NO): ";
cin>>cod>>des>>prov>>gg>>mm>>aa>>tos;
pec[i].set(cod,des,prov,gg,mm,aa,tos);
if(controllodata(gg,mm,aa) == 0){
cout<<"Reinserire";
}
}while(controllodata(gg,mm,aa) == 0);
}
}
void swap(pecora &pec1, pecora &pec2){
pecora temp;
temp=pec1;
pec1=pec2;
pec2=temp;
}
void ordina(pecora pec[N]){
bool swapped;
int gg,mm,aa,gg1,mm1,aa1;
do{
swapped=false;
for(int i=0; i<N-1; i++){
pec[i].get(gg,mm,aa);
pec[i+1].get(gg1,mm1,aa1);
if(aa > aa1){
swap(pec[i], pec[i+1]);
swapped=true;
}else if((aa == aa1) && (mm > mm1)){
swap(pec[i], pec[i+1]);
swapped=true;
}else if((aa == aa1) && (mm == mm1) && (gg > gg1)){
swap(pec[i],pec[i+1]);
swapped=true;
}
}
}while(swapped);
}
int main(){
pecora pecor[N];
carica(pecor);
ordina(pecor);
int conta=0;
int codice;
int gg, mm, aa;
string tosata;
for(int i=N; i>0; i--){
do{
pecor[i].get(tosata);
if(tosata == "SI"){
conta++;
pecor[i].get(codice,gg,mm,aa);
cout<<codice<<gg<<mm<<aa;
}
}while(conta < 15);
}
system("pause");
}
Potreste dirmi dove ho sbagliato e soprattutto darmi delle indicazioni per ridurre il codice in modo da rientrare nei 30 minuti richiesti?
Sicuramente ho scritto codice superfluo sintetizzabile in molte meno righe...
Grazie mille