Iterazione

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Disambiguazione – Se stai cercando la figura retorica, vedi Anafora (figura retorica).
Disambiguazione – "Loop (informatica)" rimanda qui. Se stai cercando il linguaggio di programmazione, vedi LOOP (linguaggio di programmazione).

L'iterazione è l'atto di ripetere un procedimento con l’obiettivo di avvicinarsi a un risultato desiderato. Ogni ripetizione del procedimento è essa stessa definita un'iterazione, e i risultati di una sono utilizzati come punto di partenza per quella successiva. Diffuso è l'utilizzo negli algoritmi e nella programmazione in ambito informatico, ma anche in campi come quello della gestione del progetto (project management).

Matematica[modifica | modifica wikitesto]

Informatica[modifica | modifica wikitesto]

Teorema di Böhm-Jacopini[modifica | modifica wikitesto]

Lo stesso argomento in dettaglio: Teorema di Böhm-Jacopini.

Nella programmazione informatica, 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.

Assieme alla sequenza o blocco e alla selezione è una delle tre strutture fondamentali per la risoluzione algoritmica di un dato problema secondo il Teorema di Böhm-Jacopini. Esistono varie forme di iterazione; le più conosciute sono il MENTRE (in inglese: while..do), il RIPETI (in inglese: repeat..until o do..while), ed il PER (comunemente detto ciclo for). Si può dire che l'iterazione è l'anello forte della programmazione che consente di automatizzare portando a termine un processo, al quale non basta la semplice esecuzione in sequenza di istruzioni.

Il cosiddetto "ciclo infinito", o "loop infinito", è un caso di iterazione dovuto solitamente ad un errore di programmazione che manda in stallo l'esecuzione del programma, mentre in alcune tecniche di programmazione soprattutto con microcontrollori è utilizzato in maniera voluta per iterare infinitamente all'interno del programma.

Sintassi[modifica | modifica wikitesto]

MENTRE ( condizione )
    blocco di istruzioni
FINE-MENTRE

L'iterazione MENTRE controlla la condizione e successivamente, se la condizione lo permette, esegue il blocco di istruzioni che contiene, che può anche non essere eseguito nemmeno una volta (ciò avviene nel caso in cui la condizione risulti falsa già al primo controllo).

Esempio in C:

while ( condizione ) {
    ...;
    ...;
    }
RIPETI
    blocco di istruzioni
FINCHÉ condizione

L'iterazione RIPETI termina quando la condizione è falsa, e, siccome la condizione viene controllata dopo aver eseguito il blocco di istruzioni, esegue sempre almeno una volta il ciclo.

Esempio in C:

do {
    ...;
    ...;
    }
while ( condizione );
PER N volte
    blocco di istruzioni
FINE-PER

L'iterazione PER è paragonabile al MENTRE ma contiene una condizione implicita che deriva dal fatto che in questo tipo di ciclo il numero di volte che si dovrà eseguire il blocco di istruzioni è noto sin dall'inizio; moltissimi linguaggi di programmazione obbligano il programmatore ad utilizzare una variabile contatore, il cui compito è contare il numero di iterazioni compiute, che contiene ad ogni ciclo un numero (solitamente intero), e la condizione solitamente è che una determinata variabile sia minore, maggiore o uguale della variabile contatore. Essa assume tutti i valori intermedi via via che i cicli proseguono, partendo da un valore iniziale fino ad arrivare al valore finale (entrambi dichiarati esplicitamente dal programmatore).

La forma sopra diventa quindi:

PER variabile = inizio A fine PASSO = passo
    blocco di istruzioni
FINE-PER

Esempi[modifica | modifica wikitesto]

Per scrivere 10 volte la parola Ciao[modifica | modifica wikitesto]

PER variabile = 1  A 10 PASSO = 1
    SCRIVI "Ciao"
FINE-PER

Esempio in C:

for ( v=1; v<=10; v++ ) {
    printf("Ciao");
    }

Tabellina del 2[modifica | modifica wikitesto]

PER variabile = 2 A 20 PASSO = 2
    SCRIVI variabile
FINE-PER

Esempio in C:

for ( v=2; v<=20; v+=2 ) {
    printf("%d\n",v);
    }

Strutture cicliche[modifica | modifica wikitesto]

Nella creazione di programmi informatici, spesso è necessario ripetere più volte uno stesso gruppo di istruzioni; le istruzioni di controllo che permettono di controllare la ripetizione vengono dette strutture cicliche o ripetitive. Le strutture cicliche permettono quindi di ripetere una sequenza di operazioni, terminando quando si verifica una particolare condizione.

La realizzazione di algoritmi ripetitivi[modifica | modifica wikitesto]

Per realizzare un algoritmo ciclico si devono determinare:

  • le inizializzazioni da effettuare prima del ciclo;
  • le operazioni che devono essere ripetute all'interno del ciclo;
  • la condizione di terminazione del ciclo;
  • le istruzioni da eseguire alla fine del ciclo.

Il ciclo può terminare:

  • quando è stato eseguito un certo numero di ripetizioni noto;
  • quando l'utente lo richiede esplicitamente;
  • quando viene inserito un valore particolare;
  • più in generale quando si verifica una condizione particolare dipendente dal problema.

Una scelta più tecnica riguarda il fatto di utilizzare:

  • la ripetizione con controllo della condizione in testa, cioè all'inizio del ciclo(precondizionale);
  • la ripetizione con controllo della condizione in coda, cioè alla fine del ciclo(postcondizionale).

La differenza sostanzialmente riguarda il fatto di valutare la condizione di terminazione prima di eseguire il ciclo o dopo averlo eseguito almeno una volta. Un'altra differenza più marginale riguarda il fatto se si deve uscire dal ciclo quando la condizione è vera o quando la condizione è falsa.

Bibliografia[modifica | modifica wikitesto]

  • F. Scorzoni - Giuseppe Costa, Informatica: Programmazione in C++, Loescher

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]