Ritorna alla pagina del corso.

Questa pagina contiene gli esercizi proposti in laboratorio e -alcune- delle soluzioni proposte.
Si suggerisce di provare a risolvere gli esercizi e solo in un secondo tempo di confrontare quanto fatto con le soluzioni proposte.

01: /*
02: come il (2) in cui perĂ² prima della stampa si eliminino gli
03: elementi duplicati
04: 
05: */
06: 
07: #include<stdio.h>
08: #include<stdlib.h>
09: #include<time.h>
10: 
11: #define ASIZE (100000)
12: #define NOTVALID (0) // l'intervallo di numeri possibili e' [10,80]. Quindi questo valore mi permette di segnalare elementi
13:          // "vuoti"
14: 
15: int main(int argc, char **argv){
16: 
17:   srand(time(0));
18: 
19:   unsigned short a[ASIZE];
20: 
21:   for(int i = 0; i < ASIZE; ++i)
22:   {
23:     a[i] = 10 + rand() % 71;
24:   }
25: 
26:   // devo analizzare nuovamente tutti gli elementi 
27:   // e per ciascuno trovare se vi siano o meno doppioni
28:   // ed eliminare i doppioni
29:   int count = 0; // DEBUG: quante iterazioni ho?
30:   for(int i = 0; i < ASIZE - 1; ++i) // ciclo su tutti gli elementi   e li confronto 
31:              // con i successivi inutile arrivare fino all'ultimo visto che non ha elementi dopo
32:   {
33:     for(int j =  i + 1; j < ASIZE; ++j) // ciclo per gli elementi seguenti a quello di indice i
34:     {
35:       ++count; // per contare le iterazioni devo incrementare il contatore all'interno del ciclo piu' interno
36:       if(a[j] == a[i])
37:   a[j] = NOTVALID;
38:     }
39:   }
40: 
41: 
42: 
43:   for(int i = 0; i < ASIZE; ++i)
44:   {
45:     if(a[i] != NOTVALID)
46:       printf("L'elemento di indice #%d vale %u\n", i, a[i]);
47:   }
48: 
49:   printf("DEBUG: ho ripetuto i cicli di ricerca dei numeri doppi %d volte\n", count);
50:   return 0;
51: }
52: 
53: