Programmazione Procedurale in
Linguaggio C++
Strutture di Controllo
Parte 2
Istruzioni Condizionali
versione 2.0
Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons
(vedi ultima pagina)
G. Mecca – [email protected] – Università della Basilicata
Strutture di Controllo: Istruzioni Condizionali >> Sommario
Sommario
 Introduzione
 Istruzione
if-then-else
 Istruzione if-then
 Istruzioni Condizionali Nidificate
 Esercizio: Riconoscimento di Triangoli
G. Mecca - Programmazione Procedurale in Linguaggio C++
2
Strutture di Controllo: Istruzioni Condizionali >> Introduzione
Introduzione
 Istruzione
if-then-else
esecuzione di blocco di codice oppure di
un’altro a seconda che una condizione sia
vera o falsa
 Istruzione
if-then
esecuzione di un blocco di codice se la
condizione è vera
altrimenti nessun effetto
G. Mecca - Programmazione Procedurale in Linguaggio C++
3
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
Istruzione if-then-else
 Sintassi:
if (<condizione>)
<blocco1>
else
<blocco2>
 Dove
<condizione> è una espressione con valore
booleano
<blocco1> e <blocco2> blocchi di istruzioni
G. Mecca - Programmazione Procedurale in Linguaggio C++
4
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
Istruzione if-then-else
 Semantica
viene valutato il valore della <condizione>
se il valore dell’espressione è true si esegue
<blocco1>
se il valore dell’espressione è false si esegue
<blocco2>
in entrambi i casi l’esecuzione procede con
l’istruzione immediatamente successiva
G. Mecca - Programmazione Procedurale in Linguaggio C++
5
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
Esempio n.1
int a;
istruzione precedente
istruzione if-then-else
istruzione successiva
cin >> a;
if ((a % 2) == 0) {
cout << “il numero e’ pari”;
} else {
cout << “il numero e’ dispari”;
}
cout << “Fine”;
G. Mecca - Programmazione Procedurale in Linguaggio C++
6
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
Esempio n.2
int a, b;
cin >> a;
cin >> b;
if (a > b) {
cout << “a maggiore di b ”;
cout << “Valore di a:” << a;
} else {
cout << “a non e’ maggiore di b ”;
cout << “Valore di b:” << b;
}
cout << “Fine”;
G. Mecca - Programmazione Procedurale in Linguaggio C++
7
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
Esempio n.3
Caso a:
Inserisci somma e num. es.
72 3
float sommaVoti, numeroEsami, Media: 24
media;
-Fine2. cout << “Inserisci somma e
Flusso di esecuzione:
num. es.” << endl;
1-2-3-4-condizione-6-7-11
3. cin >> sommaVoti;
Caso b:
4. cin >> numeroEsami;
Inserisci somma e num. es.
5. if (numeroEsami>0) {
100 -3
6.
media = sommaVoti/numeroEsami;
7.
cout << “Media: ” << media; Errore
8. } else {
-Fine9.
cout << “Errore”;
Flusso di esecuzione:
10. }
1-2-3-4-condizione-9-11
11. cout << “-Fine-”;
1.
G. Mecca - Programmazione Procedurale in Linguaggio C++
8
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then
Istruzione if-then
 Sintassi
if (<condizione>)
<blocco>
 Semantica
viene valutata la condizione
se la condizione è vera viene eseguito il
blocco e poi si prosegue con l’istr. successiva
se la condizione è falsa si prosegue
direttamente con l’istruzione successiva
G. Mecca - Programmazione Procedurale in Linguaggio C++
9
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then
Istruzione if-then
 Esempio:
int a;
cout << “Immetti un numero positivo” << endl;
cin >> a;
se il valore di a è positivo
if (a < 0 ) {
non è necessario effettuare
a = abs(a);
alcuna operazione
}
cout << “Radice quadrata: “ << sqrt(a);
G. Mecca - Programmazione Procedurale in Linguaggio C++
10
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione
Istruzione Condizionali Nidificate
 Nidificazione
le istruzioni che seguono l’if e/o l’else
possono essere istruzioni qualsiasi
in particolare, possono essere a loro volta
istruzioni condizionali
il processo può essere ripetuto a molti livelli
 Analogo
è come se gli if interni facessero il “nido” in
quelli esterni
G. Mecca - Programmazione Procedurale in Linguaggio C++
11
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione
Istruzione Condizionali Nidificate
 Come
deve essere interpretata la
semantica ?
in modo del tutto ordinario
ciascuna istruzione condizionale viene
eseguita secondo la sua semantica
bisogna solo fare attenzione al modo in cui
vengono valutate le condizioni ed alla
sequenza delle scelte
G. Mecca - Programmazione Procedurale in Linguaggio C++
12
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione
Istruzione Condizionali Nidificate
int a, b, differenza;
if esterno
if interno
cin >> a;
cin >> b;
if (a > b) {
cout << “a maggiore di b” << endl;
differenza = a - b;
} else {
if (b > a) {
cout << “b e’ maggiore di a” << endl;
} else {
cout << “a e b sono uguali” << endl;
}
differenza = b - a;
}
cout << “Differenza: ” << differenza << endl;
G. Mecca - Programmazione Procedurale in Linguaggio C++
13
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione
Caso a:
Istruzione Condizionali Nidificate
74
a maggiore di b
Differenza: 3
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
int a, b, differenza;
cin >> a;
cin >> b;
if (a > b) {
cout << “a maggiore di b” << endl;
differenza = a - b;
} else {
if (b > a) {
cout << “b maggiore di a”;
} else {
cout << “a e b sono uguali”;
}
differenza = b - a;
}
cout << “Differenza: ”
<< differenza;
G. Mecca - Programmazione Procedurale in Linguaggio C++
Flusso di esecuzione:
1-2-3-cond(T)-5-6-15
Caso b:
6 34
b maggiore di a
Differenza: 28
Flusso di esecuzione:
1-2-3-cond(F)-7-cond(T)-9-13-15
Caso c:
77
a e b sono uguali
Differenza: 0
Flusso di esecuzione:
1-2-3-cond(F)-7-cond(F)-1011-13-15
14
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
Esercizio: Riconoscimento di Triangoli

Problema:
date le lunghezze dei lati di un triangolo riconoscere
e stampare di che tipo di triangolo si tratta (isoscele,
equilatero o scaleno)

Analisi delle Specifiche:
dati in ingresso: le lunghezze a, b, c dei lati
dati in uscita: uno dei seguenti messaggi
“Triangolo equilatero”
“Triangolo isoscele”
“Triangolo scaleno”
in generale bisogna anche eliminare le ambiguità
(es: condizioni di errore)
G. Mecca - Programmazione Procedurale in Linguaggio C++
15
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
Esercizio: Riconoscimento di Triangoli

Scelta dell’algoritmo
I passo: strategia di rappresentazione dei dati
II passo: strategia di operazioni

Strategia di rappresentazione
lunghezze dei lati a,b,c: variabili float a,b,c

Strategia di operazioni
acquisisco le lunghezze dei lati
verifico se il tr. è equilatero; altrimenti verifico se il tr.
è isoscele; altrimenti il tr. è scaleno
>>> scrittura del programma
G. Mecca - Programmazione Procedurale in Linguaggio C++
16
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
Esercizio: Riconoscimento di Triangoli
#include <iostream.h>
void main(){
float a,b,c;
cout << "Immetti i tre lati " << endl;
cin >> a;
cin >> b;
cin >> c;
if ((a==b) && (b==c)) {
cout << "il triangolo e' equilatero" << endl;
} else {
if((a==b) || (a==c) || (b==c)) {
cout << "il triangolo e' isoscele" << endl;
} else {
cout << "il triangolo e' scaleno" << endl;
}
}
}
G. Mecca - Programmazione Procedurale in Linguaggio C++
17
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
Esercizio a Casa: Volo dello Shuttle

Problema:
uno shuttle decolla alle ore X, minuti Y, secondi Z del
giorno 1 gennaio 2002
lo shuttle sta in volo X1 ore, Y1 minuti, Z1 secondi
(per un totale di meno di 24 ore) e poi atterra
dato l’orario di decollo X:Y:Z, e il tempo di volo
X1:Y1:Z1, calcolare la data e l’ora di atterraggio

Esempio
decollo alle ore 18:40:10 del 1 gennaio 2002
tempo di volo pari a 20:40:15
atterraggio il 2 gennaio 2002 alle ore 15:20:25
G. Mecca - Programmazione Procedurale in Linguaggio C++
18
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
Esercizio a Casa: Volo dello Shuttle
 Attenzione
per ora per semplicità trascuriamo il controllo
degli errori
possiamo supporre che l’utente digiti dati
corretti
altrimenti il programma si allungherebbe
eccessivamente
 Inoltre
evitare il controllo delle date
G. Mecca - Programmazione Procedurale in Linguaggio C++
19
Strutture di Controllo: Istruzioni Condizionali >> Sommario
Riassumendo
 Istruzioni
Condizionali
servono a controllare l’esecuzione dei
blocchi del programma sulla base di
condizioni
condizione: espressione vera o falsa
due forme: if-then-else, if-then
 Nidificazione
attenzione ai riferimenti
G. Mecca - Programmazione Procedurale in Linguaggio C++
20
Strutture di Controllo >> Un Esempio
Un Esempio: Media con For
#include <iostream.h>
void main() {
float voto, sommaVoti, media;
int numeroEsami, i;
cout << "Quanti esami hai sostenuto ?" <<
cin >> numeroEsami;
sommaVoti = 0.0;
for (i=0; i<numeroEsami; i++) {
cout << "Immetti il voto di un esame"
cin >> voto;
sommaVoti += voto;
}
if (numeroEsami > 0) {
media = sommaVoti/numeroEsami;
cout << "La media vale: " << media <<
} else {
cout << "Non hai fornito nessun voto"
}
}
G. Mecca - Programmazione Procedurale in Linguaggio C++
endl;
<< endl;
endl;
<< endl;
21
Strutture di Controllo >> Un Esempio
Un Esempio: Media con While
#include <iostream.h>
void main() {
float voto, sommaVoti, media;
int numeroEsami;
bool continua;
continua = true;
numeroEsami = 0;
sommaVoti = 0.0;
while (continua == true) {
cout << "Immetti il voto (0 per fermarti)" << endl;
cin >> voto;
if (voto == 0) {
continua = false;
} else { numeroEsami++; sommaVoti += voto; }
}
if (numeroEsami > 0) {
media = sommaVoti/numeroEsami;
cout << "La media vale: " << media << endl;
} else {
cout << "Non hai fornito nessun voto" << endl;
}
}
G. Mecca - Programmazione Procedurale in Linguaggio C++
22
Ringraziamenti
Ringraziamenti

Parte del materiale di questa lezione è stato sviluppato con la
collaborazione della Dott.ssa Maria Samela
([email protected]), a cui va il mio ringraziamento.
G. Mecca - Programmazione Procedurale in Linguaggio C++
23
Termini della Licenza
Termini della Licenza

This work is licensed under the Creative Commons AttributionShareAlike License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to
Creative Commons, 559 Nathan Abbott Way, Stanford, California
94305, USA.

Questo lavoro viene concesso in uso secondo i termini della
licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere
una copia della licenza, è possibile visitare
http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una
lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way,
Stanford, California 94305, USA.
G. Mecca - Programmazione Procedurale in Linguaggio C++
24
Scarica

Programmazione Procedurale in Linguaggio C++