Indice • • • • • Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto Ciclo while Istruzione iterativa a condizione iniziale: while Anche nella vita quotidiana ci sono operazioni che devono essere ripetute più volte: Esempio • Finchè ci sono ancora cose da comperare • Devo comperare il prossimo oggetto e depennarlo dalla lista Ciclo while Istruzione iterativa a condizione iniziale: while Notiamo che • Non è possibile stabilire a priori quante volte un’azione deve essere eseguita ma sappiamo solamente quando deve terminare • Siamo in presenza di situazioni nelle quali si deve ripetere ciclicamente (o iterare) un’istruzione (o un blocco di istruzioni) • L’istruzione (o più generalmente il blocco di istruzioni) si ripete previo controllo di un test chiamato condizione di ingresso al ciclo. Ciclo while La sintassi in linguaggio C while (condizione di ingresso) { blocco di istruzioni } Ciclo while Il funzionamento • Viene valutata la condizione di ingresso, che è un’operazione di test, e quindi ha risultato VERO o FALSO • Se il risultato è FALSO si esce dal ramo di sinistra senza eseguire nessuna istruzione • Se il risultato è VERO si entra nel ciclo e si esegue l’istruzione (o il blocco di istruzioni). Al termine dell’esecuzione del blocco si torna indietro a ripetere il test, cioè si ripete l’esecuzione della condizione logica di ingresso. • L’istruzione può essere letta nel seguente modo: «fintanto che la condizione è verificata (cioè il test da esito VERO) esegui il blocco di istruzioni» Ciclo while Casi particolari ed errori comuni • Per come è costruito il ciclo while a condizione iniziale, il blocco di istruzioni (corpo del ciclo) potrebbe anche non essere mai eseguito neppure una volta; basta infatti che la condizione di ingresso dia subito risultato FALSO • Se l’algoritmo non è strutturato correttamente c’è il rischio che il programma entri nel cosiddetto «loop infinito», ovvero esegue il blocco di istruzioni all’infinito senza mai uscirne Questo si verifica quando la condizione risulta sempre vera Per questo motivo all’interno del blocco di istruzioni è necessario ricordarsi di inserire un’istruzione che modifica la variabile di controllo in modo che prima o poi la condizione di ingresso risulti FALSA Ciclo while Esempio di ciclo while Scriviamo un programma che stampi primi 10 numeri naturali. Indice • • • • • Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto Teorema di Jacopini-Böhm Teorema di Jacopini-Böhm Il teorema di Böhm-Jacopini, enunciato nel 1966 dagli informatici Corrado Böhm e Giuseppe Jacopini, afferma che: Qualunque algoritmo può essere implementato utilizzando tre sole strutture: • Sequenza • Selezione • Ciclo Teorema di Jacopini-Böhm Teorema di Jacopini-Böhm Mentre per la sequenza e la selezione il lingiuaggio C (così come altri linguaggi di programmazione) mette a disposizione un solo costrutto, per l’iterazione mette a disposizione più costrutti, e precisamente: • Ciclo a condizione iniziale • Ciclo a condizione finale • Ciclo a conteggio I cili while, do while e for possono essere equivalenti In molti casi è possibile riscrivere l’algoritmo di un programma in modo da utilizzare un ciclo piuttosto che un altro E’ sufficiente che un linguaggio ammetta anche solo una di queste figure per soddisfare il teorema di Jacopini-Böhm. Indice • • • • • Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto Ciclo do.. while Istruzione iterativa a condizione finale: do… while Nel ciclo a condizione finale la condizione di uscita viene posta dopo il blocco di istruzioni Condizione iniziale Condizione finale Ciclo do.. while Istruzione iterativa a condizione finale: do… while Notiamo che • L’iterazione precondizionata permette di eseguire ripetizioni di un segmento di codice dopo che viene effettuato un test, chamato test di ingresso • L’iterazione postcondizionata prima esegue il contenuto del ciclo e alla fine verifica la condizione di ripetizione, che in questo caso prende il nome di condizione di uscita dal ciclo. • Se la condizione è verificata il ciclo viene ripetuto • Se la condizione non è verificata il ciclo termina Ciclo do.. while La sintassi in linguaggio C do { blocco di istruzioni } while (condizione di uscita); Ciclo do.. while Il funzionamento • Si entra nel ciclo e si esegue il blocco di istruzioni (o semplicemente un’istruzione) • Viene valutata la condizione di uscita, che è un’operazione di test, e quindi darà come risultato VERO oppure FALSO • Se il risultato è VERO si torna indietro a ripetere il corpo del ciclo. Se invece è FALSO si esce dall’altro ramo e si prosegue il programma con le successive istruzioni. • L’istruzione può essere letta nel seguente modo: «fai il ciclo mentre la condizione è VERA, cioè quando la condizione diventa FALSA il ciclo è finito» Ciclo do.. while Casi particolari ed errori comuni • Per come è costruito il ciclo while a condizione finale, il blocco di istruzioni (corpo del ciclo) viene eseguito sempre almeno una volta. • Se l’algoritmo non è strutturato correttamente c’è il rischio che il programma entri nel cosiddetto «loop infinito», ovvero esegue il blocco di istruzioni all’infinito senza mai uscirne Questo si verifica quando la condizione risulta sempre vera Per questo motivo all’interno del blocco di istruzioni è necessario ricordarsi di inserire un’istruzione che modifica la variabile di controllo in modo che prima o poi la condizione di ingresso risulti FALSA Ciclo do.. while Esempio di ciclo do while • Scriviamo un programma che stampi primi 10 numeri naturali. Indice • • • • • Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto Ciclo for Istruzione iterativa a conteggio: for La caratteristica dei cicli a conteggio è quella di conoscere a priori il nuero di cicli che si vuole reiterare Esempio • Fai 10 giorni di ferie • Leggi 20 pagine di un libro Il «ciclo a conteggio» prende il nome dal fatto che si utilizza un contatotre. Ciclo for La sintassi in linguaggio C for (inizializzazione;condizione di uscita; incremento) { blocco di istruzioni } Ciclo for Il funzionamento A differenza dei cicli while e do-while, nei quali fra parentesi veniva inserita solamente la condizione di ingresso o di uscita, nel ciclo for all’interno della parentesi vengono inseriti 3 parametri: • L’Inizializzazione, che è effettuata prima di effettuare il ciclo vero e proprio • La condizione di uscita, che viene valutata ad ogni ciclo; il ciclo viene ripetuto fintanto che la condizione permane VERA; • L’aggiornamento del passo: se la condizione di uscita è vera viene eseguito il blocco di istruzioni e al suo termine viene eseguito l’aggiornamento Ciclo for Casi particolari ed errori comuni • Per come è costruito il ciclo for, il blocco di istruzioni (corpo del ciclo) potrebbe anche non essere mai eseguito neppure una volta; basta infatti che la condizione di ingresso dia subito risultato FALSO • Se l’algoritmo non è strutturato correttamente c’è il rischio che il programma entri nel cosiddetto «loop infinito», ovvero esegue il blocco di istruzioni all’infinito senza mai uscirne Questo si verifica quando la condizione risulta sempre vera Ciclo for Esempio di ciclo for Scriviamo un programma che stampi primi 10 numeri naturali. Indice • • • • • Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto Cicli a confronto Cicli a confronto • I cicli while, do while e for possono essere equivalenti • In molti casi è possibile riscrivere l’algoritmo di un programma in modo da utilizzare un ciclo piuttosto che un altro • Sarà cura del programmatore decidere quale ciclo utilizzare in base all’algritmo che deve risolvere Cicli a confronto Stampa dei primi 10 numeri naturali DO WHILE WHILE FOR #include <stdio.h> #include <stdio.h> #include <stdio.h> int main() int main() int main() { { { int i; int i; int i; i=0; i=0; for (i=0;i<=10;i++) while (i<10) do { { { i=i+1; i=i+1; printf(“Numero %d \n”,i); printf(“Numero %d \n”,i); } } return 0; while (i<10); } return 0; } printf(“Numero %d \n”,i); } return 0; }