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: