G. Mecca – [email protected] – Università della Basilicata
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 - Programmazione Procedurale in Linguaggio C++ 2
Sommario
m
Introduzione
m
Istruzione if-then-else
m
Istruzione if-then
m
Istruzioni Condizionali Nidificate
m
Esercizio: Riconoscimento di Triangoli
Strutture di Controllo: Istruzioni Condizionali >> Sommario
G. Mecca - Programmazione Procedurale in Linguaggio C++ 3
Introduzione
m
Istruzione if-then-else
ðesecuzione di blocco di codice oppure di un altro a seconda che una condizione sia vera o falsa
m
Istruzione if-then
ðesecuzione di un blocco di codice se la condizione è vera
ðaltrimenti nessun effetto
Strutture di Controllo: Istruzioni Condizionali >> Introduzione
G. Mecca - Programmazione Procedurale in Linguaggio C++ 4
Istruzione if-then-else
m
Sintassi:
if (<condizione>)
<blocco1>
else
<blocco2>
m
Dove
ð<condizione> è una espressione con valore booleano
ð<blocco1> e <blocco2> blocchi di istruzioni
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
G. Mecca - Programmazione Procedurale in Linguaggio C++ 5
Istruzione if-then-else
m
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
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
G. Mecca - Programmazione Procedurale in Linguaggio C++ 6
Esempio n.1
int a;
cin >> a;
if ((a
%2) == 0) {
cout << “il numero e’ pari”;
} else {
cout << “il numero e’ dispari”;
}
cout << “Fine”;
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
istruzione precedente istruzione if-then-else
istruzione successiva
G. Mecca - Programmazione Procedurale in Linguaggio C++ 7
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”;
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else
G. Mecca - Programmazione Procedurale in Linguaggio C++ 8
Esempio n.3
1. float sommaVoti, numeroEsami, media;
2. cout << “Inserisci somma e num. es.” << endl;
3. cin >> sommaVoti;
4. cin >> numeroEsami;
5. if (numeroEsami>0) {
6. media = sommaVoti/numeroEsami;
7. cout << “Media: ” << media;
8. } else {
9. cout << “Errore”;
10. }
11. cout << “-Fine-”;
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else Caso a:
-Fine- Media: 24 72 3
Inserisci somma e num. es.
Flusso di esecuzione:
1-2-3-4-condizione-6-7-11 Caso b:
-Fine- Errore 100 -3
Inserisci somma e num. es.
Flusso di esecuzione:
1-2-3-4-condizione-9-11
G. Mecca - Programmazione Procedurale in Linguaggio C++ 9
Istruzione if-then
m
Sintassi
if (<condizione>)
<blocco>
m
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 (NON viene eseguita alcuna istruzione)
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then
G. Mecca - Programmazione Procedurale in Linguaggio C++ 10
Istruzione if-then
m
Esempio:
int a;
cout << “Immetti un numero positivo” << endl;
cin >> a;
if (a < 0 ) { a = abs(a);
}
cout << “Radice quadrata: “ << sqrt(a);
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then
se il valore di a è positivo non è necessario effettuare alcuna operazione
G. Mecca - Programmazione Procedurale in Linguaggio C++ 11
Istruzione Condizionali Nidificate
m
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
m
Analogo
ðè come se gli if interni facessero il “nido” in quelli esterni
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione
G. Mecca - Programmazione Procedurale in Linguaggio C++ 12
Istruzione Condizionali Nidificate
m
Semantica
ðdeve essere interpretata in modo 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
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione
G. Mecca - Programmazione Procedurale in Linguaggio C++ 13
Istruzione Condizionali Nidificate
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 e’ maggiore di a” << endl;
} else {
cout << “a e b sono uguali” << endl;
}
differenza = b - a;
}
cout << “Differenza: ” << differenza << endl;
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione
if esterno if interno
G. Mecca - Programmazione Procedurale in Linguaggio C++ 14
Istruzione Condizionali Nidificate
1. int a, b, differenza;
2. cin >> a;
3. cin >> b;
4. if (a > b) {
5. cout << “a maggiore di b” << endl;
6. differenza = a - b;
7. } else { 8. if (b > a) {
9. cout << “b maggiore di a”;
10. } else {
11. cout << “a e b sono uguali”;
12. }
13. differenza = b - a;
14. }
15. cout << “Differenza: ”
<< differenza;
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione Caso a:
Differenza: 3 7 4
Flusso di esecuzione:
1-2-3-cond(T)-5-6-15 Caso b:
Flusso di esecuzione:
1-2-3-cond(F)-7-cond(T)-9-13-15 Caso c:
Flusso di esecuzione:
1-2-3-cond(F)-7-cond(F)-10- 11-13-15
a maggiore di b
Differenza: 28 6 34
b maggiore di a
Differenza: 0 7 7
a e b sono uguali
G. Mecca - Programmazione Procedurale in Linguaggio C++ 15
Esercizio: Riconoscimento di Triangoli
m
Problema:
ðdate le lunghezze dei lati di un triangolo riconoscere e stampare di che tipo di triangolo si tratta (isoscele, equilatero o scaleno)
m
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)
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
G. Mecca - Programmazione Procedurale in Linguaggio C++ 16
Esercizio: Riconoscimento di Triangoli
m
Scelta dell’algoritmo
ðI passo: strategia di rappresentazione dei dati ðII passo: strategia di operazioni
m
Strategia di rappresentazione
ðlunghezze dei lati a,b,c: variabili float a,b,c
m
Strategia di operazioni
ðacquisisco le lunghezze dei lati
ðverifico se il tr. è equilatero; altrimenti verifico se il tr.
è isoscele; altrimenti il tr. è scaleno
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
>>> scrittura del programma
G. Mecca - Programmazione Procedurale in Linguaggio C++ 17
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;
} } }
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
G. Mecca - Programmazione Procedurale in Linguaggio C++ 18
Esercizio a Casa: Volo dello Shuttle
m
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
m
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
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
G. Mecca - Programmazione Procedurale in Linguaggio C++ 19
Esercizio a Casa: Volo dello Shuttle
m
Attenzione
ðper ora per semplicità trascuriamo il controllo degli errori
ðpossiamo supporre che l’utente digiti dati corretti
ðaltrimenti il programma si allungherebbe eccessivamente
m
Inoltre
ðevitare il controllo delle date
Strutture di Controllo: Istruzioni Condizionali >> Esercizio
G. Mecca - Programmazione Procedurale in Linguaggio C++ 20
Riassumendo
m
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
m
Nidificazione
Strutture di Controllo: Istruzioni Condizionali >> Sommario
G. Mecca - Programmazione Procedurale in Linguaggio C++ 21
Un Esempio: Media con For
#include <iostream.h>
void main() {
int voto, sommaVoti;
float media;
int numeroEsami, i;
cout << "Quanti esami hai sostenuto ?" << endl;
cin >> numeroEsami;
sommaVoti = 0;
for (i = 0; i < numeroEsami; i++) {
cout << "Immetti il voto di un esame" << endl;
cin >> voto;
sommaVoti += voto;
}
if (numeroEsami > 0) {
media = ((float)sommaVoti) / numeroEsami;
cout << "La media vale: " << media << endl;
} else
cout << "Non hai fornito nessun voto" << endl;
}
Strutture di Controllo >> Un Esempio
G. Mecca - Programmazione Procedurale in Linguaggio C++ 22
Un Esempio: Media con While
#include <iostream.h>
void main() {
int voto, sommaVoti, numeroEsami;
float media;
bool continua;
continua = true;
numeroEsami = 0;
sommaVoti = 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 = ((float)sommaVoti) / numeroEsami;
cout << "La media vale: " << media << endl;
} else {
cout << "Non hai fornito nessun voto" << endl;
} }
Strutture di Controllo >> Un Esempio
G. Mecca - Programmazione Procedurale in Linguaggio C++ 23
Ringraziamenti
m Parte del materiale di questa lezione è stato sviluppato con la collaborazione della Dott.ssa Maria Samela
([email protected]), a cui va il mio ringraziamento.
Ringraziamenti
G. Mecca - Programmazione Procedurale in Linguaggio C++ 24
Termini della Licenza
m This work is licensed under the Creative Commons Attribution- ShareAlike 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.
Termini della Licenza
m 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.