Algoritmo iterativo: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti.
fix
 
Riga 1:
{{F|programmazione|febbraio 2013}}
 
Un '''algoritmo iterativo''' è 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 [[Infinito (matematica)|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''.
 
== Esempio della catena di montaggio ==
Per spiegare meglio il concetto di algoritmo iterativo, si consideri il lavoro di un addetto ad una [[catena di montaggio]]: egli deve eseguire le stesse azioni ripetutamente finché ci sono pezzi da assemblare. L'algoritmo iterativo della catena di montaggio può essere così descritto:
# Preleva i componenti
 
1.# PrelevaAssembla i componenti
2.# AssemblaPassa i componenti al collega
3.# PassaSe ici sono altri componenti da assemblare, torna al collegapunto 1
4. Se ci sono altri componenti da assemblare, torna al punto 1
 
== Utilizzo delle iterazioni nei linguaggi di programmazione ==
Riga 26:
for (istruzione iniziale; condizione di iterazione; istruzione di fine ciclo) [istruzione di iterazione];
 
a seconda del fatto che una iterazione preveda una o più istruzioni.

Il funzionamento è il seguente:
# Viene eseguita l'istruzione iniziale
# Viene eseguito il blocco iterativo
# Viene eseguita l'istruzione di fine ciclo
# Se la condizione di iterazione è ''[[Algebra di Boole|vera]]'' viene ripetuto il ciclo, quindi si torna alla verifica della condizione
# Se la condizione di iterazione è ''falsa'' si esce dal ciclo
 
La definizione di cui sopra permette di utilizzare un ciclo for con qualunque tipo di condizione. Tuttavia tale ciclo si presta per algoritmi enumerativi. Ad esempio, il seguente codice [[C++]] scrive a video, elemento per elemento, gli elementi di un [[array]]:
Riga 72 ⟶ 74:
for (i = 0; 0 < count(dir); i++) {
if (!strpos(".exe",dir[i])) continue;
if (k == 5) break;
cout « dir[i] « endl;
k++;
Riga 106 ⟶ 108:
Nei linguaggi [[assembly]] tradizionali non sono disponibili costrutti iterativi, in quanto le primitive disponibili a livello macchina non li prevedono; le iterazioni sono infatti rappresentate attraverso istruzioni esplicite di salto a un'istruzione precedente. Per realizzare un ciclo ''for'' con istruzioni assemblative si parte dall'esempio della catena di montaggio, e si realizza il codice strutturandolo nel seguente modo:
 
# Si etichettano il punto di inizio ciclo (''START'') e la prima istruzione dopo il ciclo (''END'')
# Eventuali istruzioni pre-iterazione vanno prima della label ''START''
# Istruzioni '''break''' corrispondono ad un salto incondizionato (JMP) a ''END''
# Istruzioni '''continue''' corrispondono ad un salto incondizionato (JMP) a ''START''
# Si implementa la condizione di iterazione su ''START'', implementando un algoritmo di confronto tale che se la condizione è ''falsa'' si salta subito a END
# Si implementa tutto l'algoritmo dell'iterazione
# Si fa un salto incondizionato a ''START''
 
== Voci correlate ==