Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [ C++ ] Ordinare una Struttura Array di Record

    Ciao a tutti qualcuno mi saprebbe illuminare su dove sbaglio: Ho un array di record di alunni formato dai seguenti sotto-campi: [nome],[cognome],[voto] io li devo ordinare in base al voto ricevuto dal più alto al più basso.

    codice:
    void ordinaRecord( alunni &a, alunni h, int r )
    {
         int register i, j;
    
         for( i = 0; i < r-1; i++ )
         {
              for( j = 1; j < r; j++ )
              {
                   if( a.voto[ i ] < a.voto[ j ] )
                   {
                       strcpy( h.nome[ 0 ], a.nome[ j ] );
                       strcpy( h.cognome[ 0 ], a.cognome[ j ] );
                       h.voto[ 0 ] = a.voto[ j ];
                       
                       strcpy( a.nome[ j ], a.nome[ i ] );
                       strcpy( a.cognome[ j ], a.cognome[ i ] );
                       a.voto[ j ] = a.voto[ i ];
                       
                       strcpy( a.nome[ i ], h.nome[ 0 ] );
                       strcpy( a.cognome[ i ], h.cognome[ 0 ] );
                       a.voto[ i ] = h.voto[ 0 ]; 
                   }
                   
              }
         }
         
    }
    l'array viene caricato da file e passato in memoria.
    Il file è così scritto:

    codice:
    Pinco Pallino 18
    Tizio Caio 27
    Semprionio Sempronis 25
    Ciccio Palla 23
    Il codice viene eseguito però mi ordina solo il primo con il secondo e non itera il bubble sort per gli altri elementi dell'array di record e non capisco il perchè.

    Qualcuno mi saprebbe aiutare ?

    P.s. Sto utilizzando dev c++ come ide.

    Grazie.

    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Perché scrivi a.nome[j] o anche a.cognome[j] ... dovrebbe essere a[j].nome e a[j].cognome e similmente per il resto ... e cosa è h ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Sì a volte ho visto anche il tuo metodo scritto da altri, però io li ho sempre scritti così i record, secondo me sono scritture equivalenti.

    h.nome[] , h.cognome[] ed h.voto[] è un record, anch'esso di 3 campi come "a."

    di trattenimento, una struttura ausiliaria per effettuare il bubble sort.

    Secondo te dov'è il problema? Hai visto l'immagine allegata ( cliccaci due volte sopra )?

    Grazie!
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... non sono affatto "equivalenti" e il mio non è un "metodo".

    Il fatto è che se cognome è una stringa se scrivi

    x.cognome[]

    stai gestendo i caratteri della stringa cognome mentre se scrivi

    x[].cognome

    stai gestendo la stringa cognome di un elemento del vettore di record x

    Quindi, ti consiglio di rivedere tutto il codice secondo quanto ti ho detto (e di rivedere i capitoli del tuo libro riguardanti i vettori e le strutture).

    Se non sei convinto, posta tutto il codice completo di main e ti mostro i problemi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ciao, ti uppo in zip il progetto:

    Download
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quel link non è corretto ...

    Comunque, puoi inviare sul forum il sorgente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Riprova ora...
    Download
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il problema è che hai usato quel tipo "stringa" che fa solo confusione.
    In questo modo hai definito il tipo dati "alunni" invece di definire un tipo "alunno" (come logicamente dovrebbe essere) e in seguito un vettore alunni di tipo alunno.

    Ovvero, io avrei scritto

    codice:
    typedef struct
    {
            char nome[ NMAX ];
            char cognome[ NMAX ];
            int voto;
    } alunno;
    e poi, nel main

    alunno alunni[NMAX]

    In questo modo controllerai correttamente gli indici con

    alunni[i].cognome

    e così via, riportando tutto ad un modo di operare più chiaro.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Ciao ho riscritto il codice come mi hai consigliato:

    Download

    Ora scorre l'array di record con a[ i ].nome ect...
    però comunque l'ordinamento della struttura non è completo ma si ferma ai primi due elementi.

    Non capisco il perchè.
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  10. #10
    Ci sono quasi j doveva partire da 0! Solo che ora me li mette in ordine crescente e non in ordine decrescente come vorrei... adesso ci ragiono un altro po!!
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

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.