Tipologie di iterazione
TIPOLOGIE DI ITERAZIONE
Definendo con corpo del ciclo l’insieme di istruzioni che devono essere eseguite più volta, allora, l’iterazione o ciclo (loop) è la struttura che consente l’esecuzione del corpo del ciclo più volte.
La condizione che permette l’iterazione può essere
- Definita, quando è noto a priori il numero di ripetizioni, ovvero il numero di volte che deve essere eseguito un insieme di istruzioni (ciclo FOR).
- Indefinita, quando il ciclo viene ripetuto un numero di volte sconosciuto a priori e termina quando si verifica una determinata condizione (ciclo WHILE).
Esempi
Ripeti 10 volte le flessioni (iterazione definita).
Finché non sei stanco corri intorno all’isolato (iterazione indefinita).
Esercizio: che tipo di iterazione è la seguente.
Finché non cadi fai una giravolta.
Le iterazioni indefinite possono essere:
- Precondizionale, o iterazione per vero, se il controllo per l’arresto dell’iterazione è posto prima del gruppo di istruzioni da ripetere.
- Postcondizionale, o iterazione per falso, se il controllo per l’arresto dell’iterazione è posto dopo del gruppo di istruzioni da ripetere.
In definitiva i tipi di ciclo iterativi sono i seguenti tre:
- Ciclo iterativo a condizione iniziale (WHILE / MENTRE) o precondizionale.
- Ciclo iterativo a condizione finale (DO … WHILE / RIPETI … MENTRE) o postcondizonale.
- Ciclo iterativo con contatore (FOR).
NB Il cosiddetto “ciclo infinito”, o “loop infinito“, è spesso dovuto ad un errore di programmazione che manda in stallo l’esecuzione del programma, ed è quindi un grave errore logico nello sviluppo di un applicativo
ELEMENTI FONDAMENTALI DI UN CICLO
Gli elementi fondamentali che contraddistinguono un ciclo iterativo sono:
- PASSO INIZIALE: Inizializzazione di una o più variabili utilizzabili nella condizione di test: la prima volta che si esegue il test la condizione deve avere un valore sensato.
- TEST DI FINE: Test che verifica una condizione: è la condizione di entrata/uscita dal ciclo (condizione del ciclo.
- PASSO ITERATIVO: Istruzioni da iterare, ovvero le istruzioni (gruppo di istruzioni) che vengono eseguite ad ogni iterazione (corpo del ciclo).
- Tra le istruzioni da iterare occorre un’istruzione di modifica che possa modificare l’esito del test, al fine di permettere l’uscita dal ciclo.
CICLO ITERATIVO A CONDIZIONE INIZIALE
Il ciclo precondizionale WHILE è caratterizzato da una condizione di terminazione del ciclo e un blocco istruzioni. La condizione di terminazione del ciclo viene testata prima di eseguire il blocco istruzioni e per questo il ciclo WHILE è detto ciclo a condizione iniziale; se tale condizione è falsa il ciclo viene terminato e viene eseguita l’istruzione successiva al ciclo stesso; se è vera viene eseguito il blocco istruzioni in esso contenuto; se quindi da subito la condizione è falsa il ciclo non verrà mai eseguito, il blocco istruzioni in esso contenuto non verrà mai eseguito.
Il blocco istruzioni viene ripetuto fino al momento in cui la condizione di terminazione diventa falsa.
RIPETI FINCHE’ Condizione
Istruzioni
FINE RIPETI
oppure
WHILE Condizione
Istruzioni
END WHILE
//Condizione è una affermazione (test) da verificare
//Condizione può essere VERA (TRUE) o FALSA (FALSE)
//Le istruzioni, una o più, vengono eseguite finché la condizione rimane VERA (TRUE)
//Esce dal ciclo quando la Condizione è FALSA (FALSE)
Semantica
- Viene valutata la condizione.
- Se la condizione è vera vai al punto 3 altrimenti vai al punto 5.
- Vengono eseguite le istruzioni del ciclo (corpo del ciclo).
- Vai al punto 1.
- Fine ciclo.
- Viene eseguito la prima istruzione successiva al ciclo.
NB Può capitare che la condizione è subito falsa e si passa immediatamente al punto 5 (Fine ciclo).
Nello specifico, come si vedrà nel Modulo Programmazione imperativa in C++, nel linguaggio C++ occorre rispettare i seguenti vincoli:
- Le parola chiave while permette di definire l’inizio delle istruzioni.
- La condizione è una espressione logica che può essere vera o falsa.
- Il blocco da ripetere finisce sempre e solo con la graffa chiusa.
- Il blocco di istruzioni può non essere mai eseguito se la condizione è falsa in partenza.
- La condizione deve essere sempre racchiusa tra parentesi.
- L’istruzione while non deve terminare con il simbolo di punto e virgola “;“.
- Si possono inserire altre strutture dentro un’altra (annidamento).
- Non si possono ommettere le graffe.
CICLO ITERATIVO A CONDIZIONE FINALE
I cicli postcondizionati DO..WHILE sono i duali dei cicli WHILE: prima sono eseguite le istruzioni del ciclo e poi viene testata la condizione. Quindi il blocco istruzioni viene svolto sempre almeno una volta indipendentemente dal fatto che la condizione sia vera o falsa.
Nello specifico di C++:
- Le parole chiave do e while definiscono il ciclo.
- Dopo la parola while si indica la condizione di uscita.
- Dopo la fine del blocco si usa break; per uscire.
- Le istruzioni vensono eseguite almeno una volta.
- while (condizione) deve essere necessariamente seguito da ;.
- All’interno di do e while si possono annidare altre strutture.
- Dopo do si chiude tutto il blocco di istruzioni fra graffe obbligatoriamente.
CICLO ITERATIVO CON CONTATORE
Nei linguaggi di programmazione, il ciclo con contatore (for) è una struttura di controllo iterativa che determina l’esecuzione di una porzione di programma ripetuta per un certo numero di volte. Si distingue in questo modo da determinata condizione. La scelta fra questi due tipi di ciclo è legata a considerazioni di leggibilità e chiarezza del codice; in linea di principio, infatti, qualunque algoritmo che impieghi un ciclo for può essere trascritto in una forma che usa solo un ciclo pre/postcondizionato, e viceversa. Il ciclo con contatore è fondamentale per la gestione degli array.
Nello specifico di C++:
- Le parola chiave for definisce l’inizio ciclo.
- Dopo la parola for si indica la condizione del contatore.
- Per il contatore si possono usare solo valori interi.
- La condizione si divide in: valore iniziale, valore finale, passo.
- Vanno dichiarate per forza, non esistono valori di default.
- Le istruzioni possono non venire eseguite nemmeno una volta.
- (inizio, fine passo, condizione contatore) vanno separati con ; e vanno fra parentesi.
- Dopo la condizione del contatore non va messa il ;.
- All’interno del for si possono annidare altre strutture.
- Dopo for si chiude tutto il blocco di istruzioni fra graffe obbligatoriamente (si possono omettere solo se il blocco è costituito da una sola istruzione).
- Anche se possibile, il valore del contatore non va variato all’interno del ciclo.
FOR i=1; i<N; i=i+1
Istruzioni
END FOR
//ripete le Istruzioni N volte
//inizialmente i vale 1
//ad ogni passaggio i viene incrementato
//esce dal ciclo quando i = N
Il ciclo iterativo con contatore può essere visto come il ciclo iterativo a condizione iniziale: