- Learn
- Guida Delphi
- Gestire il flusso: le istruzioni cicliche
Gestire il flusso: le istruzioni cicliche
- di Carlo Marona
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.
Se vuoi aggiornamenti su Gestire il flusso: le istruzioni cicliche inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Alessandro Ranellucci
Alessandro Ranellucci, autore di Slic3r, ci parla del suo software per la gestione di stampanti 3D.