Iterazione
L’UTILITA’ DEI CICLI ITERATIVI
Quando una sequenza di istruzioni viene ripetuta fino a quando non si verifica una certa condizione prende il nome di struttura iterativa.
Un algoritmo avente una struttura iterativa è una tipologia di algoritmo costituito da una sequenza di azioni che viene ripetuta, finché è necessaria la ripetizione stessa (un ciclo). Tutte le operazioni che richiedono la ripetizione di una stessa azione più volte, ma in numero finito sono dette procedure iterative. Ad ogni iterazione, l’esecutore svolge un compito. Al termine verifica se tale compito vada ripetuto mediante una condizione di ripetizione.
A cosa servono i cicli iterativi?
I cicli iterativi sono utilizzati per due scopi:
- Risparmiare codice.
- Agevolare la scrittura del codice.
Definizione
Nella programmazione dei computer, l’iterazione, chiamata anche ciclo o con il termine inglese loop, è una struttura di controllo, all’interno di un algoritmo risolutivo di un problema dato, che ordina all’elaboratore di eseguire ripetutamente una sequenza di istruzioni, solitamente fino al verificarsi di particolari condizioni logiche specificate.
Esempio 1
Per spiegare meglio il concetto di algoritmo iterativo, si consideri il lavoro svolto da un utente che vuole prendere una bevanda da 35 cent da un distributore automatico. Supponiamo che il distributore accetti solo monete da 5 cent. Egli deve eseguire le stesse azioni ripetutamente finché non ha raggiunto 35 cent.
- Inserisci una moneta da 5 cent.
- Se non hai inserito almeno 35 cent torna al punto 1.
Esempio 2
Catena di montaggio per assemblare i componenti di un PC.
- Preleva un componente.
- Assembla il componente.
- Se ci sono altri componenti da assemblare, torna al punto 1.
Esempio 3
Invio di una email contenente un allegato costituito da 10 file.
- Invia un file.
- Verifica se ci sono altri file. Se Si torna al punto 1 altrimenti prosegui.
Esempio 4
Leggere 5 interi, calcolare la media e stamparla a video.
IN v1
IN v2
IN v3
IN v4
IN v5
SOMMA ß v1 + v2 + v3 + v4 + v5
MEDIA ß SOMMA/5
OUT MEDIA
Questa strategia di soluzione non è accettabile, in quanto porta alla realizzazione di un algoritmo illeggibile e costituito da molte istruzioni. Inoltre, se si volesse modificare l’algoritmo al fine di gestire non più 5 voti ma 10, occorrerebbe aggiungere ulteriori istruzioni e modificare la formula della media.
La prima osservazione da fare, indipendentemente dalle tecniche di iterazione che andremo a definire, è che possiamo generalizzare il precedente codice in modo da renderlo adattabile a future modifiche.
ITERAZIONI
In un algoritmo può capitare di dover eseguire un insieme di istruzioni, in modo identico, più volte. Si parla allora di cicli iterativi (LOOP).
L’esempio precedente può così essere riscritto utilizzando i cicli iterativi:
NUM | ISTRUZIONI |
1
2 3 4 5 6 7 8 9 10 11 12 |
PROG main
ASSIGN SOMMA=0 ASSIGN MAX=5 ASSIGN CONTA=0 WHILE CONTA<MAX IN NUM ASSIGN SOMMA=SOMMA+NUM ASSIGN CONTA=CONTA+1 END WHILE //CONTA<MAX ASSIGN MEDIA=SOMMA/MAX OUT MEDIA END PROG //main |
TRACING (NUM=6,5,7,6,6) | |||||||
NUM | SOMMA | MAX | CONTA | NUM | MEDIA | CONTA<MAX | OUT |
1 | |||||||
2 | 0 | ||||||
3 | 5 | ||||||
4 | 0 | ||||||
5 | VERO | ||||||
6 | 6 | ||||||
7 | 6 | ||||||
8 | 1 | ||||||
5 | VERO | ||||||
6 | 5 | ||||||
7 | 11 | ||||||
8 | 2 | ||||||
5 | VERO | ||||||
6 | 7 | ||||||
7 | 18 | ||||||
8 | 3 | ||||||
5 | VERO | ||||||
6 | 6 | ||||||
7 | 24 | ||||||
8 | 4 | ||||||
5 | VERO | ||||||
6 | 6 | ||||||
7 | 30 | ||||||
8 | 5 | ||||||
5 | FALSO | ||||||
9 | |||||||
10 | 6 | ||||||
11 | 6 | ||||||
12 |
MAX = 5 //Numero di voti da sommare
IN v1
IN v2
IN v3
IN v4
IN v5
SOMMA ß v1 + v2 + v3 + v4 + v5
MEDIA ß SOMMA/ MAX
OUT MEDIA
Grazie alla variabile MAX, inizializzata a 4 la formula per il calcolo della media è stata generalizzata. Se in futuro volessimo gestire la media di 10 voti, oppure di 100 voti, basterà modificare solo l’assegnazione MAX = 5 in MAX = 10 piuttosto che in MAX = 100 a seconda della necessità, senza apportare modifiche a nessun’altra parte del codice.
Rimane comunque ancora un problema, pesante, della lunghezza del codice, in quanto per gestire 10 voti si dovrebbero utilizzare 10 variabili e fare 10 acquisizioni e modificare la formula della SOMMA (SOMMA ß v1 + v2 ….. + v10). Senza parlare poi che se i voti fossero 100 l’algoritmo diventa ingestibile. È necessario, in questi casi, allora cambiare strategia e utilizzare i cicli iterativi.