Laboratorio di Informatica I: Programmazione. AA 2002/03.
Esercitazione n. 6

Scopo di questa esercitazione è di familiarizzarsi con operazioni su allocazione dinamica della memoria, stringhe, arrays, strutture, lettura e scrittura di files.

Al solito, si suggerisce di creare una directory apposita per i files relativi a questa esercitazione.


     
  1. Dichiarare un puntatore a caratteri, pc, allocare memoria con l' istruzione
    pc = (char *)malloc(n);
    Dove   n, nella chiamata a malloc, e' un intero letto dall' esterno.  Inserire la lettura di n e la chiamata a malloc in un programma C  ed eseguirlo con valori via via crescenti di n.  Quando malloc non riesce ad allocare memoria ritorna il valore NULL. Verificando quando questo accade, si puo' dedurre qualcosa sulla memoria del processore ?

  2. Un metodo alternativo (e spesso piu' robusto) di leggere un file e'  realizzabile leggendo un' intera riga  in un array suffucientemente lungo mediante la funzione di libreria gets e successivamente usando la function sscanf per leggere e convertire i campi  all' interno della riga.  Un esempio di utilizzo e' il seguente:   
       char buffer[200];
       char *buff_ptr;
       ...
       buff_ptr = gets(buffer); /* l' input e' letto in buffer
                                   il puntatore buf_ptr punta a buffer
                                   se non ci sono errori. Altrimenti a NULL */
       sscanf(buffer,format_string,argomenti,....);
                                /* legge buffer come scanf legge stdin */
    
    Scrivere un programma che legga da stdin 5 nomi in altrettante stringhe, prima usando scanf e dopo con il costrutto gets/sscanf sopra descritto.                                                         
  3. Modificare il programma dell' esercizio 9 della lezione n.2 in modo che la tavola delle tabelline sia scritta su un file di nome tabella.dat. Usare le istruzioni fp=fopen("nomefile","w") e fprintf(fp,format_string,argomenti,....) .   Ricordare che fp deve essere dichiarato come puntatore a FILE.                                                                                                                       
  4. La struttura astratta "pila" (stack) puo' essere realizzata mediante un array (la cui dimensione determinera' la lunghezza massima della pila) ed un puntatore al tipo dati degli elementi dell' array usato come indicatore del primo  elemento libero dell' array.

    La gestione della pila richiede di definire varie functions per controllare: 

    Provare ad implementare queste functions.
  5. La derivata di una funzione reale f(x) in  x0 e' definita come 
    limite per x->x0 di    (f(x) -f(x0))/(x-x0).
    
    Implementare con un programma C il calcolo dei rapporti incrementali
    (f(x0+h)-f(x0))/h  per h->0 
    e
    (f(x)-f(x0))/(x-x0) per x->x0 
    nel caso della funzione f(x)= x2 e x0=1 . Verificare l' accuratezza delle due formule al diminuire della distanza tra punti scrivendo i risultati su un file.