- Creare una directory di nome Labo2 e ridefinirla come directory
di default (comando cd, v. esercitazione n.1).
- Nella directory Labo2 creare una sottodirectory di nome
dir e 5 files con nomi a piacere. Usare quindi i seguenti
comandi per cambiare i nomi dei soli files in interi successivi:
ls
n=0
elenco_files=*
for nome in $elenco_files
do
if ( [ ! -d $nome ] )
then
n=$[$n+1]
mv $nome $n
fi
done
ls
- Creare mediante l' editor un file di testo di nome primo.c
(nella directory Labo2) contenente il seguente programma C
che legge un carattere in input dalla tastiera e lo mostra su schermo.
#include <stdio.h>
int main()
{
char input; /* input è il nome di una variabile di tipo carattere*/
scanf("%c",&input); /* istruzione di lettura da stdin */
printf(" %c \n",input); /* istruzione di scrittura su stdout */
return 0;
}
Verificare con in comando ls quali sono i files presenti nella
directory. Compilare il programma con il comando
gcc -ansi -pedantic primo.c
- Verificare di nuovo mediante il comando ls
quali files sono presenti nella directory corrente.
Usare il comando
ls -l
per avere un' informazione piu' dettagliata sulle proprieta' dei files
presenti.
- Provare a guardare con l' editor il contenuto del file a.out
creato dal compilatore C. Cosa si vede ? Perché ? (ATTENZIONE:
NON salvare il file a.out con l' editor!)
- Cambiare il nome del file a.out in primo.x.
- Eseguire il file primo.x digitandone il nome preceduto
da ./ (che è il modo per indicare che il file in questione
risiede nella directory corrente), Es: ./primo.x,
e premendo "invio". Attenzione, quando il programma viene eseguito, la prima
istruzione "aspetta" silenziosamente un input da tastiera. L' input termina
quando si preme il tasto "invio".
- Modificare il programma precedente in modo che scriva su
schermo un' informazione sul fatto che e' in attesa di input. Scrivere
la versione modificata su un secondo file di nome secondo.c, ricompilare
ed eseguire.
ATTENZIONE: si puo' fare in modo che il compilatore generi il file
eseguibile direttamente con un nome assegnato (invece del default a.out)
mediante l' istruzione
gcc -ansi -pedantic -o secondo.x secondo.c
- Eseguire il programma primo.x in modo che l' output, invece
di essere visualizzato sullo schermo, sia scritto su un file. A tale scopo
si può utilizzare il meccanismo della ri-direzione dell' output:
./primo.x > file_out
- Modificare il programma primo.c in modo che la variabile input
invece di essere di tipo carattere (char) sia di tipo reale (float). Le modifiche
da fare sono: i) cambiare "char input;" in "float input;" nonché cambiare
i %c nella scanf e printf in %f. Ricompilare ed eseguire di nuovo (scrivendo
su un diverso file, p.es; file_out2). Confrontare le dimensioni del file
con quelle di quello ottenuto col programma che lavorava col tipo dati "carattere"
(guardare alle dimensionei del file come riportate dal comando ls -l
).
- Scrivere un programma C che risolva l' equazione generica di
primo grado a coefficienti reali ( ax+b = 0). Compilare ed eseguire il
programma con input diversi e verificare i risultati ottenuti.
Nella lettura e scrittura di dati reali, le istruzioni scanf e
printf richiedono un descrittore di conversione %f (o %e) invece di %c, come
nel programma primo.c, o di %d, come nel caso di lettura e scrittura di interi.
- Scrivere un programma che legga un valore di x (reale) e calcoli
il valore della funzione 1/x. Utilizzare il programma per studiare
il limite della funzione per x -> 0. Che succede ?
(Suggerimento: per immettere valori reali molto grandi o molto
piccoli e' preferibile usare la notazione scientifica per le costanti: 2.3
1035 in C si scrive 2.3e35, 7 10-23 diviene 7e-23)