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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.