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

Scopo di questa esercitazione è di familiarizzarsi con le manipolazioni di base di files e directories in ambiente UNIX, con la scrittura di semplici programmi C , la 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.

N.B. evidentemente, i comandi per l' interprete di comandi presuppongono di lavorare in ambiente UNIX nativo o in emulazione. Chi eseguisse questi esercizi in ambiente Windows senza emulatore, dovra' cercare nella documentazione windows come ottenere le stesse funzionalita'.

  1. Creare una directory di nome uguale al proprio cognome  (nelle righe sequenti la denoteremo come cognome). (Suggerimento: se si lavora con l' interprete grafico linux aprire una finestra terminale oppure da Windows aprire una connessione remota (ssh), quindi usare il comando apropos per trovare il nome del possibile comando. Infine man nomecomando permette di avere tutte le informazioni sul comando).

  2.  
  3. In una finestra terminale usare comandi di linea per ridefinire cognome come directory di default ( comando:   cd cognome )

  4.  
  5. Creare mediante l' editor un file di testo di nome primo.c contenente il seguente programma C che legge un carattere in input dalla tastiera e lo mostra su schermo. Per chi  lavora in ambiente di linea  e  non ha gia' un editor "preferito" si suggerisce picocome strumento semplice ma estremamente facile da utilizzare (tutte le istruzioni per l' utilizzo sono recuperabili dalle due righe in basso nella finestra).
  6. #include  <stdio.h>
    int main()
    {
        char input;
        scanf("%c",&input);
        printf(" %c \n",input);
        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é ?

  10.  
  11. Cambiare il nome del file a.out in primo.x. (Scoprire come farlo  e'  parte dell' esercizio).

  12.  
  13. Eseguire il file primo.x digitandone il nome (eventualmente preceduto da ./  che e' 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. 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

  16. gcc -ansi -pedantic -o primo.x primo.c
     
  17. 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 (cfr. quanto detto a lezione).


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


  20.  
  21. Qual è il risultato delle seguenti espressioni ? Provare a fare delle previsioni e metterle per iscritto. Poi se ne dovra' controllare la correttezza scrivendo un programma C che le implementi e scriva i risultati.
    float a,b,c,d,e,f,g,h,i;
    int   p,q,r,s,u,w;
    a=2.0;
    b=1;
    c=3.9;
    p=2;
    q=3;
    d=a/b+c;
    e=b/c+a;
    f=p/q;
    g=p/q*q/p;
    r=a/c*c/a;
    u=(a/c)*(c/a);
    s=(p/q)*(q/p);
    w=c*(1/2);
    h= (a*c < p*q);
    i= h && ( q%p );
    
    

  22.  
  23. Il seguente frammento di codice dovrebbe calcolare la somma dei primi 10 interi ma contiene un errore di programmazione. Inserirlo in un programma C, compilarlo, eseguirlo e trovare l' errore. Modificare il programma in modo che calcoli e stampi la somma dei primi 15 quadrati di interi.
    int somma=0, i;
    for(i=0;i<=10;i++);
    somma += i;