Programmazione Procedurale in Linguaggio C++

Post on 03-Jan-2016

46 views 2 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 (mariasamela@tiscali.it), a cui va il mio ringraziamento.

Ringraziamenti

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.