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: 7. si riprenda l'esercizio E03.7. Si memorizzi la sequenza ottenuta
03: nel ciclo (b) usando array allocato dinamicamente. Dato che la
04: lunghezza della sequenza รจ ignota a priori si usi realloc() per
05: estendere l'array man mano che vengono generati i numeri.
06: Stampare la sequenza ottenuta solo al termine del ciclo.
07: */
08:
09:
10: #include<stdio.h>
11: #include<stdlib.h>
12:
13: int main(int argc, char **argv){
14:
15: int n;
16: printf("Dammi un numero n: ");
17: scanf("%d", &n);
18:
19: int *mynumbers = NULL; // obbligatoria l'inizializzazione a NULL se lo uso con realloc()
20: int lungh = 0; // con un array che faccio crescere man mano con realloc()
21: // e' fondamentale usare variabile d'appoggio per memorizzare
22: // la dimensione aggiornata
23:
24: while(n != 1)
25: {
26: //printf("%d ", n);
27: ++lungh; // incremento dimensione array
28: mynumbers = realloc(mynumbers, sizeof(int) * lungh);
29: mynumbers[lungh - 1] = n; // memorizzo n nell'ultimo elemento (dimensione array - 1)
30: printf("DEBUG: ora mynumbers punta all'indirizzo %p e contiene %d elementi, l'ultimo elemento aggiunto vale %d\n", mynumbers, lungh, n);
31:
32:
33: if(n%2)
34: n = 3*n + 1;
35: else
36: n = n/2;
37:
38: }
39:
40: printf("\nLa sequenza ottenuta e' formata da %d numeri\n", lungh);
41: for(int i = 0; i < lungh; ++i)
42: printf("%d ", mynumbers[i]);
43: printf("\n");
44:
45: free(mynumbers);
46:
47: return 0;
48: }
49:
50: