Advertisement
jackdharma1994

Untitled

Mar 7th, 2014
1,919
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.09 KB | None | 0 0
  1. /*  Dato un elenco (array) di persone partecipanti a un concorso, ordinare l’elenco in
  2.     ordine alfabetico in base al campo cognome. La struttura che identifica il partecipante è
  3.     struct persona {char *nome; char *cognome;};
  4.     typedef struct persona id;
  5.     struct partecipante {id *utente; unsigned short codice; };
  6. */
  7.  
  8. struct persona{
  9.     char* nome;
  10.     char* cognome;
  11. };
  12.  
  13. typedef struct persona id;
  14.  
  15. struct partecipante{
  16.     id utente;
  17.     unsigned short codice;
  18. };
  19.  
  20. typedef struct partecipante partecipante;
  21.  
  22. // la procedura scambia due partecipanti
  23. void Scambio(partecipante* a, partecipante* b)
  24. {
  25. partecipante tmp;
  26.  
  27. tmp = *a;
  28. *a = *b;
  29. *b = tmp;
  30.  
  31. return;
  32. }
  33.  
  34. int main()
  35. {
  36.     int i;
  37.     int ult_scambio;
  38.     int fine_ord;
  39.     int n=3;
  40.     fine_ord=n-1;
  41.     partecipante partecipante[100];
  42.  
  43. partecipante[0].utente.cognome="Lee";
  44. partecipante[0].utente.nome="Luca";
  45. partecipante[0].codice = 8376;
  46. partecipante[1].utente.cognome="Scorre";
  47. partecipante[1].utente.nome="Gina";
  48. partecipante[1].codice = 8566;
  49. partecipante[2].utente.cognome="Berlusconi";
  50. partecipante[2].utente.nome="Silvio";
  51. partecipante[2].codice = 834;
  52.  
  53.  while (fine_ord!=0)
  54.     {   // Se non ci sono più elementi da scambiare porto ultimo scambio a 0
  55.         // Darà il suo valore a fine_ord e usciremo dal while
  56.         ult_scambio=0;
  57.         // Controllo tutti gli elementi della struct
  58.         for (i=0; i<fine_ord; i++)
  59.         {   // Se il partecipante di indice I è alfabeticamente maggiore del partecipante di indice I+1
  60.             if (strcmp(partecipante[i].utente.cognome, partecipante[i+1].utente.cognome) > 0)
  61.             { // Scambio i dati
  62.               Scambio(&partecipante[i], &partecipante[i+1]);
  63.               // E porto l'ultimo scambio effettuato a I
  64.              ult_scambio=i;
  65.             }
  66.         } // Riporto la I a ultimo scambio, se l'if non si verifica più, nella prossima iterazione
  67.         // fine_ord avrà il valore 0
  68.         fine_ord=ult_scambio;
  69.     }
  70.     // Stampo infine l'array ordinato
  71.     for (i=0;i<n;i++) {
  72.         puts(partecipante[i].utente.cognome);
  73.     }
  74.  
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement