MORENO SARDELLA · CORSO BASE
← Tutte le lezioni
Lezione 2

LE ISTRUZIONI

Un algoritmo è fatto di istruzioni. Ma non sono tutte uguali: alcune "fanno" qualcosa, altre decidono cosa fare. Vediamo come si classificano e come si scrivono in C++.

01
Mappa

Come si classificano

Le istruzioni si dividono in due grandi famiglie: quelle operative, che eseguono un'azione concreta, e quelle non operative (o di controllo), che governano il flusso del programma.

ISTRUZIONI OPERATIVE NON OPERATIVE (di controllo) dichiarazione assegnamento I/O selezione iterazione
La mappa delle istruzioni: operative (dichiarazione, assegnamento, I/O) e di controllo (selezione, iterazione).
02
Operative

Istruzione di dichiarazione

Avvisa il sistema operativo che useremo una variabile, indicandone il nome e il tipo. In pratica riserva uno spazio in memoria RAM dove conservare un valore.

memoria RAM numero 0x0000AAAA una cella con un nome e un indirizzo
Dichiarare int numero; riserva una cella in RAM identificata da un indirizzo.
dichiarazione.cpp
int numero;          // dichiarazione
int eta = 16;         // dichiarazione + assegnamento (inizializzazione)
float media;          // un numero reale
char iniziale;         // un singolo carattere
03
Operative

Istruzione di assegnamento

Assegna un valore a una variabile, con l'operatore =. Ogni variabile è infatti caratterizzata da tre cose: nome, tipo e valore.

assegnamento.cpp
numero = 16;            // nella cella "numero" finisce 16
somma = numero + 1;     // a destra si calcola, poi si assegna a sinistra

Caso classico: scambiare il contenuto di due variabili. Serve una variabile d'appoggio temp, altrimenti il primo valore andrebbe perso.

scambio.cpp
int a = 10, b = 20, temp;
temp = a;     // salvo a   -> temp = 10
a = b;        // copio b in a -> a = 20
b = temp;     // recupero -> b = 10
04
Operative

Istruzioni di input/output

L'input (cin) mette in pausa il programma e aspetta che l'utente digiti un valore da tastiera; quando preme Invio, quel valore viene assegnato alla variabile. L'output (cout) stampa a schermo il valore di una variabile, una stringa o una costante.

leggi (input) scrivi (output) cin >> x; cout << x;
L'I/O si disegna con il parallelogramma: a sinistra l'ingresso, a destra l'uscita.
io.cpp
int num;
cout << "Inserisci il valore di num: ";
cin >> num;                       // attende l'input dell'utente
cout << "La somma e' " << num + 1;
cout << 20;                       // stampa una costante
05
Di controllo

Istruzione di selezione

Verifica una condizione booleana e, in base al suo valore (vero o falso), esegue il ramo vero oppure il ramo falso. In C++ si scrive con if … else.

eta < 18 ? condizione "maggiorenne" "minorenne" F V
Selezione: il rombo è la condizione, i due rami sono le due strade possibili.
selezione.cpp
int eta;
cout << "Inserisci eta': ";
cin >> eta;
if (eta < 18) {
    cout << "Utente minorenne";
} else {
    cout << "Utente maggiorenne";
}

Spesso servono più condizioni. La differenza chiave è se le condizioni dipendono l'una dall'altra oppure no.

If annidati

condizioni dipendenti

La seconda condizione si controlla solo se la prima è vera: il secondo if sta dentro il ramo vero del primo. Tipico dei controlli "compreso tra due valori".

// 4 < x < 10 if (x > 4) { if (x < 10) { cout << "x e' tra 4 e 10"; } }

If in cascata

condizioni indipendenti

Due (o più) if separati, uno dopo l'altro: le condizioni non dipendono l'una dall'altra e vengono valutate entrambe.

// controlli indipendenti if (equilatero) { cout << "e' equilatero"; } if (latoAB == 10) { cout << "lato AB = 10 cm"; }
cond1 ? F V cond2 ? i due rami di cond1 si riuniscono, poi si valuta cond2 comunque
In cascata: i rami di cond1 si riuniscono e cond2 viene valutata indipendentemente, dopo.
Indentazione — rientrare il codice dentro le parentesi graffe non è obbligatorio per il compilatore, ma è fondamentale per la leggibilità: rende evidente "cosa sta dentro cosa".
06
Di controllo

Istruzione di iterazione

Ripete un blocco di istruzioni finché una condizione resta vera. In C++ i cicli principali sono while, do–while e for.

i <= 10 ? corpo del ciclo esci V F
Iterazione: si torna sempre alla condizione; quando diventa falsa si esce.
iterazione.cpp
// stampa i numeri da 1 a 10 con il while
int i = 1;
while (i <= 10) {
    cout << i << " ";
    i++;            // senza questo il ciclo sarebbe infinito!
}

// stesso risultato con il for
for (int i = 1; i <= 10; i++) {
    cout << i << " ";
}