Programmazione Procedurale in Linguaggio C++

24
G. Mecca – [email protected] – Università della G. Mecca – [email protected] – Università della Basilicata 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)

description

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. - PowerPoint PPT Presentation

Transcript of Programmazione Procedurale in Linguaggio C++

Page 1: Programmazione Procedurale in Linguaggio C++

G. Mecca – [email protected] – Università della Basilicata G. Mecca – [email protected] – Università della Basilicata

Programmazione Procedurale in Linguaggio C++

Strutture di Controllo

Parte 2

Istruzioni Condizionali

versione 2.0Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons

(vedi ultima pagina)

Page 2: Programmazione Procedurale in Linguaggio C++

2G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Sommario

Introduzione Istruzione if-then-else Istruzione if-then Istruzioni Condizionali Nidificate Esercizio: Riconoscimento di Triangoli

Strutture di Controllo: Istruzioni Condizionali >> Sommario

Page 3: Programmazione Procedurale in Linguaggio C++

3G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Introduzione

Istruzione if-then-elseesecuzione di blocco di codice oppure di

un’altro a seconda che una condizione sia vera o falsa

Istruzione if-thenesecuzione di un blocco di codice se la

condizione è veraaltrimenti nessun effetto

Strutture di Controllo: Istruzioni Condizionali >> Introduzione

Page 4: Programmazione Procedurale in Linguaggio C++

4G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Istruzione if-then-else

Sintassi:if (<if (<condizionecondizione>) >)

<<blocco1blocco1> >

else else

<<blocco2blocco2>>

Dove<condizione> è una espressione con valore

booleano<blocco1> e <blocco2> blocchi di istruzioni

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

Page 5: Programmazione Procedurale in Linguaggio C++

5G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Istruzione if-then-else

Semanticaviene 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

Page 6: Programmazione Procedurale in Linguaggio C++

6G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Esempio n.1

int a;int a;

cin >> a;cin >> a;

if ((a if ((a %% 2) == 0) { 2) == 0) {

cout << “il numero e’ pari”;cout << “il numero e’ pari”;

} else {} else {

cout << “il numero e’ dispari”;cout << “il numero e’ dispari”;

}}

cout << “Fine”;cout << “Fine”;

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

istruzione precedente

istruzione if-then-else

istruzione successiva

Page 7: Programmazione Procedurale in Linguaggio C++

7G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Esempio n.2

int a, b;int a, b;

cin >> a;cin >> a;cin >> b;cin >> b;if (a > b) { if (a > b) {

cout << “a maggiore di b ”;cout << “a maggiore di b ”;cout << “Valore di a:” << a;cout << “Valore di a:” << a;

} else {} else { cout << “a non e’ maggiore di b ”;cout << “a non e’ maggiore di b ”; cout << “Valore di b:” << b;cout << “Valore di b:” << b;

}}cout << “Fine”;cout << “Fine”;

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

Page 8: Programmazione Procedurale in Linguaggio C++

8G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Esempio n.3

1.1. float sommaVoti, numeroEsami, float sommaVoti, numeroEsami, media;media;

2.2. cout << “Inserisci somma e cout << “Inserisci somma e num. es.” << endl;num. es.” << endl;

3.3. cin >> sommaVoti; cin >> sommaVoti;4.4. cin >> numeroEsami; cin >> numeroEsami;5.5. if (numeroEsami>0) { if (numeroEsami>0) { 6.6. media = sommaVoti/numeroEsami; media = sommaVoti/numeroEsami;7.7. cout << “Media: ” << media; cout << “Media: ” << media;8.8. } else { } else {9. 9. cout << “Errore”;cout << “Errore”;10.10. } } 11.11. cout << “-Fine-”; 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

Page 9: Programmazione Procedurale in Linguaggio C++

9G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Istruzione if-then

Sintassiif (<if (<condizionecondizione>) >)

<blocco><blocco>

Semanticaviene valutata la condizionese la condizione è vera viene eseguito il

blocco e poi si prosegue con l’istr. successivase la condizione è falsa si prosegue

direttamente con l’istruzione successiva

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then

Page 10: Programmazione Procedurale in Linguaggio C++

10G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Istruzione if-then

Esempio:int a;int a;

cout << “Immetti un numero positivo” << endl;cout << “Immetti un numero positivo” << endl;

cin >> a;cin >> a;

if (a < 0 ) {if (a < 0 ) {

a = abs(a);a = abs(a);

}}

cout << “Radice quadrata: “ << sqrt(a);cout << “Radice quadrata: “ << sqrt(a);

Strutture di Controllo: Istruzioni Condizionali >> Istruzione if-then

se il valore di a è positivonon è necessario effettuarealcuna operazione

Page 11: Programmazione Procedurale in Linguaggio C++

11G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Istruzione Condizionali Nidificate

Nidificazionele istruzioni che seguono l’if e/o l’else

possono essere istruzioni qualsiasiin particolare, possono essere a loro volta

istruzioni condizionaliil processo può essere ripetuto a molti livelli

Analogoè come se gli if interni facessero il “nido” in

quelli esterni

Strutture di Controllo: Istruzioni Condizionali >> Nidificazione

Page 12: Programmazione Procedurale in Linguaggio C++

12G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Istruzione Condizionali Nidificate

Come deve essere interpretata la semantica ?in modo del tutto ordinariociascuna istruzione condizionale viene

eseguita secondo la sua semanticabisogna solo fare attenzione al modo in cui

vengono valutate le condizioni ed alla sequenza delle scelte

Strutture di Controllo: Istruzioni Condizionali >> Nidificazione

Page 13: Programmazione Procedurale in Linguaggio C++

13G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Istruzione Condizionali Nidificate

int a, b, differenza;int a, b, differenza;cin >> a;cin >> a;cin >> b;cin >> b;if (a > b) {if (a > b) { cout << “a maggiore di b” << endl;cout << “a maggiore di b” << endl; differenza = a - b;differenza = a - b;} else {} else { if (b > a) {if (b > a) { cout << “b e’ maggiore di a” << endl;cout << “b e’ maggiore di a” << endl; } else {} else { cout << “a e b sono uguali” << endl;cout << “a e b sono uguali” << endl; } } differenza = b - a;differenza = b - a;}}cout << “Differenza: ” << differenza << endl;cout << “Differenza: ” << differenza << endl;

Strutture di Controllo: Istruzioni Condizionali >> Nidificazione

if esterno if interno

Page 14: Programmazione Procedurale in Linguaggio C++

14G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Istruzione Condizionali Nidificate

1. int a, b, differenza;1. int a, b, differenza;2. cin >> a;2. cin >> a;3. cin >> b;3. cin >> b;4. if (a > b) {4. if (a > b) {5. cout << “a maggiore di b” << endl;5. cout << “a maggiore di b” << endl;6. differenza = a - b;6. differenza = a - b;7. } else {7. } else {8. if (b > a) {8. if (b > a) {9. cout << “b maggiore di a”;9. cout << “b maggiore di a”;10. } else {10. } else {11. cout << “a e b sono uguali”;11. cout << “a e b sono uguali”;12. } 12. } 13. differenza = b - a;13. differenza = b - a;14. }14. }15. cout << “Differenza: ” 15. cout << “Differenza: ” << 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 34b maggiore di a

Differenza: 0

7 7a e b sono uguali

Page 15: Programmazione Procedurale in Linguaggio C++

15G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

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 latidati 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

Page 16: Programmazione Procedurale in Linguaggio C++

16G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Esercizio: Riconoscimento di Triangoli Scelta dell’algoritmo

I passo: strategia di rappresentazione dei datiII passo: strategia di operazioni

Strategia di rappresentazionelunghezze dei lati a,b,c: variabili float a,b,c

Strategia di operazioniacquisisco le lunghezze dei lativerifico se il tr. è equilatero; altrimenti verifico se il tr.

è isoscele; altrimenti il tr. è scaleno

Strutture di Controllo: Istruzioni Condizionali >> Esercizio

>>> scrittura del programma

Page 17: Programmazione Procedurale in Linguaggio C++

17G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Esercizio: Riconoscimento di Triangoli#include <iostream.h>#include <iostream.h>void main(){void main(){ float a,b,c;float a,b,c; cout << "Immetti i tre lati " << endl;cout << "Immetti i tre lati " << endl; cin >> a;cin >> a; cin >> b;cin >> b; cin >> c;cin >> c; if ((a==b) && (b==c)) {if ((a==b) && (b==c)) { cout << "il triangolo e' equilatero" << endl;cout << "il triangolo e' equilatero" << endl; } else {} else { if((a==b) || (a==c) || (b==c)) {if((a==b) || (a==c) || (b==c)) { cout << "il triangolo e' isoscele" << endl;cout << "il triangolo e' isoscele" << endl; } else {} else { cout << "il triangolo e' scaleno" << endl;cout << "il triangolo e' scaleno" << endl; }} }}}}

Strutture di Controllo: Istruzioni Condizionali >> Esercizio

Page 18: Programmazione Procedurale in Linguaggio C++

18G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

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

Esempiodecollo alle ore 18:40:10 del 1 gennaio 2002tempo di volo pari a 20:40:15atterraggio il 2 gennaio 2002 alle ore 15:20:25

Strutture di Controllo: Istruzioni Condizionali >> Esercizio

Page 19: Programmazione Procedurale in Linguaggio C++

19G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

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

Inoltreevitare il controllo delle date

Strutture di Controllo: Istruzioni Condizionali >> Esercizio

Page 20: Programmazione Procedurale in Linguaggio C++

20G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Riassumendo

Istruzioni Condizionaliservono a controllare l’esecuzione dei

blocchi del programma sulla base di condizioni

condizione: espressione vera o falsadue forme: if-then-else, if-then

Nidificazioneattenzione ai riferimenti

Strutture di Controllo: Istruzioni Condizionali >> Sommario

Page 21: Programmazione Procedurale in Linguaggio C++

21G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Un Esempio: Media con For#include <iostream.h>#include <iostream.h>void main() {void main() { float voto, sommaVoti, media;float voto, sommaVoti, media; int numeroEsami, i;int numeroEsami, i; cout << "Quanti esami hai sostenuto ?" << endl;cout << "Quanti esami hai sostenuto ?" << endl; cin >> numeroEsami;cin >> numeroEsami; sommaVoti = 0.0;sommaVoti = 0.0; for (i=0; i<numeroEsami; i++) {for (i=0; i<numeroEsami; i++) { cout << "Immetti il voto di un esame" << endl;cout << "Immetti il voto di un esame" << endl; cin >> voto;cin >> voto; sommaVoti += voto;sommaVoti += voto; }} if (numeroEsami > 0) {if (numeroEsami > 0) { media = sommaVoti/numeroEsami;media = sommaVoti/numeroEsami; cout << "La media vale: " << media << endl;cout << "La media vale: " << media << endl; } else {} else { cout << "Non hai fornito nessun voto" << endl;cout << "Non hai fornito nessun voto" << endl; }}}}

Strutture di Controllo >> Un Esempio

Page 22: Programmazione Procedurale in Linguaggio C++

22G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

Un Esempio: Media con While#include <iostream.h>#include <iostream.h>void main() {void main() { float voto, sommaVoti, media;float voto, sommaVoti, media; int numeroEsami;int numeroEsami; bool continua;bool continua; continua = true;continua = true; numeroEsami = 0;numeroEsami = 0; sommaVoti = 0.0;sommaVoti = 0.0; while (continua == true) {while (continua == true) { cout << "Immetti il voto (0 per fermarti)" << endl;cout << "Immetti il voto (0 per fermarti)" << endl; cin >> voto;cin >> voto; if (voto == 0) {if (voto == 0) { continua = false;continua = false; } else { numeroEsami++; sommaVoti += voto; }} else { numeroEsami++; sommaVoti += voto; } }} if (numeroEsami > 0) {if (numeroEsami > 0) { media = sommaVoti/numeroEsami;media = sommaVoti/numeroEsami; cout << "La media vale: " << media << endl;cout << "La media vale: " << media << endl; } else {} else { cout << "Non hai fornito nessun voto" << endl;cout << "Non hai fornito nessun voto" << endl; }}}}

Strutture di Controllo >> Un Esempio

Page 23: Programmazione Procedurale in Linguaggio C++

23G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

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.

Ringraziamenti

Page 24: Programmazione Procedurale in Linguaggio C++

24G. Mecca - Programmazione Procedurale in Linguaggio C++G. Mecca - Programmazione Procedurale in Linguaggio C++

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.

Termini della Licenza

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.