240 likes | 369 Views
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). Strutture di Controllo: Istruzioni Condizionali >> Sommario.
E N D
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 Sommario • Introduzione • Istruzione if-then-else • Istruzione if-then • Istruzioni Condizionali Nidificate • Esercizio: Riconoscimento di Triangoli G. Mecca - Programmazione Procedurale in Linguaggio C++
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++
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++
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++
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else Esempio n.1 istruzione precedente istruzione if-then-else istruzione successiva int a; 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++
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++
Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then-else Caso a: Esempio n.3 Inserisci somma e num. es. 72 3 Media: 24 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-”; -Fine- Flusso di esecuzione: 1-2-3-4-condizione-6-7-11 Caso b: Inserisci somma e num. es. 100 -3 Errore -Fine- Flusso di esecuzione: 1-2-3-4-condizione-9-11 G. Mecca - Programmazione Procedurale in Linguaggio C++
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++
Strutture di Controllo: 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 G. Mecca - Programmazione Procedurale in Linguaggio C++
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++
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++
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione Istruzione Condizionali Nidificate if esterno if interno 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; G. Mecca - Programmazione Procedurale in Linguaggio C++
Strutture di Controllo: Istruzioni Condizionali >> Nidificazione Caso a: Istruzione Condizionali Nidificate 7 4 a maggiore di b Differenza: 3 Flusso di esecuzione: 1-2-3-cond(T)-5-6-15 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; 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: 7 7 a e b sono uguali Differenza: 0 Flusso di esecuzione: 1-2-3-cond(F)-7-cond(F)-10- 11-13-15 G. Mecca - Programmazione Procedurale in Linguaggio C++
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++
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++
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++
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++
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++
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++
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; } else { cout << "Non hai fornito nessun voto" << endl; } } G. Mecca - Programmazione Procedurale in Linguaggio C++
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++
Ringraziamenti Ringraziamenti • 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++
Termini della Licenza Termini della Licenza • 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. • 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++