Pascal/Istruzioni di controllo: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
m Correzione errori comuni - Lista
Ramac (discussione | contributi)
punteggiatura e contenuto
Riga 2: Riga 2:




==If,then,else==
==If, then, else==


In qualcuno degli esempi precedenti si è vista la sintassi con ''if'',''then'' e ''else'';vediamo in cosa consiste;
In qualcuno degli esempi precedenti si è vista la sintassi con ''if'',''then'' e ''else'': vediamo in cosa consiste.
Nella pratica,questo costrutto consente la scelta fra due alternative:'''se'''(if) c'è una certa condizione '''allora'''(''then'') il programma esegue una certa istruzione;'''altrimenti'''(''else'') esegue un'altra istruzione:
Nella pratica, questo costrutto consente la scelta fra due alternative: '''se''' (if) una certa condizione è vera '''allora''' (''then'') il programma esegue una certa istruzione, '''altrimenti''' (''else'') ne esegue un'altra:


'''if''' condizione '''then''' istruzione
'''if''' condizione '''then''' istruzione
'''else''' istruzione;
'''else''' istruzione;


che come abbiamo già visto permette la scelta fra un caso vero e un caso falso e in base a questo esegue il contenuto del ''then'' o dell'''else''. Spesso il ramo in else non serve.
che come abbiamo già visto permette la scelta fra un caso vero e un caso falso e in base a questo esegue il contenuto del ''then'' o dell'''else''; tuttavia a volte il ramo in ''else'' non è strettamente utile o addirittura non serve.


Più precisamente,quando le istruzione che seguono il ''then'' sono più di una,esse devono essere comprese tra ''begin'' e ''end'';ciò vale anche per le istruzioni che seguono l'''else''
Quando le istruzioni che seguono il ''then'' o l'''else'' sono più di una esse devono essere delimitate da istruzioni ''begin'' e ''end'':
'''if''' condizione '''then'''
'''if''' condizione '''then'''
''begin''
''begin''
Riga 28: Riga 28:
''end'';
''end'';


Si nota come a l'''end'' che segue le istruzioni dopo il ''then'' non segue un punto e virgola;e che all'istruzione prima di ''end'' non è obbligatorio che sia seguito un punto e virgola.
Si noti come le istruzioni che precedono ''end'' o ''else'' non debbano essere seguite da punto e virgola


Facciamo un esempio pratico:si vuole calcolare la radice quadrata di un numero;ma se il numero dovesse essere negativo,la radice quadrata non può essere espressa con i numeri reali.
Facciamo un esempio pratico.<br/> Si vuole calcolare la radice quadrata di un numero: ci&ograve; &egrave; possibile nell'insieme dei numeri reali solo se il valore in ingresso &egrave; positivo.
Il programma deve perciò:
Il programma deve perci&ograve;:
*Acquisire il numero
*acquisire il numero
*''Se'' il numero è positivo,''allora'' ne calcola la radice quadrata e espone il risultato;''altrimenti'' scrive un messaggio;
*eseguire una selezione binaria: ''se'' il numero è positivo,''allora'' ne calcola la radice quadrata e espone il risultato;''altrimenti'' scrive un messaggio di errore;


program radice_quadrata;
program radice_quadrata;
Riga 43: Riga 43:
begin
begin
r:=sqrt(n);
r:=sqrt(n);
writeln('La radice quadrata del numero inserito è',r:8:3);
writeln('La radice quadrata del numero inserito &egrave; ',r:8:3);
end
end
else writeln('La radice di un numero negativo non può essere espressa con numeri reali');
else writeln('La radice di un numero negativo non può essere espressa con numeri reali');
Riga 49: Riga 49:
end.
end.


==Case...of,else==
==Case...of, else==


Questo metodo permette di fare scelte più complesse;la sintassi è
Questo metodo permette di fare scelte pi&ugrave; complesse. La sintassi &egrave;:
'''case''' selettore '''of'''
'''case''' selettore '''of'''
Riga 71: Riga 71:
end;
end;


Con il costrutto case, il valore della variabile selettore viene confrontato con il valore di ogni singolo caso, quando viene trovato un caso che eguaglia il selettore l'istruzione che segue viene eseguita; poi il controllo passa alla prima istruzione dopo il costrutto ''case''.
Con il costrutto ''case'', il valore della variabile selettore viene confrontato con il valore di ogni singolo caso; quando viene trovato un valore che eguagli il selettore vengono eseguite le istruzioni relative al blocco in questione; poi il controllo passa alla prima istruzione dopo il costrutto ''case''.
Se nessun caso soddisfa il selettore, viene eseguita l'ultima istruzione, quella individuata dalla parola '''else'''.Se la parte con ''else'' viene omessa e il selettore non è compreso tra nessuno dei casi in elenco,si passa anche in questo caso alla prima istruzione dopo il contrutto ''case''.Quando c'è solo un istruzione che segue un certo caso,si può omettere ''begin'' e ''end''. Occorre fare attenzione che il costrutto ''case'' termina con un ''end''.
Se nessun valore soddisfa il selettore viene eseguita l'ultimo blocco di istruzioni individuato dalla parola chiave '''else'''. Se la parte con ''else'' viene omessa e il selettore non &egrave; compreso tra nessuno dei casi in elenco, si passa anche in questo caso alla prima istruzione dopo il costrutto ''case''.
<br/>Quando c'è solo un istruzione che segue un certo caso si possono omettere ''begin'' e ''end''. <br/>Occorre fare attenzione che il costrutto ''case'' termina con un ''end''.


Facciamo un esempio del costrutto case:
Facciamo un esempio del costrutto case:
Riga 82: Riga 83:
'''end;'''
'''end;'''
alcune considerazioni sull'esempio proposto:
alcune considerazioni sull'esempio proposto:
*abbiamo omesso la parte facoltativa '''else'''
*&egrave; stata omesso il blocco facoltativo '''else'''
*sono state scritte delle liste di possibili casi
*sono state scritte delle liste di possibili casi
*è stato usato un range di valori x..y;al terzo rigo,''60..80'' sta a indicare tutti i valori compresi o uguali tra 60 e 80.
*è stato usato un range di valori x..y; al terzo rigo,''60..80'' indica tutti i valori compresi tra 60 e 80 (inclusi).

=Strutture Iterative =
In Pascal abbiamo diversi tipi di struttura iterative (in genere vengono detti "''cicli''"):


=Strutture Iterative=
In Pascal abbiamo diversi tipi di strutture iterative (in genere vengono detti "''cicli''"):


==For ==
==For ==




Questa struttura, ci permette di ripetere una determinata serie di istruzioni per un numero finito di volte. La sua sintassi è:
Questa struttura ci permette di ripetere una determinata serie di istruzioni per un numero finito di volte. La sua sintassi è:


'''for''' Contatore:=valore_iniziale '''to''' valore_finale '''do'''
'''for''' Contatore:=valore_iniziale '''to''' valore_finale '''do'''
Riga 104: Riga 104:




Nella pratica questo costrutto consente la ripetizione di un certo gruppo di istruzioni fino a quando la variabile contatore raggiunge un certo valore: '''per'''(for) contatore:=valore_iniziale '''fino a'''(to) valore_finale '''fai'''(do) un gruppo d'istruzioni.
Nella pratica questo costrutto consente la ripetizione di un certo gruppo di istruzioni fino a quando la variabile contatore raggiunge un certo valore: '''per'''(for) contatore:=valore_iniziale '''fino a'''(to) valore_finale '''esegui'''(do) un blocco d'istruzioni.
Per Contatore s'intende una variabile (di solito vengono usate le lettere I,L,M,N,J,K),che da un valore iniziale cresce di un certo valore ogni ciclo d'istruzioni;fino a che non raggiunge il valore_finale,che rappresenta il valore per il quale il ciclo terminerà.
Per Contatore s'intende una variabile (di solito vengono usate le lettere I,L,M,N,J,K) che da un valore iniziale cresce di un certo valore ogni ciclo d'istruzioni fino a che non raggiunge il valore finale, che rappresenta il valore per il quale il ciclo terminerà.


L'iterazione può anche procedere in modo che la variabile contatore decresca a ogni ciclo;in questo caso la sintassi è:
L'iterazione può anche procedere in modo che la variabile contatore decresca a ogni ciclo; in questo caso la sintassi è:
'''for''' contatore:=valore_iniziale '''downto''' valore_finale '''do'''
'''for''' contatore:=valore_iniziale '''downto''' valore_finale '''do'''
begin
begin
Riga 117: Riga 117:
end;
end;


Facciamo un esempio:scrivamo un programma che calcoli la somma dei primi n numeri naturali.
Facciamo un esempio: scrivamo un programma che calcoli la somma dei primi n numeri naturali.
Il programma deve:
Il programma deve:
*Leggere n;
*leggere n;
*Con un ciclo for,sommare tutti i numeri da 1 a n;
*tramite un ciclo for, sommare tutti i numeri da 1 a n;
*Esporre il risultato.
*esporre il risultato.


program sommatoria;
program sommatoria;
Riga 133: Riga 133:
s:=s+i;
s:=s+i;
end;
end;
writeln('La somma dei primi n è',s);
writeln('La somma dei primi n è ',s);
readln;
readln;
end.
end.


Vediamo il programma riga per riga:
Analizziamo il programma riga per riga:
*Dichiarazione del programma;
*dichiarazione del programma;
*Dichiarazione delle variabili:i è la variabile contatore,n fa da valore finale del ciclo for,q è di volta in volta il quadrato di i,s è la somma dei quadrati dei numeri fino a n.
*dichiarazione delle variabili: i è la variabile contatore, n funge da valore finale del ciclo for, q è di volta in volta il quadrato di i mentre s è la somma dei numeri naturali fino a n.
*Inizio del programma
*inizio del programma
*La somma è inizialmente uguale a 0;
*la somma &egrave; inizialmente uguale a 0;
*Messaggio di testo;
*messaggio di testo;
*Il programma legge n;
*il programma legge n;
*Il ciclo for:''per i uguale a 1 fino a che i non sia uguale a n,esegue il gruppo d'istruzioni:''
*il ciclo for: ''per i uguale a 1 fino a che i non sia uguale a n,esegue il gruppo d'istruzioni:''
*Inizio del ciclo;
*inizio del ciclo;
*Alla variabile s viene assegnata la somma del valore di s+i;prima del ciclo s era uguale a 0;
*alla variabile s viene assegnata la somma del valore di s+i; prima del ciclo s era uguale a 0, quindi s:=1;
*fine del ciclo: se i è diverso da n, il ciclo viene riavviato; altrimenti si prosegue all'istruzione successiva. Automaticamente alla fine del ciclo i viene incrementato di 1.
quindi s:=1;
*Fine del ciclo;se i è diverso da n,il ciclo viene riavviato,altrimenti,si prosegue all'istruzione successiva.Automaticamente,alla fine del ciclo,i viene incrementato di 1.


Vediamo cosa sarebbe successo se n fosse stato,ad esempio,50:
Vediamo cosa sarebbe successo se n fosse stato, ad esempio, 50:
*i:=2,diverso da 50,quindi il ciclo continua;
*i:=2, diverso da 50, quindi il ciclo continua;
*s:=s+i,cioè s:=1+2;infatti la variabile s aveva valore 1,alla fine della prima fase del ciclo.
*s:=s+i, cioè s:=1+2; infatti la variabile s aveva valore 1 alla fine della prima fase del ciclo.
*Reinizia il ciclo;i:=3,diverso da 50,quindi il ciclo continua;
*reinizia il ciclo; i:=3,diverso da 50,quindi il ciclo continua;
*s:=s+1;cioè s:=3+3;
*s:=s+1;cioè s:=3+3;
*E così via,fino a quando i sia diverso da 50.
*e così via,fino a quando i sia diverso da 50.


== While do ==
== While do ==
Questo ciclo corrisponde ad una struttura decisionale a condizione in testa.
Questo ciclo corrisponde ad una struttura decisionale a condizione in testa.


La sua sintassi e':
La sua sintassi &egrave;:


'''while''' condizione '''do'''
'''while''' condizione '''do'''
Riga 170: Riga 169:
'''end''';
'''end''';


Ovvero:'''mentre'''(while) c'è una certa condizione '''fai'''(do) le istruzioni all'interno del ciclo.
Ovvero: '''mentre'''(while) una determinata condizione &egrave; vera '''esegui'''(do) le istruzioni all'interno del ciclo.
Fino a quando la condizione è vera,il ciclo viene eseguito.
Fino a quando la condizione è vera, il ciclo viene eseguito.
Tra '''begin''' ed '''end''' vanno inserite le istruzioni che cambiano il valore di un qualche cosa affinché la condizione si avveri. È importante fare attenzione che ci sia all'interno del ciclo qualcosa che modifichi il valore della condizione, altrimenti il ciclo si ripete all'infinito e il programma non giungerà mai alle righe che seguono l'istruzione '''end'''. Questo è un comune errore che con un po' di attenzione si può evitare.Se vi è una sola istruzione, '''begin''' e '''end''' possono essere omessi.
Tra '''begin''' ed '''end''' vanno inserite le istruzioni che cambiano in qualche modo il valore di verit&agrave; della condizione. Questo &egrave; molto importante perch&eacute; altrimenti il ciclo si ripeterebbe all'infinito e il programma non riuscirebbe mai a giungere alle righe che seguono l'istruzione '''end'''. Questo &egrave; un comune errore che con un po' di attenzione pu&ograve; essere evitato. Se vi è una sola istruzione '''begin''' e '''end''' possono essere omessi.


Ad esempio
Ad esempio
Riga 184: Riga 183:
In questo esempio viene eseguito quanto scritto all'interno del ciclo finché viene verificata la condizione, cioè ad x viene sommato 1 fino a che il suo valore non sia uguale a 5,e quindi la condizione iniziale del ciclo diventi falsa.
In questo esempio viene eseguito quanto scritto all'interno del ciclo finché viene verificata la condizione, cioè ad x viene sommato 1 fino a che il suo valore non sia uguale a 5,e quindi la condizione iniziale del ciclo diventi falsa.


== Repeat Until ==
==Repeat Until==
Dopo aver parlato di If...Then...Else, e dei cicli For, While Do, chiudiamo il discorso sui cicli con Repeat...Until.
Dopo aver parlato di If...Then, Else, e dei cicli For e While Do, chiudiamo il discorso sui cicli con Repeat...Until.


La sua sintassi e':
La sua sintassi e':
Riga 198: Riga 197:
...
...
In sostanza questo ciclo ripete le istruzioni comprese tra Repeat ed Until(dall'inglese,''finché'') fino al verificarsi della condizione espressa, detta a volte anche condizione di uscita. Anche in questo caso occorre porre attenzione al fatto che la condizione di uscita deve diventare vera in qualche modo, altrimenti finiamo in un loop infinito perdendo il controllo del programma.
In sostanza questo ciclo ripete le istruzioni comprese tra Repeat ed Until (dall'inglese,''finché'') fino al verificarsi della condizione espressa, detta anche condizione di uscita. Anche in questo caso occorre porre attenzione al fatto che la condizione di uscita diventi vera in qualche modo, altrimenti finiamo in un loop infinito perdendo il controllo del programma.


Ad esempio
Ad esempio:


...
...
Riga 208: Riga 207:
until x=5;
until x=5;


In questo caso,x viene sommato a 1 fino a chè il suo valore sia diverso da 5;quando x=5,si esce dal ciclo.
In questo caso x viene sommato a 1 fino a che il suo valore non sia diverso da 5; quando x=5 si esce dal ciclo.


== For, While, Repeat Until==
== For, While, Repeat Until==
Nel caso del ciclo '''For''' il numero di cicli eseguiti è noto, poiché il contattore parte da un elemento iniziale ed arriva fino all'elemento finale. Nel caso di '''While''' e di '''Repeat Until''' il numero di volte che viene ripetuto il ciclo generalmente non è noto a priori, in quanto dipende dal cambiamento che subisce la variabile che controlla la condizione.
Nel caso del ciclo '''For''' il numero di cicli eseguiti è noto, poiché il contatore parte da un elemento iniziale ed arriva fino all'elemento finale. Nel caso di '''While''' e di '''Repeat Until''' il numero di volte che viene ripetuto il ciclo generalmente non è noto a priori, in quanto dipende dal cambiamento che subisce la variabile che controlla la condizione.
C'è da notare che le istruzioni del ciclo '''Repeat Until''' verranno eseguite almeno una volta, poiché la condizione viene verificata alla fine, dopo il codice del ciclo. Mentre la condizione di ingresso di un ciclo '''while''' essendo testata prima di eseguire il codice associato al ciclo, potrebbe se questa risulta falsa non fare nulla e riprendere dalle istruzioni che si trovano dopo il ciclo; è importante quindi verificare con attenzione se il flusso di esecuzione del programma entra almeno qualche volta nel codice del ciclo, controllando se la condizione di ingresso risulta vera almeno in qualche caso.
&Egrave; da notare che le istruzioni del ciclo '''Repeat Until''' verranno eseguite almeno una volta poich&eacute; la condizione viene verificata alla fine, dopo il codice del ciclo; un ciclo '''While''', essendo la sua condizione testata prima dell'esecuzione del codice associato al ciclo, potrebbe, se questa risulta falsa, non fare nulla e riprendere dalle istruzioni che si trovano dopo il ciclo. Questo pu&ograve; risultare utile in particolari casi mentre in altri pu&ograve; essere causa di bug.


[[Categoria:Programmare in Pascal|Istruzioni di controllo]]
[[Categoria:Programmare in Pascal|Istruzioni di controllo]]

Versione delle 17:01, 3 apr 2007

Template:Programmare in Pascal


If, then, else

In qualcuno degli esempi precedenti si è vista la sintassi con if,then e else: vediamo in cosa consiste. Nella pratica, questo costrutto consente la scelta fra due alternative: se (if) una certa condizione è vera allora (then) il programma esegue una certa istruzione, altrimenti (else) ne esegue un'altra:

if condizione  then istruzione
       else istruzione;

che come abbiamo già visto permette la scelta fra un caso vero e un caso falso e in base a questo esegue il contenuto del then o dell'else; tuttavia a volte il ramo in else non è strettamente utile o addirittura non serve.

Quando le istruzioni che seguono il then o l'else sono più di una esse devono essere delimitate da istruzioni begin e end:

if condizione then
      begin
         istruzione 1;
         istruzione 2;
         ...
         istruzione n
      end
   else
      begin
         istruzione 1;
         istruzione 2;
         ...
         istruzione n
       end;

Si noti come le istruzioni che precedono end o else non debbano essere seguite da punto e virgola

Facciamo un esempio pratico.
Si vuole calcolare la radice quadrata di un numero: ciò è possibile nell'insieme dei numeri reali solo se il valore in ingresso è positivo. Il programma deve perciò:

  • acquisire il numero
  • eseguire una selezione binaria: se il numero è positivo,allora ne calcola la radice quadrata e espone il risultato;altrimenti scrive un messaggio di errore;
program radice_quadrata;
var n,r:real;
  begin
    writeln('Inserisci un numero positivo');
    readln(n);
    if n>=0 then
      begin
       r:=sqrt(n);
       writeln('La radice quadrata del numero inserito è ',r:8:3);
      end
    else writeln('La radice di un numero negativo non può essere espressa con numeri reali');
    readln;
   end.

Case...of, else

Questo metodo permette di fare scelte più complesse. La sintassi è:

case selettore of
     valore 1 : begin 
                    istruzioni;
                    end;
     valore 2 : begin
                    istruzioni;
                    end;
     ... 
     
     valore n : begin
                    istruzioni
                    end; 
  
 else: begin
             istruzioni;
             end;
 end;

Con il costrutto case, il valore della variabile selettore viene confrontato con il valore di ogni singolo caso; quando viene trovato un valore che eguagli il selettore vengono eseguite le istruzioni relative al blocco in questione; poi il controllo passa alla prima istruzione dopo il costrutto case. Se nessun valore soddisfa il selettore viene eseguita l'ultimo blocco di istruzioni individuato dalla parola chiave else. Se la parte con else viene omessa e il selettore non è compreso tra nessuno dei casi in elenco, si passa anche in questo caso alla prima istruzione dopo il costrutto case.
Quando c'è solo un istruzione che segue un certo caso si possono omettere begin e end.
Occorre fare attenzione che il costrutto case termina con un end.

Facciamo un esempio del costrutto case:

case Contatore of
  1, 2, 50, 210: writeln(contatore);
  30, 60..80 : begin
                 writeln(variabile); 
               end;
end; 

alcune considerazioni sull'esempio proposto:

  • è stata omesso il blocco facoltativo else
  • sono state scritte delle liste di possibili casi
  • è stato usato un range di valori x..y; al terzo rigo,60..80 indica tutti i valori compresi tra 60 e 80 (inclusi).

Strutture Iterative

In Pascal abbiamo diversi tipi di strutture iterative (in genere vengono detti "cicli"):

For

Questa struttura ci permette di ripetere una determinata serie di istruzioni per un numero finito di volte. La sua sintassi è:

for Contatore:=valore_iniziale to valore_finale do
     begin
       istruzione 1;
       istruzione 2;
       ...
       istruzione n;
     end;


Nella pratica questo costrutto consente la ripetizione di un certo gruppo di istruzioni fino a quando la variabile contatore raggiunge un certo valore: per(for) contatore:=valore_iniziale fino a(to) valore_finale esegui(do) un blocco d'istruzioni.

Per Contatore s'intende una variabile (di solito vengono usate le lettere I,L,M,N,J,K) che da un valore iniziale cresce di un certo valore ogni ciclo d'istruzioni fino a che non raggiunge il valore finale, che rappresenta il valore per il quale il ciclo terminerà.

L'iterazione può anche procedere in modo che la variabile contatore decresca a ogni ciclo; in questo caso la sintassi è:

for contatore:=valore_iniziale downto valore_finale do
    begin
      istruzione 1;
      istruzione 2;
      ...
      istruzione n;
    end;

Facciamo un esempio: scrivamo un programma che calcoli la somma dei primi n numeri naturali. Il programma deve:

  • leggere n;
  • tramite un ciclo for, sommare tutti i numeri da 1 a n;
  • esporre il risultato.
program sommatoria;
var i,n,s:integer;
 begin
   s:=0;
   writeln('Inserisci n');
   readln(n);
    for i:=1 to n do
     begin
      s:=s+i;
     end;
   writeln('La somma dei primi n è ',s);
   readln;
 end.

Analizziamo il programma riga per riga:

  • dichiarazione del programma;
  • dichiarazione delle variabili: i è la variabile contatore, n funge da valore finale del ciclo for, q è di volta in volta il quadrato di i mentre s è la somma dei numeri naturali fino a n.
  • inizio del programma
  • la somma è inizialmente uguale a 0;
  • messaggio di testo;
  • il programma legge n;
  • il ciclo for: per i uguale a 1 fino a che i non sia uguale a n,esegue il gruppo d'istruzioni:
  • inizio del ciclo;
  • alla variabile s viene assegnata la somma del valore di s+i; prima del ciclo s era uguale a 0, quindi s:=1;
  • fine del ciclo: se i è diverso da n, il ciclo viene riavviato; altrimenti si prosegue all'istruzione successiva. Automaticamente alla fine del ciclo i viene incrementato di 1.

Vediamo cosa sarebbe successo se n fosse stato, ad esempio, 50:

  • i:=2, diverso da 50, quindi il ciclo continua;
  • s:=s+i, cioè s:=1+2; infatti la variabile s aveva valore 1 alla fine della prima fase del ciclo.
  • reinizia il ciclo; i:=3,diverso da 50,quindi il ciclo continua;
  • s:=s+1;cioè s:=3+3;
  • e così via,fino a quando i sia diverso da 50.

While do

Questo ciclo corrisponde ad una struttura decisionale a condizione in testa.

La sua sintassi è:

 while condizione do
 begin
      istruzione 1;
      istruzione 2;
      ...
      istruzione n;
 end;

Ovvero: mentre(while) una determinata condizione è vera esegui(do) le istruzioni all'interno del ciclo. Fino a quando la condizione è vera, il ciclo viene eseguito. Tra begin ed end vanno inserite le istruzioni che cambiano in qualche modo il valore di verità della condizione. Questo è molto importante perché altrimenti il ciclo si ripeterebbe all'infinito e il programma non riuscirebbe mai a giungere alle righe che seguono l'istruzione end. Questo è un comune errore che con un po' di attenzione può essere evitato. Se vi è una sola istruzione begin e end possono essere omessi.

Ad esempio

 ...
 x:=1;
 while x<>5 do
   x:=x+1;
 ...

In questo esempio viene eseguito quanto scritto all'interno del ciclo finché viene verificata la condizione, cioè ad x viene sommato 1 fino a che il suo valore non sia uguale a 5,e quindi la condizione iniziale del ciclo diventi falsa.

Repeat Until

Dopo aver parlato di If...Then, Else, e dei cicli For e While Do, chiudiamo il discorso sui cicli con Repeat...Until.

La sua sintassi e':

 ... 
 Repeat 
   istruzione 1; 
   istruzione 2;
   ... 
   istruzione n; 
 Until condizione; 
 ...  

In sostanza questo ciclo ripete le istruzioni comprese tra Repeat ed Until (dall'inglese,finché) fino al verificarsi della condizione espressa, detta anche condizione di uscita. Anche in questo caso occorre porre attenzione al fatto che la condizione di uscita diventi vera in qualche modo, altrimenti finiamo in un loop infinito perdendo il controllo del programma.

Ad esempio:

...
x:=1;
repeat
x:=x+1;
until x=5;

In questo caso x viene sommato a 1 fino a che il suo valore non sia diverso da 5; quando x=5 si esce dal ciclo.

For, While, Repeat Until

Nel caso del ciclo For il numero di cicli eseguiti è noto, poiché il contatore parte da un elemento iniziale ed arriva fino all'elemento finale. Nel caso di While e di Repeat Until il numero di volte che viene ripetuto il ciclo generalmente non è noto a priori, in quanto dipende dal cambiamento che subisce la variabile che controlla la condizione. È da notare che le istruzioni del ciclo Repeat Until verranno eseguite almeno una volta poiché la condizione viene verificata alla fine, dopo il codice del ciclo; un ciclo While, essendo la sua condizione testata prima dell'esecuzione del codice associato al ciclo, potrebbe, se questa risulta falsa, non fare nulla e riprendere dalle istruzioni che si trovano dopo il ciclo. Questo può risultare utile in particolari casi mentre in altri può essere causa di bug.