Ciclo for

Da Wikipedia, l'enciclopedia libera.

Nei linguaggi di programmazione o di scripting, il ciclo for è una struttura di controllo iterativa che determina l'esecuzione di una porzione di programma ripetuta per un certo numero noto 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 il ciclo while, e viceversa.

Quasi tutti i linguaggi di programmazione hanno un'implementazione per un ciclo for; un ciclo di questo genere è presente in praticamente tutti i linguaggi procedurali e a oggetti, e anche in linguaggi basati su altri paradigmi, come il linguaggio concorrente Occam. Pur con sintassi specifiche che variano da linguaggio a linguaggio, il ciclo for è in genere riconoscibile per un certo insieme di elementi tipici:

  • il ciclo è basato su una variabile contatore, in genere una variabile numerica intera che viene inizializzata con valore 0 e poi incrementata a ogni iterazione, il cui ruolo è contare il numero di volte che si è eseguito il ciclo;
  • il numero di iterazioni previsto per il ciclo è espresso indirettamente, specificando il valore iniziale della variabile contatore e il valore finale (inserendo una condizione che fa terminare il ciclo quando la variabile contatore raggiunge il valore finale);
  • solitamente il contatore viene incrementato di 1 a ogni iterazione, ma è in genere possibile specificare un incremento diverso a piacere (detto step), eventualmente anche come numero negativo (è possibile impostare un ciclo in cui il valore iniziale del contatore è maggiore di quello finale e il contatore conta dunque "a ritroso", con la condizione che fa terminare il ciclo quando il contatore raggiunge valore 0).

Un esempio in pseudocodice che rappresenta le caratteristiche generali del ciclo for (mutuato dalla sintassi del BASIC) può essere il seguente, che stampa a video i numeri da 1 a 10. Può essere parafrasato in italiano come: per I che varia da 1 a 10, stampa I.

FOR I=1 TO 10
PRINT I

Esempi[modifica | modifica wikitesto]

MATLAB[modifica | modifica wikitesto]

In Matlab la ripetizione di blocchi di istruzioni per un numero di volte specificato e in modo incondizionato viene eseguita tramite l'istruzione di ciclo FOR ...END la cui sintassi e`:

for indice = espressione; blocco di istruzioni; end

esempio:

for i=1:8
disp(['numero: ',num2str(i)]);
end

RISULTATO:

numero: 1
numero: 2
numero: 3
numero: 4
numero: 5
numero: 6
numero: 7
numero: 8

Python[modifica | modifica wikitesto]

In Python la sintassi è la seguente:

for n in range(1, 100):
  print n

Con questo semplice esempio visualizzerete una lista di numeri da 1 a 99.

Pascal[modifica | modifica wikitesto]

In Pascal sono previste due sintassi diverse per i cicli col contatore che viene incrementato o decrementato:

var i : integer;
for i := 1 to 10 do
  writeln(i);


var i : integer;
for i := 10 downto 1 do
  writeln(i);

Linguaggio C[modifica | modifica wikitesto]

Il linguaggio C e i suoi derivati (inclusi per esempio C++ e Java) forniscono una versione generalizzata del ciclo for, che si può impiegare per descrivere cicli la cui terminazione non è basata semplicemente sul conteggio delle iterazioni eseguite attraverso un contatore. La sintassi generale del ciclo for in C è la seguente:

for(<inizializzazione>; <test>; <incremento>)
  <istruzione>;

dove <inizializzazione> è una qualsiasi espressione C (nella forma più semplice, l'assegnamento di un valore iniziale a un contatore); <test> è una condizione che dev'essere vera affinché il ciclo continui (nella forma più semplice, la condizione che il contatore non abbia raggiunto il suo valore finale); <incremento> è una istruzione che viene eseguita al termine di ogni iterazione (nella forma più semplice, l'incremento del contatore). Un esempio in cui il ciclo for viene impiegato in modo convenzionale è per esempio il seguente, che stampa a video i valori da 1 a 10:[1]

int i;
for(i = 1; i <= 10; i++)
  printf("%d", i);

Questo tipo di ciclo può essere usato per realizzare iterazioni di natura completamente diversa, poiché tutti e tre gli elementi descrittivi dell'iterazione (inizializzazione, test e incremento) possono essere espressi da frammenti di codice C qualsiasi; non è neanche obbligatorio che essi manipolino una variabile contatore.

Java[modifica | modifica wikitesto]

In Java, la variabile contatore (o qualsiasi altra variabile impiegata nel ciclo) può essere dichiarata nella sezione di inizializzazione. L'equivalente Java dell'esempio C precedente potrebbe assumere la seguente forma:

for (int i = 1; i <= 10; i++)
    System.out.println(i);

A partire dalla versione 5 di Java è inoltre disponibile la versione detta "generalizzata" del costrutto:

int V[] = {1, 2, 3, 4, 5};
for (int i : V)
    System.out.println(i);

tale forma del costrutto è inoltre disponibile per qualunque classe implementi l'interfaccia Iterable:

ArrayList<Double> lista = new ArrayList<Double>();
for (Double a : lista)
    System.out.println(a);

in questo frammento di codice il ciclo assegna di volta in volta all'oggetto a il riferimento ad uno degli oggetti (della classe-contenitore Double) contenuti in lista istanza della classe ArrayList che implementa l'interfaccia Iterable.

Visual Basic/Visual Basic .NET[modifica | modifica wikitesto]

For i = 1 To 10
  Console.WriteLine("La variabile di controllo vale " & i)
Next

Batch/DOS[modifica | modifica wikitesto]

Dal DOS (o tramite script in batch) può essere spesso utile dover creare un ciclo come questo:

for %%v in (a,e,i,o,u) do (
echo %%v
)

Risultato: saranno visualizzate le vocali a,e,i,o,u.

for /f %%r in (File.txt) do (
echo %%r
)

Risultato: visualizzeremo ogni riga dal file indicato tra parentesi.

Note[modifica | modifica wikitesto]

  1. ^ La variabile i indicata dev'essere stata dichiarata di un tipo intero, come riportato sulla prima riga; i++ è una sintassi tipica del C che incrementa la variabile indicata (equivalente a i=i+1).