Lo scopo di questa esercitazione e' di prendere dimestichezza con le operazione aritmetiche sulle variabili di tipo INT e FLOAT.

Scrivere il codice sorgente

Cominciamo scrivendo il codice di un semplice programma che converte temperature in gradi Fahrenheir in temperature in gradi Celsius, usando la formula C = (5/9)* (F - 32).


  1. Spostarsi nella directory di lavoro (attenzione alle maiuscole/minuscole):
  2. > cd LabProg

  3. Invocare l'editor per il nostro programma di conversione
  4. > emacs FahrCelsius.c &

  5. Digitare il seguente testo all'interno della finestra dell'editor:
/* Programma per la conversione di temperatura
 da gradi Fahrenheit a gradi Celsius*/

#include <stdio.h>
 
main () {
 
  // dichiarazioni
  int fahr, celsius;
  int min, max, passo;
 
  // inizializzazione
  min = 0; //minimo valore di temperatura
  max = 100;//massimo valore di temperatura
  passo =  10;//passo dei valori stampati

  // stampa tabella
  for (fahr=min; fahr <= max; fahr += passo ){
    celsius = 5 * (fahr - 32) / 9;
    printf("%d\t%d\n",fahr,celsius);
    }

}


La prima riga è un commento (racchiuso fra /* e */)

La seconda riga è una direttiva al preprocessore, che dice di includere la libreria stdio.h.

Nella prima parte del corpo del programma principale, dichiariamo le variabili che utilizzeremo nel programma, che sono tutte di tipo intero. Abbiamo due variabili che contengono i valori di temperatura nelle due unita' di misura (fahr e celsius), e le variabili necessarie per stampare la tabella (valore minimo e massimo di temperatura stampato, e passo dei valori stampati).

Nota Bene:
In C e' necessario che le variabili siano dichiarate prima del loro primo utilizzo. Dunque, potremmo aver messo la dichiarazione della variabile celsius, per esempio, all'interno del ciclo for. Tuttavia, e' buona norma raggruppare tutte le definizioni di variabili all'inizio del programma. Questa pratica ha, fra l'altro, il vantaggio di migliorare la leggibilita' del codice.


Dopo la dichiarazione delle variabili, c'e' la parte di inizializzazione, in cui vengono impostati i valori delle variabili min, max e passo.

Nota Bene:
In C e' possibile inizializzare una variabile constestualmente alla sua dichiarazione. Ad esempio, potremmo scrivere

int min = 0;

per dichiarare una variabile min di tipo intero ed inizializzarla a 0. Tuttavia, come nel caso precedente, per migliorare la leggibilita' del codice e' preferibile mantenere separate le operazioni di dichiarazione e di inizializzazione della variabile.

Nell'ultima parte del programma procediamo alla stampa della tabella. Per stampare la tabella utilizziamo il costrutto for, che ha tre argomenti: l'inizializzazione della variabile di controllo del ciclo (fahr = min), la condizione che determina o meno l'esecuzione del corpo del for (fahr <= max), e il passo da utilizzare per incrementare la variabile di controllo (fahr += passo).

Il corpo del for e' composto da due istruzioni. La prima calcola la temperatura in gradi Celsius. La seconda e' il comando di stampa, che prende in ingresso tre argomenti: una stringa, e le due variabili
fahr e celsius. Nella stringa compaiono due sequenze di escape che cominciano con il simbolo %. Questo simbolo indica che nella posizione corrispondente deve essere stampato il valore della variabile, che compare come ulteriore argomento di printf. Il carattere che segue % indica il tipo della variabile che deve essere stampata:

%d        la variabile e' di tipo intero decimale
%f       la variabile e' di tipo float
%o        la variabile e' di tipo intero ottale
%x       la variabile e' di tipo intero esadecimale
%6d      la variabile e' di tipo intero, ed occupa uno spazio di 6 caratteri
%6.1f  la variabile e' di tipo float, ed occupa sei caratteri per la parte intera, ed un carattere per la parte decimale


Compilare il codice sorgente

Possiamo usare l'opzione -o per ridenominare l'eseguibile.

> gcc -oTemperature FahrCelsius.c


Eseguire il programma

Adesso possiamo invocare l'eseguibile come se fosse un comando ordinario.

Spesso però il sistema non si rende automaticamente conto che il nuovo comando è disponibile e quindi dobbiamo indicare precisamente che l'eseguibile è un file della directory di lavoro.

> ./Temperature


Osservazioni

1. La divisione che viene effettuata nel programma e' la divisione intera. Per questo motivo, l'ordine con cui si effettuano le operazioni e' fondamentale.

Esercizio: provare a vedere cosa succede se l'istruzione per il calcolo della temperatura viene modificata come segue:

celsius = 5 / 9 *(fahr - 32);


2. Le tabella che stampata non e' ben allineata.

Esercizio: provare ad allineare meglio la tabella utilizzando l'opzione che specifica la larghezza del numero stampato nella sequenza %d .


Esercitazioni non guidate

Risolvere il seguente esercizio e spedire il solo file sorgente (suffisso .c) all'indirizzo paolo.santi@iit.cnr.it come all'interno di un messaggio di posta elettronica con subject: Esercitazione Lezione3-2.

  1. Il programma FahrCelsius calcola la conversione fra unita' di misura in maniera molto approssimata, dato che opera su interi. Scrivere un programma che faccia le cose seguenti:
          a. chiede all'utente se desidera effettuare la conversione da gradi Fahrenheit a gradi Celsius, o la conversione inversa;
        b. prende in ingresso il valore da convertire, e stampa il valore corrispondente nell'altra unita' di misura;
c. dopo aver stampato queste informazioni, stampa la tabella di conversione da 0 a 100 gradi F, con passo di 20, ed i corrispondenti valori in gradi C, approssimati alla  seconda cifra decimale ed opportunamente allineati.


Torna alla HomePage del corso