Home / Indice sezione
 www.icosaedro.it 

M2 Report

<= Istruzione SWITCHIstruzione WHILE =>
Frontespizio
Introduzione
Caratteristiche
Un semplice esempio
Moduli
Sezione IMPORT
Sezione CONST
Sezione TYPE
Tipo FORWARD
Sezione VAR
Sezione FUNCTION
Sezione BEGIN
Stringhe letterali
Sottostringhe
Commenti
Costanti predefinite
Variabili predefinite
Funzioni predefinite
Istruzione di assegnamento
Istruzione per la chiamata di funzione
Ordine di valutazione degli argomenti attuali
Istruzione IF
Istruzione SWITCH
Istruzione FOR
Istruzione WHILE
Istruzione REPEAT
Istruzione LOOP
Istruzione TRY
Istruzione RAISE ERROR
Istruzione RETURN
Espressioni logiche
Espressioni intere
Espressioni reali
Espressioni stringa
Espressioni tra tipi strutturati
Regole di scope
M2 per programmatori C
M2 per programmatori Java
Rappresentazione dei dati in memoria
Keywords
Messaggi di errore a runtime
Sintassi
 

Istruzione FOR

Permette l'esecuzione ciclica di un gruppo di istruzioni mentre una variabile intera assume tutti i valori all'interno di un intervallo dato. La forma generale della istruzione è

FOR i=valore_iniziale TO valore_finale BY passo DO
    istruzioni
END

All'ingresso nel ciclo le espressioni del valore iniziale e finale vengono calcolate, quindi il valore iniziale viene assegnato all'indice. Il valore del passo viene invece determinato in fase di compilazione, e deve perciò essere una espressione costante. Terminata questa fase di inizializzazione, il gruppo di istruzioni contenute nel FOR viene ripetuto ciclicamente. All'inizio di ogni ciclo viene controllato il valore dell'indice: se il passo è positivo allora si esce dalla istruzione FOR quando l'indice è maggiore del valore finale, mentre se il passo è negativo si esce dalla istruzione FOR quando l'indice diventa minore del valore finale. Superato questo test, il gruppo di istruzioni viene eseguito, e quindi la variabile indice viene incrementata del passo prima di ripetere il ciclo da capo. Siccome il test sull'indice viene eseguito all'inizio di ogni ciclo, è possibile che il gruppo di istruzioni non venga mai eseguito.

Il valore dell'indice all'uscita dal ciclo è quello che ha fatto fallire il test eseguito all'inizio del ciclo.

La variabile indice, qui indicata con i, deve essere di tipo INTEGER; l'indice deve essere una variabile locale della funzione o un argomento formale passato per valore o una variabile globale se il ciclo FOR appare nel corpo principale di un MODULE.

I valori iniziale e finale dell'indice vengono calcolati una sola volta prima di entare nel ciclo, e quindi non si possono cambiare all'interno del ciclo stesso. E' tuttavia possibile modificare il valore dell'indice all'interno del ciclo stesso. Ad esempio, se il passo è positivo è possibile uscire anticipatamente dal ciclo assegnando alla variabile indice il valore finale.

Il valore del passo deve essere una espressione intera calcolabile in fase di compilazione. La sezione "BY passo" è facoltativa e, se omessa, il passo presunto è +1.

VAR n: INTEGER
...
print("Ecco i numeri da 1 a 10:\n")
FOR n=1 TO 10 DO
    print( itos(n) + "\n" )
END

L'istruzione FOR è spesso associata all'uso degli ARRAY. Il seguente brano di codice ricerca la stringa target all'interno dell'array a:

VAR
    i: INTEGER
    target: STRING
    a: ARRAY OF STRING
...
target = "Mario Rossi"
FOR i=0 TO count(a)-1 DO
    IF a[i] = target THEN
        print("Trovato\n")
        RETURN
    END
END

La funzione count(a) usata per questo esempio dà il numero di elementi contenuti nell'array. La funzione count viene esportata dal modulo di libreria m2runtime. Osserviamo che se il numero degli elementi dell'array è count(a), allora il range degli indici va da 0 a count(a)-1.

Siccome il valore iniziale e finale dell'indice sono calcolati una sola volta all'ingresso nella istruzione FOR, si possono usare espressioni arbitrariamente complesse per calcolare questi valori senza incidere sulla efficienza.

Quando il numero di iterazioni non è determinabile a priori ma viene determinato durante l'esecuzione del ciclo stesso, allora occorre utilizzare le istruzioni WHILE, REPEAT...UNTIL e LOOP.

 
<= Istruzione SWITCHIstruzione WHILE =>

Umberto Salsi

Contatto
Mappa
Home / Indice sezione