PROGRAMMAZIONE: Le strutture di controllo Prof. Enrico Terrone A. S: 2008/09 Le tre modalità La modalità basilare di esecuzione di un programma è la sequenza: le istruzioni vengono eseguite una dopo l altra, riga per riga, dall alto in basso. Le strutture di controllo modificano l esecuzione sequenziale permettendo al programma di scegliere fra blocchi di istruzioni differenti (selezione) o di ripetere un blocco di istruzioni (iterazione). Il teorema di Böhm-Jacopini (1966) afferma che qualunque algoritmo può essere codificato usando soltanto sequenza, selezione e iterazione. L idea è che per spiegare a qualcuno che cosa deve fare abbiamo bisogno di farlo procedere, ma anche in certi punti di farlo scegliere e di farlo ripetere.
Selezione La selezione è la struttura di controllo che permette all algoritmo di decidere fra due blocchi di istruzioni, in base al valore di una condizione. Un blocco è una sequenza di istruzioni raggruppate. La condizione è un espressione il cui valore può essere vero oppure falso. Essa è generalmente basata sugli operatori di confronto (uguale, diverso, maggiore, minore ), Es. a>3 è vera per a che vale 5 mentre è falsa per a che vale 1. Se la condizione è vera viene eseguito il primo blocco di istruzioni, se la condizione è falsa viene eseguito il secondo blocco. Selezione La forma algoritmica della selezione: se (condizione) allora blocco-1 altrimenti blocco-2 La forma grafica della selezione (flow chart): V b1 cond. F b2 p Qualunque sia il blocco eseguito (b1 o b2), al suo termine l algoritmo prosegue dal medesimo punto di sincronizzazione p.
La Selezione in C/C++ La selezione in C/C++ si scrive usando la costruzione if-else (se-altrimenti): If (condizione) blocco-1 else blocco-2 // punto di sincronizzazione La Selezione in C/C++ Come già notato prima, dopo che si è eseguito il blocco-1 oppure il blocco-2, il programma riprende La condizione si scrive usando gli operatori >, >=, <, <=, ==,!= e se occorre anche gli operatori booleani && (and), (or),! (not). Attenzione a non confondere mai l operatore = (assegnazione) con l operatore == (confronto). La parte else + blocco-2 può anche non esserci: nel qual caso, se la condizione è falsa, il programma non esegue nessuna istruzione e poi prosegue sempre a partire dal punto di sincronizzazione.
Esempio di selezione Si scontano del 20% i prezzi > 100, del 5% gli altri int main () double pi, pf; cout << PROGRAMMA: SCONTO ; cout << Inserisci il prezzo: ; cin >> V pi; if (pi>100) pf = pi pi*20/100; else pf = pi pi*5/100; cout << Il prezzo scontato è << pf << \n ; Esercizi sulla selezione 1) Eseguire la divisione (trovando quoziente e resto) fra due interi letti da tastiera controllando che il divisore non sia zero 2) Leggere un voto e controllare che sia esatto (cioè compreso fra uno e dieci) 3) Leggere un intero e trovarne il valore assoluto 4) Scrivere un programma che risolva un equazione generica di primo grado. 5) Scrivere un programma che risolva un equazione generica di secondo grado. Nota: per calcolare la radice quadrata usare l istruzione sqrt(x) aggiungendo all inizio: #include <math.h>
Iterazione L iterazione è la struttura di controllo che permette all algoritmo di ripetere un blocco di istruzioni, fino a quando una condizione risulta vera. Per blocco e condizione valgono le definizioni date in precedenza. A ogni passaggio, prima di eseguire il blocco, si controlla la condizione: se è vera, si ripete il blocco; se è falsa, si prosegue con le istruzioni successive. La condizione deve poter diventare falsa, per cui le variabili in essa presenti devono essere modificate dentro al blocco. Iterazione La forma algoritmica dell iterazione: finché (condizione) ripeti blocco La forma grafica dell iterazione (flow chart): V b1 cond. F
L iterazione in C/C++ L interazione in C/C++ si scrive usando le costruzioni while (finché), do-while (ripeti-finché), for (per tutti): while (condizione) blocco do blocco while (condizione); for (inizializzazione; condizione; incremento) blocco Esempio di iterazione Trovare somma e media di 20 interi letti da tastiera int main () int x, s=0, i; double m; cout << PROGRAMMA: SOMMA E MEDIA ; i=1; while (i<=20) cout << inserisci: ; cin>> x; s = s+x; m = s/20; cout << La somma è << s << \n ; cout << La media è << m << \n ;
Esercizi sull iterazione 1) Stampare N volte la scritta Buongiorno. 2) Leggere una serie di prezzi e quantità acquistate e calcolare il totale della spesa (terminare quando viene inserita una quantità zero). 3) Leggere una serie di N voti e trovare il voto più alto, il più basso, la percentuale dei sufficienti e la percentuale degli insufficienti.