Laboratorio di programmazione. AA 2005/06.
Esercitazione n. 5

Scopo di questa esercitazione è di familiarizzarsi con salti condizionati, espressioni, uso di funzioni matematiche e rappresentazioni degli interi.

Al solito, si suggerisce di creare una directory apposita per i files relativi a questa esercitazione.


     
  1. Trasformare il frammento di codice seguente in modo da sostituire gli if-else con un costrutto switch-case.  Inserire in un programma C e verificare.
    if ((x ==1) || (x==2))
    printf(" primo caso \n");
    else if ((x == 3) || (x == 4) || (x == 5))
    printf(" secondo caso \n");
    else if ((x == 6) || (x ==7))
    printf(" terzo caso \n");
    else if (x == 8)
    printf(" quarto caso \n");

  2. Implentare in un programma C il calcolo della radice quadrata di un numero p  mediante il seguente algoritmo:
    Verificare il corretto funzionamento del programma confrontando con il risultato della funzione  sqrt(p).
    L' inclusione della libreria matematica  (da effettuarsi con l' istruzione #include <math.h>   e compilando con "gcc -std=c99 -pedantic -lm  nomefile.c ") mette a disposizione la funzione fabs(x) che fornisce il valore assoluto dell' argomento (di tipo float o double ) x.
    Provare a calcolare la radice di 1012 e di 10-12.
    Cosa succede se si chiede di calcolare la radice di 2 e si aumenta la richiesta di precisione ?

  3. Scrivere un programma che permetta di passare da coordinate cartesiane a  coordinate polari e viceversa. Il programma dovrebbe chiedere quale delle due conversioni e' desiderata e poi richiedere i due valori di input. La selezione tra i due tipi di conversione dovrà essere realizzata mediante uso del costrutto switch-case. Le formule (in notazione simile a quella matematica  e  non secondo la sitassi C) sono

    x = r cos(phi)

    y = r sin(phi)

    e

    r = sqrt( x2 + y2 )

    phi = arc tg (y/x)

    L' inclusione della libreria matematica  (da effettuarsi con l' istruzione #include <math.h>   e compilando con "gcc -std=c99 -pedantic -lm  nomefile.c ") mette a disposizione, oltre alla radice quadrata anche le funzioni trigonometriche dirette e inverse (sin(x),cos(x), atan2(y,x)=arc tg (y/x)). Per maggiori informazioni su ciascuna function: man nome_function (es. man atan2 ).


  4. La seguente sezione di codice  opera su una variabile c di tipo  char  e,  se il carattere corrisponde ad una lettera dell' alfabeto minuscola, la trasforma nella corrispondente maiuscola, altrimenti  il carattere resta inalterato. Notare il modo con cui viene implementato sia il riconoscimento della condizione di avere un carattere nell' intervallo  delle minuscole, sia la trasformazione minuscola-maiuscola. Perché funziona?

    if( (c >= 'a') && (c <= 'z') )
    c = c + 'A' - 'a';


  5. L' operatore  sizeof  ritorna la dimensione in char di ciascun tipo dati. P. es   il seguente programma
    #include <stdio.h>

    int main(void){
    printf("%d \n",sizeof(int));
    return 0;
    }

    ci informa sulla lunghezza in char (ma su molti sistemi 1 char = 1 byte) del tipo dati int. Modificarlo in modo da ottenere la lunghezza in bytes di ciascun tipo dati  previsto dal linguaggio (v. tabella tipi dati).  Far scrivere anche la  lunghezza in byte delle seguenti costanti letterali :  12,   'f',  123L.


  6. Scrivere un programma che, partendo dal numero n (di tipo int)  231  - 3,   generi  6 numeri  incrementando n   una unità alla volta.  (Suggerimento:per l' elevazione a potenza il C non ha un operatore dedicato. Si può utilizzare la function della libreria matematica pow(x,y) che ritorna la potenza xy.

  7. Modificare il programma del punto precedente in modo da lavorare con una variabile di tipo  unsigned short, partendo dal valore 216-3. Modificare poi il convertitore di formato, della printf prima trasformandolo in %hd (usa solo i 16 bit dello short int) e poi nel corretto convertitore ( %hu ) che usa solo i 16 bit ma tiene presente l' interpretazione come unsigned e cercare di interpretare i risultati ottenuti.

  8. Scrivere un programma C che implementi il calcolo del fattoriale di un intero. Verificarne il funzionamento con numeri interi crescenti tra 1 e 20. Sono tutti corretti ?  Il fattoriale ( indicato con n! ) di n e' il prodotto di  tutti i numeri naturali da 1 a n   ( 4! = 1*2*3*4 ).
    Controllare da quale valore di n i risultati sono sbagliati.