Riordinare dati in lista

di il
4 risposte

Riordinare dati in lista

Buona sera ragazzi ! Sono nuova
Mi hanno consigliato proprio ieri questo forum . Ho un piccolo problema .. se creo una struttura mediante la quale gestire dei dati qualsiasi.. per esempio ragazzi che si iscrivono ad un concorso dei quali mi vengono dati Nome,Cognome, Indirizzo ecc.. e inserisco inoltre il punteggio che ognuno di loro ottiene a tale concorso..
Al momento di riordinare i dati in ordine di punteggio (mediante bubblesort) non riesco a stampare oltre al punteggio anche i dati relativi al relativo candidato .


void ordinamento(list L){

		int i;
		int j;
		int tmp;
		 
		for(i=0; i<L.num_candidati-1 ;i++)
			for(j=0; j<L.num_candidati-1 ;j++)
		
				if(L.elemento[j].punteggio > L.elemento[j+1].punteggio){
				
           			 tmp=L.elemento[j].punteggio;
           			 L.elemento[j].punteggio=L.elemento[j+1].punteggio;
           			 L.elemento[j+1].punteggio=tmp;

        			 }

		printf("Lista in ordine di punteggio\n");

       		 for (i=0; i<L.num_candidati; i++){			
		
    		printf("Punteggio %d\n ",L.elemento[i].punteggio);
				}
         	 getchar();
}
Questa è la parte in cui riordino i punteggi dei ragazzi.. potreste darmi qualche suggerimento in merito al mio problema?

4 Risposte

  • Re: Riordinare dati in lista

    Non si capisce la struttura dati, spiega meglio....
    Comunque penso che tu debba fare attenzione a non scambiare solo il punteggio, ma tutti i dati a cui esso si riferisce...
  • Re: Riordinare dati in lista

    E' questo il punto..

    esempio:

    candidato 1:
    Nome: Marco
    Cognome: BlaBla
    Anni: 20
    Punteggio: 23

    candidato 2:
    Nome: Saverio
    Cognome: Blublu
    Anni:22
    Punteggio: 27

    candidato 3:
    Nome: Giuseppe
    Cognome: BliBli
    Anni: 25
    Punteggio: 20

    Con la funzone di ordinamento (in questo caso bubble_sort) ordino i punteggi (come dal codice scritto sopra). Oltre al punteggio vorrei che vengano visualizzati anche i dati relativi al candidato che ha ottenuto tale punteggio! Cioè prima stamperà Giuseppe BliBli, 25 anni, punteggio 20 , poi Marco BlaBla, 20 anni, punteggio 23 e infine Saverio BluBlu, 22 anni, punteggio 27.

    Cosa intendi per "non scambiare solo il punteggio, ma tutti i dati a cui esso si riferisce"?
  • Re: Riordinare dati in lista

    Io intendevo ti farmi vedere la dichiarazione della struct.... Comunque intendo che devi scambiare oltre al punteggio anche il nome, cognome e anni altrimenti il punteggio che tu scambi con sará più riferito al candidato che ha totalizzato quel punteggio.... Non saprei come dirtelo in altro modo...
  • Re: Riordinare dati in lista

    Innanzi tutto ti consiglio di postare la definizione della lista e della struttura elemento per farci capire meglio.

    Comunque al momento tu non riordini i componenti della lista. Tu stai riordinando i punteggi assegnati ad ogni candidato. Mi spiego meglio, nel momento in cui effettui lo scambio:
     
     tmp=L.elemento[j].punteggio;
     	L.elemento[j].punteggio=L.elemento[j+1].punteggio;
            L.elemento[j+1].punteggio=tmp;
    
    tu stai scambiando i punteggi. infatti tradotto a parole il tuo codice è il seguente:
    • 1) assegna a tmp il valore del punteggio dell'elemento j-esimo della mia lista;
    • 2) assegna al punteggio dell'elemento j-esimo della mia lista il valore del punteggio dell'elemento j+1 esimo della mia lista.
    • 3) assegna al punteggio dell'elemento j+1 esimo della mia lista il valore di temp.
    così ti trovi ad avere gli elementi della lista nello stesso ordine ma col punteggio scambiato, per esempio poni di avere:

    candidato 1:
    Nome: Marco
    Cognome: BlaBla
    Anni: 20
    Punteggio: 23

    candidato 2:
    Nome: Saverio
    Cognome: Blublu
    Anni:22
    Punteggio: 27

    candidato 3:
    Nome: Giuseppe
    Cognome: BliBli
    Anni: 25
    Punteggio: 20

    Dopo il tuo algoritmo avrai:

    candidato 1:
    Nome: Marco
    Cognome: BlaBla
    Anni: 20
    Punteggio: 27

    candidato 2:
    Nome: Saverio
    Cognome: Blublu
    Anni:22
    Punteggio: 23

    candidato 3:
    Nome: Giuseppe
    Cognome: BliBli
    Anni: 25
    Punteggio: 20

    Il che non è quello che vuoi.

    Devi scambiare gli elementi della lista in modo da avere:

    candidato 1:
    Nome: Saverio
    Cognome: Blublu
    Anni:22
    Punteggio: 27

    candidato 2:
    Nome: Marco
    Cognome: BlaBla
    Anni: 20
    Punteggio: 23

    candidato 3:
    Nome: Giuseppe
    Cognome: BliBli
    Anni: 25
    Punteggio: 20

    Quindi tradotto a parole l'algoritmo che devi applicare è, ponendo di avere tmp dichiarato in modo corretto:
    • 1)assegna a tmp il l'elemento j esimo della mia lista
    • 2)metti al posto j esimo della mia lista la struttura che sta al posto j+1 esimo
    • 3)metti al posto j+1 esimo della mia lista la struttura che sta nella variabile tmp
Devi accedere o registrarti per scrivere nel forum
4 risposte