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

    Rubrica telefonica con liste: problema ordinamento

    ciao a tutti. ho fatto questo codice in c++ per la gestione di una rubrica, nella quale devo svolgere i casi di inserimento, stampa, ricerca elemento e ordinamento. per ogni persona devo inserire nome,cognome,residenza,telefono,email. ho provato a fare l'ordinamento ma non mi torna, anche se a logica mi sembra corretto. vi passo il codice. se potete dirmi dove sbaglio in questo codice e cosa devo modificare per risolvere il problema...


    // Rubrica telefonica
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include "fstream"
    #include "windows.h"
    #include "conio.h"


    using namespace std;
    void SetColor(short Color)
    {
    HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); // oppure system("COLOR E9");
    SetConsoleTextAttribute(hCon,Color);
    }
    struct nodo
    {

    string nome, cognome, email, residenza,telefono;
    nodo*succ;
    };


    typedef struct rubrica{

    string nome,cognome,telefono,email,residenza;
    };




    int main(int argc, char *argv[])
    {
    //Programma principale
    int scelta,numero,i,j,k; //k contatorre
    string nominativo,codice,pasword,nuovocodice;
    bool errato=false;
    nodo *testa;
    nodo *inpiu;
    nodo *punt;
    testa=NULL;
    pasword="info";
    rubrica pippo[1000]; //vettore di strutture per ordinare

    char mail[100];

    rubrica app;

    do{
    SetColor(2);
    cout<<"Digitare 0 per uscire dal programma "<<endl;
    cout<<"Digitare 1 per inserire un nuovo utente "<<endl;
    cout<<"Digitare 2 per stampare l'intera rubrica telefonica "<<endl;
    cout<<"Digitare 3 per ordinare la rubrica telefonica "<<endl;
    cout<<"Digitare 4 per inserire un nome e per verificare se e' presente all'interno della lista e se lo e' c'e' la stampa della lista "<<endl;
    cout<<"Digitare 5 per cancellare l'intera rubrica telefonica dopo la richiesta di password "<<endl;
    cout<<"Digitare 6 per fare il controllo dell'email "<<endl;
    cout<<"Digitare 7 per far salvare la rubrica in un file "<<endl;
    cin>>scelta;
    cout<<endl;
    switch(scelta){
    case 1://Inserimento di un nuovo utente.
    SetColor(3);
    if(testa==NULL){
    cout<<"La lista vouta "<<endl;
    testa=new nodo;//Creazione di un nuovo nodo.
    testa->succ=NULL;
    cout<<"Inserire il cognome --> "<<endl;
    cin>>testa->cognome;
    cout<<"Inserire il nome --> "<<endl;
    cin>>testa->nome;
    cout<<"Inserire la residenza "<<endl;
    cin>>testa->residenza;
    cout<<"Inserire l'email "<<endl;
    cin>>testa->email;
    cout<<"Inserire il numero telefonico "<<endl;
    cin>>testa->telefono;
    }
    else
    if(testa->succ==NULL){//Con un solo elemento.
    inpiu=new nodo;
    inpiu->succ=NULL;
    cout<<"Inserire il cognome --> "<<endl;
    cin>>inpiu->cognome;
    cout<<"Inserire il nome --> "<<endl;
    cin>>inpiu->nome;
    cout<<"Inserire la residenza --> "<<endl;
    cin>>inpiu->residenza;
    cout<<"Inserire l'email --> "<<endl;
    cin>>inpiu->email;
    cout<<"Inserire il numero telefonico --> "<<endl;
    cin>>inpiu->telefono;
    cout<<endl;
    testa->succ=inpiu; }
    else{
    inpiu=testa;
    while(inpiu->succ!=NULL){
    inpiu=inpiu->succ;
    }
    punt=new nodo;
    punt->succ=NULL;
    cout<<"Inserire il cognome --> "<<endl;
    cin>>punt->cognome;
    cout<<endl<<"inserisci nome --> "<<endl;
    cin>>punt->nome;
    cout<<"Inserire la residenza --> "<<endl;
    cin>>punt->residenza;
    cout<<endl<<"Inserire l'email --> "<<endl;
    cin>>punt->email;
    cout<<endl<<"Inserire il numero di telefono--> "<<endl;
    cin>>punt->telefono;
    cout<<endl;
    inpiu->succ=punt;
    }

    break;
    case 2://Stampa dell'intera rubrica telefonica.
    SetColor(6);
    if(testa==NULL)//Lista è vuota.
    cout<<"La lista e' vuota "<<endl;
    else
    if(testa->succ==NULL)
    cout<<" La lista ha uno solo elemento che e': Cognome: --> "<<testa->cognome<<endl<<"Nome: "<<testa->nome<<endl<<"Telefono: "<<testa->telefono<<endl<<"Residenza: "<<testa->residenza<<endl<<"Email: "<<testa->email<<endl;
    else{
    inpiu=testa;
    do{
    cout<<"La lista ha piu' di un elemento: Cognome: "<<inpiu->cognome<<endl<<"Nome: "<<inpiu->nome<<endl<<"Telefono "<<inpiu->telefono<<endl<<"Residenza "<<inpiu->residenza<<endl<<"Email "<<inpiu->email<<endl;
    inpiu=inpiu->succ;
    }while(inpiu!=NULL);
    }
    break;
    case 3://Ordinamento della rubrica telefonica.

    SetColor(3);
    //Scorrere tutta la lista e salvarla nel vettore.
    if(testa==NULL)//Lista è vuota.
    cout<<"La lista e' vuota non posso ordinare"<<endl;
    else
    if(testa->succ==NULL)
    cout<<" La lista ha un solo lemento che e': Cognome: --> "<<testa->cognome<<endl<<"Nome: "<<testa->nome<<endl<<"Telefono: "<<testa->telefono<<endl<<"Residenza: "<<testa->residenza<<endl<<"Email: "<<testa->email<<endl;
    else{
    inpiu=testa;
    k=-1;
    do{
    k++;
    pippo[k].cognome=inpiu->cognome;
    pippo[k].nome=inpiu->nome;
    pippo[k].telefono=inpiu->telefono;
    pippo[k].residenza=inpiu->residenza;
    pippo[k].email=inpiu->email;
    inpiu=inpiu->succ;
    }while(inpiu!=NULL);
    }

    for(i=0;i<k-1;i++)
    for(j=i+1;j<k;j++)
    if(pippo[i].cognome>pippo[j].cognome){
    app=pippo[i];
    pippo[i]=pippo[j];
    pippo[j]=app;
    }
    //Stampa vettore
    for(i=0;i<k;i++){
    cout<<"Cognome :"<<pippo[i].cognome<<endl;
    cout<<"Nome: "<<pippo[i].nome<<endl;
    cout<<"Residenza: "<<pippo[i].residenza<<endl;
    cout<<"Email: "<<pippo[i].email<<endl;
    cout<<"Telefono: "<<pippo[i].telefono<<endl;

    }




    break;

    }
    }while(scelta!=0);
    cout<<"Fine del programma "<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
    }

  2. #2

    AIUTATEMI VI PREGO!

    ragazzi venitemi in contro!!!devo consegnare questo programma domani è senza l'ordinamento giusto sono fritto!...io ciò provato a farlo e trovare l'errore ma non ci riesco!aiutatemi!!!

  3. #3

    Re: Rubrica telefonica con liste: problema ordinamento

    Intanto, varrà per la prossima volta, il codice lo devi inserire nel tag CODE perchè non facendolo sicuramente non invogli le persone al leggere il tuo codice che gia sembra fatto un po' così....

    Venendo al tuo problema: quell'ordinamento ti sembra giusto scusa ?


    Originariamente inviato da bomberino92
    codice:
                  for(i=0;i<k-1;i++)
                       for(j=i+1;j<k;j++)
                            if(pippo[i].cognome>pippo[j].cognome){
                                 app=pippo[i];
                                 pippo[i]=pippo[j];
                                 pippo[j]=app;
                                 }   
                                 //Stampa vettore
                                 for(i=0;i<k;i++){                             
                                 cout<<"Cognome :"<<pippo[i].cognome<<endl;
                                 cout<<"Nome: "<<pippo[i].nome<<endl;
                                 cout<<"Residenza: "<<pippo[i].residenza<<endl;
                                 cout<<"Email: "<<pippo[i].email<<endl;
                                 cout<<"Telefono: "<<pippo[i].telefono<<endl;
                                 
                                  }
    Gia che vabbè per fare una cosa buona dovresti fare l'ordinamento sulla linkedlist e non su un vettore temporaneo che spreca solo memoria

    Se 2 persone hanno un cognome uguale devi ordinare anche il nome, e poi l'ordinamento di due stringhe non si fa con stringa1 > stringa2

    Usa std::string::compare

    lolide
    Java Programmer

    Informati

  4. #4
    grazie per avermi risposto! lo so, forse l'ordinamento con un vettore non è la cosa migliore; ma il prof vuole che si usi solo questo metodo! comunque grazie per la risposta

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 © 2025 vBulletin Solutions, Inc. All rights reserved.