Programmazione Procedurale in Linguaggio C Strutture di Controllo

  • Slides: 24
Download presentation
Programmazione Procedurale in Linguaggio C++ Strutture di Controllo Parte 2 Istruzioni Condizionali versione 2.

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 – mecca@unibas. it – Università della Basilicata

Strutture di Controllo: Istruzioni Condizionali >> Sommario m Introduzione m Istruzione if-then-else m Istruzione

Strutture di Controllo: Istruzioni Condizionali >> Sommario m Introduzione m Istruzione if-then-else m Istruzione if-then m Istruzioni Condizionali Nidificate m Esercizio: Riconoscimento di Triangoli G. Mecca - Programmazione Procedurale in Linguaggio C++ 2

Strutture di Controllo: Istruzioni Condizionali >> Introduzione m Istruzione if-then-else ðesecuzione di blocco di

Strutture di Controllo: Istruzioni Condizionali >> 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 G. Mecca - Programmazione Procedurale in Linguaggio C++ 3

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else m Sintassi: if (<condizione>) <blocco 1>

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else m Sintassi: if (<condizione>) <blocco 1> else <blocco 2> m Dove ð<condizione> è una espressione con valore booleano ð<blocco 1> e <blocco 2> blocchi di istruzioni G. Mecca - Programmazione Procedurale in Linguaggio C++ 4

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else m Semantica ðviene valutato il valore

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else m Semantica ðviene valutato il valore della <condizione> ðse il valore dell’espressione è true si esegue <blocco 1> ðse il valore dell’espressione è false si esegue <blocco 2> ð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

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;

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

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else Esempio n. 3 Caso a: Inserisci somma e num. es. 72 3 1. float somma. Voti, numero. Esami, Media: 24 media; -Fine 2. cout << “Inserisci somma e Flusso di esecuzione: num. es. ” << endl; 1 -2 -3 -4 -condizione-6 -7 -11 3. cin >> somma. Voti; Caso b: 4. cin >> numero. Esami; Inserisci somma e num. es. 5. if (numero. Esami>0) { 100 -3 6. media = somma. Voti/numero. Esami; 7. cout << “Media: ” << media; Errore 8. } else { -Fine 9. cout << “Errore”; Flusso di esecuzione: 10. } 1 -2 -3 -4 -condizione-9 -11 11. cout << “-Fine-”; G. Mecca - Programmazione Procedurale in Linguaggio C++ 8

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then m Sintassi if (<condizione>) <blocco> m

Strutture di Controllo: Istruzioni Condizionali >> 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 G. Mecca - Programmazione Procedurale in Linguaggio C++ 9

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then m Esempio: int a; cout <<

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then m 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 m Nidificazione ðle istruzioni

Strutture di Controllo: Istruzioni Condizionali >> Nidificazione 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 G. Mecca - Programmazione Procedurale in Linguaggio C++ 11

Strutture di Controllo: Istruzioni Condizionali >> Nidificazione Istruzione Condizionali Nidificate m Come deve essere

Strutture di Controllo: Istruzioni Condizionali >> Nidificazione Istruzione Condizionali Nidificate m 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;

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

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 >> 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: Riconoscimento di Triangoli m Problema: ðdate le

Strutture di Controllo: Istruzioni Condizionali >> 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) G. Mecca - Programmazione Procedurale in Linguaggio C++ 15

Strutture di Controllo: Istruzioni Condizionali >> Esercizio: Riconoscimento di Triangoli m Scelta dell’algoritmo ðI

Strutture di Controllo: Istruzioni Condizionali >> 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 >>> scrittura del programma G. Mecca - Programmazione Procedurale in Linguaggio C++ 16

Strutture di Controllo: Istruzioni Condizionali >> Esercizio: Riconoscimento di Triangoli #include <iostream. h> void

Strutture di Controllo: Istruzioni Condizionali >> 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 a Casa: Volo dello Shuttle m Problema:

Strutture di Controllo: Istruzioni Condizionali >> 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 X 1 ore, Y 1 minuti, Z 1 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 X 1: Y 1: Z 1, 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 G. Mecca - Programmazione Procedurale in Linguaggio C++ 18

Strutture di Controllo: Istruzioni Condizionali >> Esercizio a Casa: Volo dello Shuttle m Attenzione

Strutture di Controllo: Istruzioni Condizionali >> 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 G. Mecca - Programmazione Procedurale in Linguaggio C++ 19

Strutture di Controllo: Istruzioni Condizionali >> Sommario Riassumendo m Istruzioni Condizionali ðservono a controllare

Strutture di Controllo: Istruzioni Condizionali >> Sommario 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 ðattenzione ai riferimenti G. Mecca - Programmazione Procedurale in Linguaggio C++ 20

Strutture di Controllo >> Un Esempio: Media con For #include <iostream. h> void main()

Strutture di Controllo >> Un Esempio: Media con For #include <iostream. h> void main() { float voto, somma. Voti, media; int numero. Esami, i; cout << "Quanti esami hai sostenuto ? " << cin >> numero. Esami; somma. Voti = 0. 0; for (i=0; i<numero. Esami; i++) { cout << "Immetti il voto di un esame" cin >> voto; somma. Voti += voto; } if (numero. Esami > 0) { media = somma. Voti/numero. Esami; cout << "La media vale: " << media << } else { cout << "Non hai fornito nessun voto" } } G. Mecca - Programmazione Procedurale in Linguaggio C++ endl; << endl; 21

Strutture di Controllo >> Un Esempio: Media con While #include <iostream. h> void main()

Strutture di Controllo >> Un Esempio: Media con While #include <iostream. h> void main() { float voto, somma. Voti, media; int numero. Esami; bool continua; continua = true; numero. Esami = 0; somma. Voti = 0. 0; while (continua == true) { cout << "Immetti il voto (0 per fermarti)" << endl; cin >> voto; if (voto == 0) { continua = false; } else { numero. Esami++; somma. Voti += voto; } } if (numero. Esami > 0) { media = somma. Voti/numero. Esami; cout << "La media vale: " << media << endl; } else { cout << "Non hai fornito nessun voto" << endl; } } G. Mecca - Programmazione Procedurale in Linguaggio C++ 22

Ringraziamenti m Parte del materiale di questa lezione è stato sviluppato con la collaborazione

Ringraziamenti m Parte del materiale di questa lezione è stato sviluppato con la collaborazione della Dott. ssa Maria Samela (mariasamela@tiscali. it), a cui va il mio ringraziamento. G. Mecca - Programmazione Procedurale in Linguaggio C++ 23

Termini della Licenza m This work is licensed under the Creative Commons Attribution. Share.

Termini della Licenza m This work is licensed under the Creative Commons Attribution. Share. Alike 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. m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-Share. Alike” 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