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: SOLUZIONE OTTIMIZZATA PIU' RAPIDA CON ARRAY GRANDI
05:
06: */
07:
08: #include<stdio.h>
09: #include<stdlib.h>
10: #include<time.h>
11:
12: #define ASIZE (100000)
13: #define NOTVALID (0)
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: if(a[i] == NOTVALID) // se l'elemento in esame eraz gia' stato "eliminato" inutile ricercarlo come doppione
34: { // ripeto immediatamente il ciclo ovvero mi fermo qui e "salto" all'aggiornamento
35: ++count;
36: continue;
37: }
38: for(int j = i + 1; j < ASIZE; ++j) // ciclo per gli elementi seguenti a quello di indice i
39: {
40: ++count; // per contare le iterazioni devo incrementare il contatore all'interno del ciclo piu' interno
41: if(a[j] == a[i])
42: a[j] = NOTVALID;
43: }
44: }
45:
46:
47:
48: for(int i = 0; i < ASIZE; ++i)
49: {
50: if(a[i] != NOTVALID)
51: printf("L'elemento di indice #%d vale %u\n", i, a[i]);
52: }
53:
54: printf("DEBUG: ho ripetuto i cicli di ricerca dei numeri doppi %d volte\n", count);
55: return 0;
56: }
57:
58: