Laboratorio di Informatica I: Programmazione. AA 2003/04.
Esercitazione n. 8

Scopo di questa esercitazione è di familiarizzarsi con l' utilizzo di file, operazioni di lettura e scrittura, definizione e manipolazione di liste concatenate.

Al solito, si suggerisce di creare una directory apposita per i files relativi a questa esercitazione.
Ricordare inoltre che i prototipi delle function di libreria per operare sulle strighe risiedono nel file di header string.h.


     
  1. Leggera una stringa lunga meno di 20 caratteri da stdin mediante scanf("%s",buf)   assegnandola ad un array di caratteri dichiarato come  char buf[20]; e far scrivere la lunghezza effettiva della stringa (calcolabile come strlen(buf)+1) oltre alla stringa stessa. Immettere in input una stringa di lunghezza maggiore di 20 caratteri. Cosa succede ?

    Modificare il convertitore di formato in "%20s" e riprovare a dare un input piu' lungo di 20 caratteri.

  2. Se la stringa in input nel precedente esercizio contiene spazi, con il convertitore di format %s si legge solo a partire dal primo carattere diverso da spazio fino a (ed escluso) il prossimo spazio (o newline). Per leggere una stringa che contenga spazi occorre il seguente converitore di formato: "%[^\n]" (legge dall' inizio della riga di input fino al carattere di newline).

    Provare nel precedente programma (anche nella versione "%20[^\n]") e verificarne il funzionamento. 

  3. Elaborare un programma che scriva su file le tabelline della moltiplicazione da quella dell' 1 a quella del 10. Usare i convertitori di formato della printf per ottenere un risultato esteticamente soddisfacente.

  4. Il file linklist.c  presente nelle pagine di appunti del corso presenta un esempio di definizione, manipolazione ed utilizzo di una lista concatenata.

    Esaminare l' implementazione,  compilare il programma e provare ad utilizzarlo. Aggiungere la stampa su file della lista e l' eventuale  lettura della stessa da file preesistente.

  5. Scrivere un programma che generi gli inversi dei primi 1000 numeri naturali e li scriva su due  file: uno mediante  scrittura formattata (fprintf) ed uno  mediante scrittura non formattata (fwrite). Chiudere i file e riaprirli in lettura verificando che i numeri letti coincidano con gli originali (puo' essere utile immagazzinare gli originali in un array di float.

    Verificare inoltre le dimensioni dei files cosi' ottenuti.

  6. Usare istruzioni per il precompilatore per selezionare il solo I/O formattato o il solo I/O non formattato nella compilazione del precedente programma e verificare (con il comando time nome_file_eseguibile ) i tempi di esecuzione nei due casi.