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: