2. Strutture di ripetizione
ciclo
struttura di controllo che permette di ripetere un
gruppo di istruzioni
corpo del ciclo
le istruzioni che vengono ripetute all’interno del
ciclo
3. Ciclo controllato da contatore
Ciclo il cui numero di iterazioni è conosciuto prima
dell’inizio dell’esecuzione del ciclo
La ripetizione del ciclo è gestita da una variabile di
controllo, il cui valore rappresenta un contatore
setta la variabile_di_controllo al valore iniziale 0
finchè variabile_di_controllo < valore finale
incrementa di 1 la variabile_di_controllo
5. F
ContaImpiegati < 7
T
prendi i dati calcola lo
stipendio visualizza lo
stipendio incrementa
count_emp
ContaImpiegati+ +
6. Differenza tra while e if
while (contaimpiegati < 7) {
...
}
il corpo del while può essere eseguito zero, una o più
volte
if (contaimpiegati < 7) {
...
}
il corpo dell’if viene eseguito al più una volta
7. Variabile di controllo del ciclo
variabile il cui valore determina se il ciclo deve essere
ripetuto.
La variabile di controllo del ciclo deve essere:
• inizializzata
contaimpiegati viene posta a 0 prima dell’inizio del
while
• testata
il valore di contaimpiegati viene testato prima di ogni
iterazione del while
• aggiornata
durante ogni iterazione, il valore di contaimpiegati
viene aggiornato
9. Istruzione while
La loop_repetition_condition viene testata;
se è vera, viene eseguita l’istruzione statement (corpo del
ciclo) e la loop_repetition_condition viene testata di
nuovo.
L’istruzione statement viene ripetuta fino a quando la
loop_repetition_condition rimane vera.
Quando la condizione diventa falsa, si esce dal while e
l’esecuzione continua con l’istruzione successiva al
while.
10. Istruzione while
Se la loop_repetition_condition è falsa la prima volta
che viene testata, l’istruzione statement non viene mai
eseguita.
Se la loop_repetition_condition rimane sempre vera,
il ciclo non termina (ciclo infinito).
11. Calcolare una somma di dati
in un ciclo
Calcolare il totale degli stipendi degli impiegati.
Accumulatore o contatore
variabile utilizzata per memorizzare una somma di
valori;
viene incrementata ad ogni iterazione del ciclo.
12. Istruzione for
La maggior parte dei cicli è costituita da 3 componenti
aggiunti al corpo del ciclo:
• inizializzazione della variabile di controllo del ciclo
• test della condizione di ripetizione del ciclo
• aggiornamento della variabile di controllo del ciclo
L’istruzione for permette di raggruppare tutte e tre le
componenti in un’unica posizione.
15. Istruzione for
Viene eseguita la initialization_expression.
Poi viene testata la loop_repetition_condition:
se è vera,viene eseguito statement, seguito da
update_expression.
Viene testata di nuovo la loop_repetition_condition e si
continua con l’esecuzione delle istruzioni finchè la
loop_repetition_condition non diventa falsa.
Quando la loop_repetition_condition diventa falsa, si
esce dal for e si continua l’esecuzione con l’istruzione
seguente.
16. Istruzione for - stile
utilizzata principalmente quando le fasi di inizializzazione
e aggiornamento sono semplici (es. azzeramento e
incremento).
Formati:
for (contaimpiegato = 0;
contaimpiegato < numeroimpiegati;
contaimpiegato += 1) {
istruzioni
}
for (i = 0; i < max; i += 1) {
istruzioni
}
17. Operatori di incremento e
decremento
Gli assegnamenti
conta = conta + 1;
conta += 1;
e
possono essere rimpiazzati da
conta ++;
18. Operatori di incremento e
decremento
++ è un operatore di incremento unario, il cui operando
deve essere una variabile;
++ provoca un effetto collaterale sulla variabile operando:
il contenuto della variabile viene incrementato di 1
-- è l’operatore di decremento: il contenuto della variabile
operando viene decrementato di 1
Effetto collaterale (side effect): modifica del contenuto
di una variabile provocata dall’esecuzione di
un’operazione.
19. Operatori di incremento e
decremento
il valore dell’espressione contenente l’operatore ++
dipende dalla posizione dell’operatore:
• incremento prefisso ++i
il valore dell’espressione è il valore contenuto nella
variabile dopo aver effettuato l’incremento
• incremento postfisso i++
il valore dell’espressione è il valore contenuto nella
variabile prima di effettuare l’incremento
21. Cicli condizionali
In alcuni casi non siamo in grado di determinare il numero
di ripetizioni che verrano eseguite prima di cominciare
l’esecuzione del ciclo.
Es.: elaborazione di un insieme di valori; viene richiesto
all’utente il numero di dati da elaborare; se l’utente
inserisce un numero non valido (es. negativo), si chiede
di inserire nuovamente il numero, e si continua finche’
non viene inserito un numero valido.
22. Esempio - num. di osservazioni
Visualizza prompt e prendi in input numero di osservazioni
finchè numero di osservazioni è negativo
visualizza avvertimento e prendi in input numero di
osservazioni
Cout<<“inserisci il numero di osservazioni“;
Cin>>numeroOsservazioni;
while (numeroOsservazioni < 0) {
Cout<<“Numero di osservazioi negativo“;
Cout<<“prova Ancora “;
Cin>> numeroOsservazioni;
}
23. Cicli controllati da sentinella
Alcuni programmi prendono in input uno o più dati ad
ogni iterazione di un ciclo.
Se non conosco il numero esatto di dati da prendere in
input, occorre un meccanismo per segnalare al
programma che i dati sono finiti.
valore sentinella: valore utilizzato per indicare la
terminazione dei dati in input;
deve essere un valore diverso dai possibili valori
dei dati in input.
24. Cicli controllati da sentinella
1. prendi in input il primo dato
2. finchè non trovi il valore sentinella
3. elabora il dato corrente
4. prendi in input il prossimo dato
Esempio
Programma che calcola la somma dei voti di un gruppo
di studenti.
SENTINEL -99
int sum
int score
/* somma dei voti */
/* voto corrente */
25. Prima soluzione
1. inizializza somma a 0
2. finchè valore è diverso da SENTINEL
3. prendi in input valore
4. somma score a somma
Problemi:
• quando si esegue il primo confronto, valore non è
inizializzata
• nella penultima iterazione, viene inserito un voto valido
che viene sommato a somma ; la condizione 2 è
soddisfatta,
quindi si entra di nuovo nel corpo del ciclo; nell’ultima
iterazione viene inserito il valore sentinella, che viene
erroneamente sommato a somma !
26. Soluzione
1. inizializza somma a 0
2. prendi in input il primo valore
3. finchè valore è diverso da SENTINEL
4. somma valore a somma
5. prendi in input il prossimo valore
27. istruzione do-while
For e while testano la condizione prima di eseguire il
corpo del ciclo
Input interattivo: il corpo del ciclo deve essere eseguito
almeno una volta
1. prendi in input un valore
2. se il valore non è nell’intervallo specificato, torna al passo 1
do {
Cout<<“Inserisci una lettera dalla A alla E>“;
Cin>>scelta;
} while (scelta < ‘A’ || scelta > ‘E’);
28. do-while
esempio
sintassi
/* Find first even number */
do
Cin>>num;
while (num % 2 != 0);
do
statement
while (condition)
Si esegue statement. Poi, condition viene testata: se è vera,
si esegue di nuovo statement e si testa condition. Quando il
test di condition produce false, si esce dal ciclo e si esegue
l’istruzione successiva.
Nota: se il corpo contiene più istruzioni, quete devono
essere racchiuse tra parentesi graffe.