R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Indice Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Ciclo while La sintassi in linguaggio C while (condizione di ingresso) { blocco di istruzioni }
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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»
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Ciclo while Esempio di ciclo while Scriviamo un programma che stampi primi 10 numeri naturali.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Indice Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Indice Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Ciclo do.. while La sintassi in linguaggio C do { blocco di istruzioni } while (condizione di uscita);
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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»
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Ciclo do.. while Esempio di ciclo do while Scriviamo un programma che stampi primi 10 numeri naturali.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Indice Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Ciclo for La sintassi in linguaggio C for (inizializzazione;condizione di uscita; incremento) { blocco di istruzioni }
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Ciclo for Esempio di ciclo for Scriviamo un programma che stampi primi 10 numeri naturali.
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Indice Ciclo a condizione iniziale: while Teorema di Jacopini-Böhm Ciclo a condizione finale: Do…while Ciclo a conteggio: for Cicli a confronto
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: 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
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting colors: R 52 G 195 B 51 Primary colors: Cicli a confronto Stampa dei primi 10 numeri naturali WHILE #include int main() { int i; i=0; while (i<10) { i=i+1; printf(“Numero %d \n”,i); } return 0; } DO WHILE #include int main() { int i; i=0; do { i=i+1; printf(“Numero %d \n”,i); } while (i<10); return 0; } FOR #include int main() { int i; for (i=0;i<=10;i++) { printf(“Numero %d \n”,i); } return 0; }