Programmazione Procedurale in Linguaggio C++ Strutture di Controllo Parte 2 Istruzioni Condizionali G. Mecca M. Samela Università della Basilicata Istruzioni Condizionali >> Sommario Sommario Introduzione Istruzione if-then- Istruzione if-then Istruzioni Condizionali Nidificate Esercizio: Riconoscimento di Triangoli 2
Istruzioni Condizionali >> Introduzione Introduzione Istruzione if-then- 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 3 Istruzioni Condizionali >> Istruzione if-then- Istruzione if-then- Sintassi: if (<condizione>) <blocco1> <blocco2> <condizione> è una espressione con valore booleano <blocco1> e <blocco2> sono istruzioni singole oppure blocchi di istruzioni tra { 4
Istruzioni Condizionali >> Istruzione if-then- Istruzione if-then- 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 5 Istruzioni Condizionali >> Istruzione if-then- Esempio n.1 int a; cin >> a; if ((a % 2) == 0) cout << il numero e pari ; cout << il numero e dispari ; cout << Fine ; istruzione precedente istruzione if-then- istruzione successiva 6
Istruzioni Condizionali >> Istruzione if-then- Esempio n.2 int a, b; cin >> a; cin >> b if (a > b) { cout << a maggiore di b ; cout << Valore di a: << a; { cout << a non è maggiore di b ; cout << Valore di b: << b; cout << Fine ; 7 Istruzioni Condizionali >> Istruzione if-then- 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. 9. cout << Errore ; 10. cout << -Fine- ; Caso a: Inserisci somma e num. es. 72 3 Media: 24 Flusso di esecuzione: 1-2-3-4-condizione-6-7-10 Caso b: Inserisci somma e num. es. 100-3 Errore -Fine- -Fine- Flusso di esecuzione: 1-2-3-4-condizione-9-10 8
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 9 Istruzioni Condizionali >> Istruzione if-then Istruzione if-then Esempio: int a; cout << Immetti un numero positivo << endl; cin >> a; if (a < 0 ) a = abs(a); cout << Radice quadrata: << sqrt(a); se il valore di a è positivo non è necessario effettuare alcuna operazione 10
Istruzioni Condizionali >> Istruzioni Condizionali Nidificate Istruzione Condizionali Nidificate Nidificazione le istruzioni che seguono l if e/o l 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 11 Istruzioni Condizionali >> Istruzioni Condizionali Nidificate 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; { if (b > a) cout << b e maggiore di a << endl; cout << a e b sono uguali << endl; differenza = b-a;; cout << Fine ; 12
Istruzioni Condizionali >> Istruzioni Condizionali Nidificate Istruzione Condizionali Nidificate Semantica la semantica è quella ordinaria Problema è possibile mischiare if-then- ed if-then tra tanti if ed, come si stabiliscono le associazioni (a quale if si rif. un )? Regola ogni si riferisce al più vicino tra gli if precedenti privi di 13 Istruzioni Condizionali >> Istruzioni Condizionali Nidificate Istruzione Condizionali Nidificate Esempio if (a > 0) if (a==1) b = 1; b = 2; Due possibili interpretazioni if (a > 0) { if (a > 0) { if (a==1) if (a==1) b = 1; b = 1; b = 2; b = 2; Supponiamo #1499 a -1 I caso: b vale 100 all inizio: #2500 b 100 II caso: b vale 2 14
Istruzioni Condizionali >> Istruzioni Condizionali Nidificate Istruzione Condizionali Nidificate Esempio if (a > 0) if (a==1) b = 1; b = 2; Semantica corretta if (a > 0) { if (a==1) b =1; b=2; if esterno (le parentesi graffe sono ridondanti) if interno (l viene assoc. all if più vicino) se a vale -1 e b vale 100: se a vale 5 e b vale 100: b vale 100 b vale 2 15 Istruzioni Condizionali >> Istruzioni Condizionali Nidificate Istruzione Condizionali Nidificate Per forzate l interpretazione alternativa utilizzare le parentesi graffe (anche se non indispensabili) per forzare l associazione Semantica alternativa if (a > 0) { if (a==1) b =1; b=2; if interno if esterno se a vale -1 e b vale 100: se a vale 5 e b vale 100: b vale 2 b vale 100 16
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 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 17 Istruzioni Condizionali >> Esercizio Esercizio: Riconoscimento di Triangoli Scelta dell algoritmo I passo: rappresentazione dei dati del problema attraverso i dati del programma lunghezze dei lati a,b,c: variabili float a,b,c II passo: strategia Strategia acquisisco le lunghezze dei lati verifico se il tr. è equilatero; altrimenti verifico se il tr. è isoscele; altrimenti il tr. è scaleno >>> 18
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; if((a==b) (a==c) (b==c)) cout << "il triangolo e' isoscele" << endl; cout << "il triangolo e' scaleno" << endl; 19 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 20
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-, if-then Nidificazione attenzione ai riferimenti 21 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?" << endl; cin >> numeroesami; sommavoti = 0.0; for (i=0; i<numeroesami; i++) { cout << "Immetti il voto di un esame" << endl; cin >> voto; sommavoti += voto; if (numeroesami > 0) { media = sommavoti/numeroesami; cout << "La media vale: " << media << endl; cout << "Non hai fornito nessun voto" << endl; 22
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; { numeroesami++; sommavoti += voto; if (numeroesami > 0) { media = sommavoti/numeroesami; cout << "La media vale: " << media << endl; cout << "Non hai fornito nessun voto" << endl; 23