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;
}
Scarica

Linguaggio_C_cicli_11_02_2014