Programmazione Procedurale in Linguaggio C++ Strutture di Controllo Parte 1 Introduzione versione 2.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca – Università della Basilicata – [email protected] Strutture di Controllo: Introduzione >> Sommario Sommario Panoramica Un Esempio Calcolo della Media degli Esami con While Calcolo della Media degli Esami con For Concetti Fondamentali Condizione Blocco Classificazione delle Strutture di Controllo G. Mecca - Programmazione Procedurale in Linguaggio C++ 2 Strutture di Controllo: Introduzione >> Panoramica Panoramica Finora: elementi di base funzionamento analogo a quello della calcolatrice esecuzione “sequenziale” In realtà i linguaggi di programmazione sono molto più flessibili è possibile alterare il “flusso” di esecuzione delle istruzioni sulla base di “condizioni” G. Mecca - Programmazione Procedurale in Linguaggio C++ 3 Strutture di Controllo: Introduzione >> Panoramica Panoramica Strutture di Controllo istruzioni per eseguire o meno una porzione di programma oppure per ripetere più volte l’esecuzione di una porzione di programma a seconda che una opportuna condizione sia verificata o meno G. Mecca - Programmazione Procedurale in Linguaggio C++ 4 Strutture di Controllo: Introduzione >> Panoramica Panoramica Esempio questa porzione di programma deve essere eseguita solo se il valore della variabile raggio è positivo const float pigreco=3.14; int raggio; float circonf, cerchio; cout << “Inserisci il val. del raggio” << endl; cin >> raggio; if (raggio > 0) { cerchio = raggio*raggio*pigreco; circonf = 2*pigreco*raggio; cout << “Circonferenza: “ << circonf << endl; cout << “Cerchio: “ << cerchio << endl; } else cout << “Errore”; G. Mecca - Programmazione Procedurale in Linguaggio C++ 5 Strutture di Controllo: Introduzione >> Panoramica Panoramica In generale, una struttura di controllo è una istruzione come le altre con una forma particolare contiene una condizione e uno o più “blocchi” di istruzioni Intuitivamente il valore della condizione guida l’esecuzione dei blocchi di istruzioni G. Mecca - Programmazione Procedurale in Linguaggio C++ 6 Strutture di Controllo: Introduzione >> Un Esempio Un Esempio Un programma per il calcolo della media degli esami Due versioni l’utente inserisce preliminarmente il numero di esami sostenuti, e poi tutti i voti (versione con for) l’utente inserisce i voti uno per uno e si ferma digitando 0 (versione con while) G. Mecca - Programmazione Procedurale in Linguaggio C++ 7 Strutture di Controllo: Introduzione >> Un Esempio Un Esempio Utilizzo delle strutture di controllo è necessario ripetere le operazioni di acquisizione ed elaborazione dei voti è necessario distinguere il caso in cui è possibile calcolare la media (è stato fornito almeno un voto) dal caso in cui non sono stati forniti voti G. Mecca - Programmazione Procedurale in Linguaggio C++ 8 Strutture di Controllo: Introduzione >> Un Esempio Un Esempio: Media con For #include <iostream.h> >> mediafor.cpp 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++ 9 Strutture di Controllo: Introduzione >> Un Esempio Un Esempio: Media con While #include <iostream.h> >> mediaWhile.cpp 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++ 10 Strutture di Controllo: Introduzione >> Concetti Fondamentali Concetti Fondamentali Due componenti fondamentali condizione uno o più blocchi di istruzioni Due tipologie di strutture di controllo istruzioni condizionali istruzione iterative o “cicli” con una semantica diversa G. Mecca - Programmazione Procedurale in Linguaggio C++ 11 Strutture di Controllo: Introduzione >> Concetti Fondamentali Condizione Condizione espressione che assume valori booleani (true o false) Es: raggio < 0 Es: (annoCorso == 3) && (media > 28) la sintassi e la semantica sono state già discusse servono a controllare se durante l’esec. del prog. si verificano opportune circostanze G. Mecca - Programmazione Procedurale in Linguaggio C++ 12 Strutture di Controllo: Introduzione >> Concetti Fondamentali Blocco Blocco sequenza di istruzioni tra parentesi graffe Es: { { int a; a = 1; cout << a; } cout << “Prova”; cout << “endl; } { a++; } { } Attenzione tutte le istruzioni si concludono con ; non c’è il ; dopo le parentesi G. Mecca - Programmazione Procedurale in Linguaggio C++ 13 Strutture di Controllo: Introduzione >> Concetti Fondamentali Blocco Sintatticamente un blocco fatto di un’unica istruzione può essere scritto anche senza parentesi es: { a=a+1; } equivalente a a=a+1; Nel seguito, dovunque la sintassi prevede un blocco può esserci: un blocco di istruzioni (una o più) tra { } una istruzione singola (senza parentesi { }) MA: noi metteremo sempre le parentesi (>>) G. Mecca - Programmazione Procedurale in Linguaggio C++ 14 Strutture di Controllo: Introduzione >> Concetti Fondamentali Classificazione delle Str. di Controllo Strutture condizionali if (<condizione>) <blocco1> else <blocco2> consentono di eseguire un blocco di istruzioni oppure un’altro a seconda del valore vero o falso della condizione G. Mecca - Programmazione Procedurale in Linguaggio C++ 15 Strutture di Controllo: Introduzione >> Concetti Fondamentali Schema di Esecuzione programma istruzioni precedenti if vera condizione blocco1 falsa blocco2 istruzioni successive G. Mecca - Programmazione Procedurale in Linguaggio C++ 16 Strutture di Controllo: Introduzione >> Concetti Fondamentali Classificazione delle Str. di Controllo Strutture iterative o Cicli: due forme while (<condizione>) <blocco> for (<espressioni>) <blocco> consentono di ripetere l’esecuzione di un blocco di istruzioni più volte finché la condizione è verificata G. Mecca - Programmazione Procedurale in Linguaggio C++ 17 Strutture di Controllo: Introduzione >> Concetti Fondamentali Schema di Esecuzione del Ciclo programma istruzioni precedenti ciclo (while o for) condizione blocco istruzioni successive G. Mecca - Programmazione Procedurale in Linguaggio C++ 18 Strutture di Controllo: Introduzione >> Concetti Fondamentali Classificazione delle Str. di Controllo Esistono in tutti i linguaggi sono componenti fondamentali della programmazione ci sono sia in C/C++ che in FORTRAN Al solito notevoli differenze sintattiche semantica pressoché identica G. Mecca - Programmazione Procedurale in Linguaggio C++ 19 Strutture di Controllo: Introduzione >> Sommario Riassumendo Un Esempio Calcolo della Media degli Esami con While Calcolo della Media degli Esami con For Strutture di Controllo Condizione Blocco Classificazione delle Strutture di Controllo G. Mecca - Programmazione Procedurale in Linguaggio C++ 20 Ringraziamenti 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. G. Mecca - Programmazione Procedurale in Linguaggio C++ 21 Termini della Licenza Termini della Licenza This work is licensed under the Creative Commons AttributionShareAlike 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++ 22