Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
11 - Variabili
Abbiamo già accennato al concetto di variabile nella parte introduttiva del corso, dove lo
abbiamo de nito come dato di supporto.
Questo suggerisce che una variabile non sia né un dato di ingresso al nostro programma, né un
risultato atteso; è piuttosto una rappresentazione dello stato interno dell'algoritmo ad un dato
istante.
E' facile osservare come le variabili siano di un'utilità estrema. Pensiamo ad esempio alla
possibilità di inserire un contatore all'interno del nostro programma, che conti (ad esempio) il
numero di operazioni eseguite, oppure ad una variabile di supporto, che ci permetta di
modellare dei valori intermedi durante l'esecuzione di calcoli complessi.
La variabile, come indica il nome stesso, può variare durante l'esecuzione del programma. Ne
esiste quindi una "controparte", assimilabile però dal punto di vista concettuale, chiamata
costante: questa, ovviamente, non varia durante l'esecuzione del programma, ed è utilizzata per
caratterizzare (ad esempio) delle costanti matematiche come il π.
Dichiarazione ed inizializzazione
La procedura per poter utilizzare una variabile si articola in due step fondamentali.
Per esempio, ecco come è possibile dichiarare una variabile chiamata numero che rappresenta
un numero intero in linguaggio C:
int numero;
Una volta dichiarata la variabile, è necessario associarle un valore. Per farlo, si usa la procedura
di inizializzazione, sfruttando l'operatore di assegnamento = . Ad esempio, assegnamo alla
https://anhelus.github.io/informatica-dm-uniba/04_programmazione/03_variabili/ 1/4
16/11/2020 11 - Variabili - Informatica - Corso di Laurea in Matematica - UniBa
numero = 1;
int altro_numero = 2;
La prima è legata alla gestione del usso logico del programma. Immaginiamo, infatti, di dover
sommare due numeri reali x ed y , e di voler associare il valore risultante da questa
operazione alla variabile z , che però è di tipo intero:
float x = 1.1;
float y = 1.2;
int z;
z = x + y;
E' facile comprendere come, nonostante il valore atteso di z sia pari a 2.3 , avremo in realtà
2 a causa del fatto che z è un valore intero, con un errore di troncamento pari a 0.3 . Questo,
ovviamente, nel caso in cui il programma venga comunque compilato: infatti, se il linguaggio
impone un controllo stringente sul tipo di dato, è probabile che la procedura di compilazione
non vada a buon ne.
E' importante stare attenti a situazioni nelle quali si sommano degli interi a dei caratteri.
Ricordiamo infatti che ogni carattere ha una rappresentazione numerica associata in un
determinato formato; quindi, in un linguaggio "particolarmente" permissivo, potrebbe essere
concesso sommare un intero ad un char , ottenendo però risultati inaspettati.
https://anhelus.github.io/informatica-dm-uniba/04_programmazione/03_variabili/ 2/4
16/11/2020 11 - Variabili - Informatica - Corso di Laurea in Matematica - UniBa
int x = 1;
char y = '1';
int z = x + y;
Il tipo di dato ha forti implicazioni sulla quantità di memoria utilizzata da ogni variabile, e quindi
sul numero di valori che è possibile rappresentare. La seguente tabella riporta queste
associazioni per alcuni tipi di dato comunemente utilizzati.
E' quindi importante scegliere il tipo di dato adatto alla speci ca situazione. Se siamo sicuri, ad
esempio, che tratteremo solo interi inferiori al 100, potremmo scegliere un formato di tipo
short per risparmiare quanta più memoria possibile.
Cosa accadrebbe però se "infrangessimo" il limite massimo di valori degli short, ovvero 216?
https://anhelus.github.io/informatica-dm-uniba/04_programmazione/03_variabili/ 3/4
16/11/2020 11 - Variabili - Informatica - Corso di Laurea in Matematica - UniBa
In questo caso, ovviamente, il tipo di dato (e quindi il quantitativo di memoria riservato per la
variabile) non cambierebbe; ciò signi ca che avremmo un errore di troncamento legato al fatto
che ogni valore superiore a 216 (per la cronaca, 65.536) sarebbe approssimato (o meglio,
troncato) proprio a quest'ultimo.
E' importante porre particolare attenzione alla tipizzazione offerta dal linguaggio in uso. In un
linguaggio a tipizzazione forte, come il C, è sempre necessario speci care il tipo della variabile,
ed è opportuno tenerne strettamente conto durante l'intero arco di esecuzione del programma. I
linguaggi a tipizzazione debole, invece, come il Python, sono più permissivi da questo punto di
vista. Tuttavia, laddove scrivere un programma in un linguaggio a tipizzazione debole può
essere più semplice, è comunque facile ritrovarsi in situazioni inattese, in quanto al
programmatore non verranno date indicazioni a priori sulla correttezza del usso di esecuzione
del programma.
https://anhelus.github.io/informatica-dm-uniba/04_programmazione/03_variabili/ 4/4