Programmazione Procedurale in Linguaggio C++
-
Upload
kamal-berger -
Category
Documents
-
view
46 -
download
2
description
Transcript of 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)
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 ([email protected]), 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.