Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 21 di 43
  • livello principiante
Indice lezioni

Gestire il flusso: le istruzioni cicliche

Gestiamo il flusso di esecuzione del codice attraverso le istruzioni cicliche (For, While, Repeat)
Gestiamo il flusso di esecuzione del codice attraverso le istruzioni cicliche (For, While, Repeat)
Link copiato negli appunti

Le istruzioni cicliche

Object Pascal mette a disposizione tre tipi di istruzioni per il controllo dei cicli:
FOR, WHILE, REPEAT. Sono istruzioni che si differenziano molto l'una dall'altra per quanto
riguarda sintassi e logica di esecuzione.

L'istruzione FOR richiede la specificazione del numero di ripetizioni da effettuare. La
sua sintassi è la seguente

For Contatore := ValoreIniziale to
ValoreFinale do

BloccoIstruzioniDaRipetere;

oppure

For Contatore := ValoreIniziale downto
ValoreFinale do

BloccoIstruzioniDaRipetere;

L'istruzione For..To assegna inizialmente a Contatore il valore specificato in
ValoreIniziale ed esegue il BloccoIstruzioniDaRipetere incrementando
(nel caso di For..To) o decrementando (nel caso di For..downto) dopo ogni esecuzione il
valore di Contatore fino a raggiungere il valore indicato in ValoreFinale.

È scontato ricordare che i valori di ValoreIniziale e di ValoreFinale
devono essere compatibili con il tipo di Contatore.

Quando il valore di Contatore raggiunge il valore indicato in ValoreFinale
l'esecuzione prosegue eseguendo ancora una volta il BloccoIstruzioniDaRipetere e
quindi quest'ultimo viene eseguito in totale tante volte quanti sono i valori contenuti
nell'intervallo ValoreIniziale-ValoreFinale. Per esempio

For I := 1 to 10 do

...

eseguirà il codice contenuto nel blocco da ripetere per 10 volte.

Ci possono essere dei casi in cui il ciclo For non venga eseguito neanche una volta e
ciò può capitare quando il ValoreIniziale è maggiore (nel caso di For...To) o
minore (nel caso di For...downto) di ValoreFinale.

All'interno del ciclo For è possibile utilizzare il valore che la variabile contatore
assume ad ogni iterazione

For I := 1 to 10 do

Begin

A := 11 - I;

Writeln('Valore di A:' + IntToStr(A));

End;

Il codice in esempio restituisce la stampa a video dei seguenti valori: 10, 9, 8, 7, 6,
5, 4, 3, 2, 1.

For I := 10 downto 1 do

Begin

A := 11 - I;

Writeln('Valore di A:' + IntToStr(A));

End;

Il codice precedente restituisce la stampa a video dei seguenti valori: 1, 2, 3, 4, 5,
6, 7, 8, 9, 10.

Attenzione al valore del contatore al termine del ciclo For; questo ha volre non
definito quindi non è consigliabile utilizzare il valore in esso contenuto fuori dal
blocco di istruzioni da ripetere.

Il valore delle espressioni ValoreIniziale e ValoreFinale vengono
valutate solamente una volta ed all'inizio dell'esecuzione del ciclo. Ne deriva che
l'esecuzione del ciclo non è influenzata da possibili alterazioni dei valori citati come
invece può accadere nei cilci WHILE.

Il ciclo WHILE si differenzia da ciclio for per il tipo di espressione di controllo e
per la valutazione della stessa che avviene all'inizio di ogni iterazione. La sintassi
dell'istruzione WHILE è la seguente

While Espressione do

BloccoIstruzioniDaRipetere;

L'espresione dell'istruzione While deve essere di tipo boolean e l'esecuzione del
codice prosegue fintanto che l'espressione Espressione è verificata, ovvero
restituisce true. Si dice che l'istruzione While ripete per Vero. L'esecuzione del codice
termina quando l'espressione Espressione assume valore False.

Esempio

While A < B do

Inc(A);

Il codice precedente porta all'esecuzione dell'istruzione Inc(A) tante volte quante ne
sono necessarie per portare il valore di A ad essere uguale al valore di B.

Nel caso in cui A sia maggiore od uguale a B il ciclo non viene eseguito neanche una
volta.

L'istruzione REPEAT si differenzia dal WHILE fondamentalmente per la valutazione
dell'espressione di controllo. Questa viene infatti verificata dopo ogni esecuzione e la
ripetizione del ciclo avviene finchè l'espressione restituisce un valore False. Si dice
che l'istruzione Repeat ripeta per Falso. La sua sintassi è la seguente

Repeat

BloccoIstruzioniDaRipetere;

Until Espressione;

Espressione deve essere come per il While di tipo boolean e affinchè il ciclo venga
ripetuto deve assumere valore False; quando assume valore true, il ciclo termina.
Caratteristica interessante da notare, è che l'istruzione Repeat viene eseguita almeno
una volta al contrario dell'istruzione While. Questo perchè, appunto, l'espressione di
controllo viene valutata alla fine del ciclo.

Riscrivendo l'esempio precedente per l'istruzione While utilizzando l'istruzione Repeat
avremo

Repeat

Inc(A);

Until A = B;

A differenza dell'istruzione While,questa volta anche se A è già uguale a B prima
dell'esecuzione del ciclo, dopo l'esecuzione di quest'ultimo A assumerà comunque valore A
+ 1. Ammettendo che A prima del ciclo abbia valore 5 e B abbia valore 5 dopo il ciclo
avremo che A assumerà comunque il valore 6 appunto per il fatto che l'istruzione Repeat
viene eseguita almeno una volta.

Il flusso delle istruzioni di ciclo, può essere controllato tramite due altre
istruzioni ovvero Break e Continue. La prima interrompe
l'esecuzione del ciclo in cui si trova, la seconda riprende l'esecuzione dall'istruzione
successiva nella sequenza del ciclo stesso.


Ti consigliamo anche