Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++]Ordinare secondo data di nascita

    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 :

    codice:
    #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 .

  2. #2
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma scusa, con carta e penna, come faresti?

    Prendi la tua data e quella di un tuo amico. Quali passi faresti ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Ok ho fatto il programma con un pò di fatica.. ma ci sono riuscito.. l'ho impostato così :

    codice:
    #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).
    Ultima modifica di MItaly; 09-02-2015 a 02:50

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.