Laboratorio di Informatica I: Programmazione.
AA 2003/04.

Esercitazione n. 2

Scopo di questa  sessione  è di continuare ad  esercitarsi   con l' interprete di comandi (bash)  in ambiente UNIX, apprendere il ciclo  basilare  di  scrittura  di semplici programmi C, loro compilazione ed esecuzione. I programmi si limitano a leggere un input e mostrare l' output, eventualmente dopo semplici elaborazioni Già così si dispone di un potente strumento di calcolo.

  1. Creare una directory di nome Labo2  e ridefinirla come directory di default  (comando cd, v. esercitazione n.1).

  2.  
  3. 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:

  4.     ls
    n=0
    elenco_files=*
    for nome in $elenco_files
    do
    if ( [ ! -d $nome ] )
    then
    n=$[$n+1]
    mv $nome $n
    fi
    done
    ls
     
  5. 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.
  6. #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
     
  7. Verificare  di nuovo  mediante il comando ls quali files sono presenti nella directory corrente.     Usare il comando
  8. ls -l
    per avere un' informazione piu' dettagliata sulle proprieta' dei files presenti.

  9. 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!)

  10.  
  11. Cambiare il nome del file a.out in primo.x

  12.  
  13. 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".

  14.  
  15. 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
  16. 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
  17. 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 ).
  18. 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.
     

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