Tutorial 2
Scritto da Roberto Navigli ([email protected])
Game Programming Italia: www.gpi.eden.it
Un secondo programma C++: stampare un numero
Prendiamo in considerazione un secondo semplice esempio. Lo scopo è quello di memorizzare un
numero in memoria e quindi di stamparlo sullo schermo. Per fare questo è necessario utilizzare le
cosiddette variabili.
Una variabile è una locazione di memoria a cui viene associato un valore. Il valore della locazione
può essere modificato e letto quante volte si vuole.
Il programma seguente dichiara una variabile chiamata numero, le assegna un valore (pari al risultato
di una certa espressione aritmetica) e lo visualizza sullo schermo:
/* stampare un numero */
#include <iostream>
using namespace std;
void main()
{
int numero;
numero = 10+5*2;
// dichiara la variabile intera
// assegna alla variabile il valore 20
cout << “Il numero è: “;
cout << numero;
// stampa il valore della variabile
}
Una volta compilato ed eseguito il programma, l’output è:
Il numero è: 20
La maggior parte delle linee sono quelle del primo programma visto nel paragrafo precedente. Le
novità vengono all’interno del corpo della funzione main. La variabile numero è dichiarata mediante
l’istruzione:
int numero;
Come si può notare, davanti al nome della variabile è specificata la parola chiave int. Essa indica il
tipo della variabile, in questo caso intero.
La linea successiva assegna alla variabile il valore 10+5*2, pari cioè a 20 (il prodotto ha la precedenza
sulla somma):
numero = 10+5*2;
Infine la linea:
cout << numero;
// stampa il valore della variabile
stampa il valore della variabile numero sullo schermo.
Tipi di dato
I tipi di dato base principali forniti dal C++, o tipi predefiniti, sono i seguenti:
Tipo di dato
Booleani
Caratteri
Interi brevi
Interi lunghi
Virgola mobile
Virgola mobile doppia precisione
Parola chiave
bool
char
short
int, long
float
double
Il tipo void specifica assenza di tipi.
Per capire meglio come vengono rappresentati in memoria i tipi di dato è necessario avere la
nozione di bit, byte, word e doubleword:
Un bit è una cifra del sistema binario. Esso può assumere valore 0 o 1. Ad esempio, nel sistema
binario, i numeri sono rappresentati nel modo seguente:
Sistema decimale
0
1
2
3
4
5
Sistema binario
0
1
10
11
100
101
e così via. Una sequenza di otto bit prende il nome di byte. Utilizzando i byte, quindi, lo zero è
rappresentato con 8 bit zero: 00000000, l’uno come 00000001, il due come 00000010 e così via.
Poiché per ogni bit è possibile specificare solo 2 cifre (0 oppure 1), con un byte si possono
rappresentare 28=256 diversi numeri, quindi ad esempio gli interi compresi tra 0 e 255. Se si
vogliono anche gli interi negativi, è possibile rappresentare gli interi compresi tra -128 e 127. Da
questo si evince che le variabili di tipo char occupano un byte all’interno della memoria.
Un discorso analogo si può fare per gli short, che rappresentano generalmente le word, cioè
sequenze di due byte. Gli interi (e spesso anche i long) rappresentano sequenze di quattro byte
chiamate doubleword.
È bene notare che la dimensione delle locazioni di memoria associate a variabili che hanno certi tipi
non è fissa per tutte le architetture, ma può variare.
La funzione sizeof del C++ permette di avere la dimensione in byte dei vari tipi di dato. Vediamo un
esempio:
/* dimensione dei tipi di dato */
#include <iostream>
using namespace std;
void
{
cout
cout
cout
cout
cout
cout
cout
cout
}
main()
<<
<<
<<
<<
<<
<<
<<
<<
“Dimensione (in byte) dei tipi di dato:” << endl;
“bool: “ << sizeof(bool) << endl;
“char: “ << sizeof(char) << endl;
“short: “ << sizeof(short) << endl;
“int: “ << sizeof(int) << endl;
“long: “ << sizeof(long) << endl;
“float: “ << sizeof(float) << endl;
“double: “ << sizeof(double) << endl;
Come si può notare, l’operatore << viene utilizzato più di una volta sulla stessa linea. Questo è
possibile perché l’applicazione dell’operatore << all’oggetto cout restituisce l’oggetto stesso e quindi
consente un’ulteriore applicazione dell’operatore. Non è necessario capire a fondo questo
meccanismo, perché sono richiesti concetti che per il momento non è possibile esaminare.
In tutte le righe viene specificato endl come operando destro dell’operatore <<. Esso è un
manipolatore che manda a capo l’output su console.