salve, ho svolto questo programma
funziona tutto tranne la procedura di ordinamento BubbleSort
mi potete aiutare?grazie
//Esercizio sulle Struct
/*
Scrivere un programma che permette di gestire in memoria
un numero massimo di 30 persone.
Il programma deve consentire l'iserimento dei dati, la ricerca di un dato
conoscendo il cognome di una persona e la stampa su video di tutte le
persone inserite ed eventualmente ordinate per data di nascita
*/
#include<cstdlib>
#include<iostream>
#include<string>
#ifdef _WIN32
const char* pulisci = "cls";
#else
#ifdef linux
const char* pulisci = "clear";
#else
#error OS non supportato
#endif
#endif
using namespace std;
struct Tpdata{
int giorno;
int mese;
int anno;
};
struct TpPersona{
char cognome[20];
char nome[20];
Tpdata nascita;
char luogo[20];
};
TpPersona Persone[30];
int MenuScelta();
void Inserimento(TpPersona&, char&);
void Stampa(const TpPersona&);
int Ricerca(char[], TpPersona[], const int);
void ordinaBubble(TpPersona[], const int);
int main(){
TpPersona persona1;
int corrente, NumPers=0;
int scelta;
char ch;//serve per salvare i dati della persona
char cognome2[30];
//scelta menu
do{
scelta=MenuScelta();
system(pulisci);
cout<<"Numero delle persone : "<<NumPers<<endl;
switch(scelta){
case 1:
//inserimento
Inserimento(persona1,ch);
if(ch=='s')
Persone[NumPers++]=persona1;
break;
case 2:
//ricerca
cout<<"Cognome da ricercare = ";
cin>>cognome2;
corrente=Ricerca(cognome2,Persone,NumPers);
if(corrente>-1)
Stampa(Persone[corrente]);
else
cout<<"Dati non trovati"<<endl;
break;
case 3:
//Stampa dati
cout<<" STAMPA DATI "<<endl;
for(corrente=0;corrente<NumPers;corrente++){
Stampa(Persone[corrente]);
}
break;
case 4:
//Stampa ordinati
cout<<" STAMPA DATI ORDINATI "<<endl;
ordinaBubble(Persone, NumPers);
for(corrente=0;corrente<NumPers;corrente++){
Stampa(Persone[corrente]);
}
break;
}
}while(scelta>0&&scelta<5);
}
int MenuScelta(){
int sc;
do{
cout<<"GESTIONE PERSONE"<<endl;
cout<<"\n";
cout<<"1 - INSERIMENTO PERSONE"<<endl;
cout<<"2 - RICERCA"<<endl;
cout<<"3 - STAMPA"<<endl;
cout<<"4 - STAMPA ORDINATI PER NASCITA"<<endl;
cin>>sc;
}
while(sc<1||sc>5);
return sc;
}
void Inserimento(TpPersona& persona1, char& ch){
cout<<"INSERIMENTO PERSONA"<<endl;
cout<<"Cognome : ";
cin>>persona1.cognome;
cout<<"Nome : ";
cin>>persona1.nome;
cout<<"Data di nascita GG MM AAAA : ";
cin>>persona1.nascita.giorno>>persona1.nascita.mes e>>persona1.nascita.anno;
cout<<"Luogo di nascita : ";
cin>>persona1.luogo;
cout<<"Salva(s/n) : ";
cin>>ch;
}
void Stampa(const TpPersona& persona1){
cout<<"Nome : "<<persona1.nome<<" ";
cout<<"Cognome : "<<persona1.cognome<<" ";
cout<<"Luogo di nascita : "<<persona1.luogo<<" ";
cout<<persona1.nascita.giorno<<"/"<<persona1.nascita.mese<<"/"<<persona1.nascita.anno;
cout<<endl;
}
int Ricerca(char cognome2[], TpPersona Persone[], const int NumPers){
int i=0;
bool trovato=false;
while(i<NumPers&&!trovato){
if(strcmp(Persone[i].cognome, cognome2)==0){
trovato=true;
return i;
}
else i++;
}
if(!trovato)
return -1;
}
void scambia(TpPersona &x1, TpPersona &x2){
TpPersona s;
s=x1;
x1=x2;
x2=s;
}
double dataNum(Tpdata x){
return x.anno*10000+x.mese*100+x.giorno;
}
void ordinaBubble(TpPersona Persone[], const int NumPers){
int j,k;
Tpdata nasc1, nasc2;
for(k=0;k<NumPers;k++){
for(j=NumPers-2;j>k;j--){
nasc1=Persone[j].nascita;
nasc2=Persone[j+1].nascita;
if(dataNum(nasc1)>dataNum(nasc2))
scambia(Persone[j], Persone[j+1]);
}
}
}