PDA

Visualizza la versione completa : [C++]Ordinare secondo data di nascita


Trollvicko
08-02-2015, 22:22
Salve ,

Da un pomeriggio circa sto cercando di capire come risolvere questo problema :

"inserire nome e data di nascita di due persone. Successivamente scegliere se ordinare le persone per ordine alfabetico usando come parametro il nome , o per ordine di data di nascita e stamparne il risultato."

Ora...io l'ordine alfabetico sono riuscito a farlo.. ma l'ordine per data di nascita proprio non capisco come procedere. Avevo pensato di fare tutte le combinazioni con degli if ma verrebbe troppo difficile e assai incasinato, non esiste qualcosa che faccia lo stesso lavoro ma in modo più semplice?
Di seguito metto il codice che sono riuscito a fare finora :


#include <iostream>#include <cstring>
#include <stdio.h>
using namespace std;
char nome[2][15];
int i=0, g[2],m[2],a[2];
void leggi_nomi_data(char nome[2][15],int g[2],int m[2],int a[2])
{
do
{
cout<<"inserisci il nome:";
cin>>nome[i];
cout<<"inserisci il giorno:";
cin>>g[i];
cout<<"inserisci il mese:";
cin>>m[i];
cout<<"inserisci l'anno:";
cin>>a[i];
i++;
} while(i<=1);
}
void visualizza_per_nomi(char nome[2][15])
{
int j;
if(j= strcmp (nome[0],nome[1])>0)
cout<<nome[1]<<"\n"<<nome[0];
else if(j= strcmp (nome[0],nome[1])<0)
cout<<nome[0]<<"\n"<<nome[1];
else
cout<<"i nomi sono uguali!"<<endl;


}
void visualizza_per_data(char nome[2][15],int g[2],int m[2],int a[2])
{
if(a[0]==a[1])
{
if(m[0]==m[1])
{
if(g[0]==g[1]) cout<<"le date sono uguali!"<<endl;
}
}
else if(a[0]>a[1])
{
if(m[0]>m[1])
{
if(g[0]>g[1]) cout<<nome[1]<<"\n"<<nome[0]<<endl;
}
}
else if(a[1]>a[0])
{
if(m[1]>m[0])
{
if(g[1]>g[0]) cout<<nome[0]<<"\n"<<nome[1]<<endl;
}
}

}
int main(){


int scelta;
leggi_nomi_data(nome,g,m,a);
cout<<"Vuoi che ordini per nome o per data? [1=nomi 2=data]: ";
cin>>scelta;
switch(scelta)
{
case 1:
visualizza_per_nomi(nome);
break;


case 2:
visualizza_per_data(nome,g,m,a);
break;


default:
cout<<"Errore! La tua scelta non è presente tra le opzioni!!"<<endl;
break;
}


return 0;
}




Grazie in anticipo .

MItaly
08-02-2015, 22:36
Per memorizzare i dati di ciascuna persona usa una struct; quindi, scrivi una funzione di confronto per ciascuna delle modalità di confronto richieste, e in base al suo risultato visualizza la prima o la seconda.
Per le date, puoi semplificare i confronti riducendo tutto ad un unico intero (anni*366+mesi*31+giorni) e confrontando quello.

oregon
08-02-2015, 22:39
Ma scusa, con carta e penna, come faresti?

Prendi la tua data e quella di un tuo amico. Quali passi faresti ?

Trollvicko
08-02-2015, 23:06
Ok ho fatto il programma con un pò di fatica.. ma ci sono riuscito.. l'ho impostato così :


#include <iostream>
#include <cstring>
#include <stdio.h>
using namespace std;
char nome[2][15];
int i=0, g[2],m[2],a[2];
void leggi_nomi_data(char nome[2][15],int g[2],int m[2],int a[2])
{
do
{
cout<<"inserisci il nome:";
cin>>nome[i];
cout<<"inserisci il giorno:";
cin>>g[i];
cout<<"inserisci il mese:";
cin>>m[i];
cout<<"inserisci l'anno:";
cin>>a[i];
i++;
} while(i<=1);
}
void visualizza_per_nomi(char nome[2][15])
{
int j;
if(j= strcmp (nome[0],nome[1])>0)
cout<<nome[1]<<"\n"<<nome[0];
else if(j= strcmp (nome[0],nome[1])<0)
cout<<nome[0]<<"\n"<<nome[1];
else
cout<<"i nomi sono uguali!"<<endl;


}
void visualizza_per_data(char nome[2][15],int g[2],int m[2],int a[2])
{
if(a[0]==a[1])
{
if(m[0]==m[1])
{
if(g[0]==g[1]) cout<<"le date sono uguali!"<<endl;
}
}
else if(a[0]<a[1]) cout<<nome[0]<<"\n"<<nome[1];
else if((a[0]==a[1])&&(m[0]<m[1]))cout<<nome[0]<<"\n"<<nome[1];
else if((a[0]==a[1])&&(m[0]==m[1])&&(g[0]<g[1]))cout<<nome[0]<<"\n"<<nome[1];
else if(a[1]<a[0])cout<<nome[1]<<"\n"<<nome[0];
else if((a[1]==a[0])&&(m[1]<m[0]))cout<<nome[1]<<"\n"<<nome[0];
else if((a[1]==a[0])&&(m[1]==m[0])&&(g[1]<g[0]))cout<<nome[1]<<"\n"<<nome[0];
}
int main(){


int scelta;
leggi_nomi_data(nome,g,m,a);
cout<<"Vuoi che ordini per nome o per data? [1=nomi 2=data]: ";
cin>>scelta;
switch(scelta)
{
case 1:
visualizza_per_nomi(nome);
break;


case 2:
visualizza_per_data(nome,g,m,a);
break;


default:
cout<<"Errore! La tua scelta non è presente tra le opzioni!!"<<endl;
break;
}


return 0;
}

Adesso però voglio cimentarmi nel metodo proposto da MItaly che sembra molto più semplice, senza usare le struct perchè non so ancora cosa sono ( sono alle prime armi).

Loading