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.

//! Puntatori 1. Leggere da tastiera un numero decimale memorizzandolo in opportuna variabile x. Definire un puntatore p che possa contenere l'indirizzo di x e inizializzarlo con tale indirizzo. Stampare: l'indirizzo di x, il contenuto di p, l'indirizzo di p, il contenuto di x, il valore contenuto all'indirizzo contenuto in p. 2. Leggere da tastiera due numeri interi nelle variabili i1 e i2. Si definiscano e inizializzino due puntatori di modo da contenere gli indirizzi delle due variabili i1 e i2. Si definisca una terza variabile sum e relativo puntatore ad essa. Si memorizzi in sum il risultato della somma di i1 e i2 usando esclusivamente i puntatori. Si stampi per verifica il contenuto di sum. //! Allocazione dinamica della memoria 3. chiedere all'utente un numero intero n, allocare array di n float dinamicamente con malloc(), leggere n numeri a virgola mobile e memorizzarli nell'array. Al termine stampare i numeri nell'ordine inverso rispetto a quando li si e' letti. Liberare la memoria prima di uscire dal programma. 4. come il precedente ma inizializzando l'array allocato a 0. Si verifichi che abbia funzionato stampando il contenuto dell'array prima di leggere i numeri con cui riempirlo. 5. si definisca un VLA di short dimensionandolo usando rand() per generare un numero a caso tra 80 e 100. Lo si riempa con numeri casuali tra 1 e 20. Mediante allocazione dinamica della memoria, allocare dinamicamente un secondo array di dimensione pari al primo sempre di short. Si ricopi il contenuto del primo array nel secondo. 6. si allochino dinamicamente due array di 100 elementi mediante calloc() e si stampino gli indirizzi di dove si trovano in memoria. Utilizzando realloc() si estendano gli array in modo da poter contenere 200 elementi e si stampino nuovamente gli indirizzi di dove si trovano. Sempre usando realloc() si "accorcino" gli array di modo da poter contenere 50 elementi e si stampi nuovamente il loro indirizzo in memoria. Cosa notate? 7. si riprenda l'esercizio E03.7, che diceva: si implementi il seguente algoritmo: a: input n b: fino a che n e' diverso da 1 ripetere i punti c e d: c: output n d: se n è dispari aggiornare n come n <-- 3n+1: altrimenti n <-- n/2 (divisione intera) e: stampare la lunghezza della sequenza ottenuta ovvero quanti numeri sono stati stampati Si memorizzi la sequenza ottenuta nel ciclo (b) usando array allocato dinamicamente. Dato che la lunghezza della sequenza è ignota a priori si usi realloc() per estendere l'array man mano che vengono generati i numeri. Stampare la sequenza ottenuta solo al termine del ciclo. //! Aritmetica dei puntatori 8. Si definisca e inizializzi un array di numeri in cui l'ultimo elemento, e solo lui, contiene 0. Si inizializzi un opportuno puntatore che inizialmente punti all'inizio dell'array. Usare lo stesso puntatore come variabile utilizzata da un ciclo for() per stampare il contenuto dell'array, facendo variare l'indirizzo contenuto nel puntatore di modo che man mano contenga l'indirizzo dei vari elementi dell'array. Sfruttare la presenza di uno 0 come ultimo valore contenuto nell'array al fine di terminare il for() stesso. 9. Come il precedente in cui però l'ultimo elemento dell'array possa contenere un numero qualsiasi. In questo caso per terminare il ciclo non posso affidarmi ad un valore specifico come lo 0 nel caso precedente. Posso però calcolarmi l'indirizzo di memoria dell'ultimo elemento dell'array e usarlo per far terminare il mio ciclo.
Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it