Pascal/Istruzioni di controllo: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 151.52.59.148 (discussione), riportata alla versione precedente di Hippias
Etichetta: Rollback
m Update syntaxhighlight tags - remove use of deprecated <source> tags
Riga 14:
Quando le istruzioni che seguono il ''then'' o l'''else'' sono più di una esse devono essere delimitate da istruzioni ''begin'' e ''end'' (sono istruzioni composte):
 
<sourcesyntaxhighlight lang=pascal>
if condizione then
begin
Riga 29:
istruzione n
end;
</syntaxhighlight>
</source>
 
Si noti come le istruzioni che precedono ''end'' ed ''else'' non debbano essere seguite da punto e virgola
Riga 38:
*eseguire una selezione binaria: ''se'' il numero è positivo,''allora'' ne calcola la radice quadrata e espone il risultato;''altrimenti'' stampa un messaggio di errore;
 
<sourcesyntaxhighlight lang=pascal>
program radice_quadrata;
var n,r:real;
Riga 53:
readln; (* attenzione: questo readln non fa parte del blocco else! *)
end.
</syntaxhighlight>
</source>
 
=== Selezione multipla ===
Riga 59:
Con l'uso del costrutto <code>case... of</code> è possibile eseguire selezioni più complesse. La sintassi è:
 
<sourcesyntaxhighlight lang=pascal>
case espressione of
valore 1 : begin
Riga 77:
end;
end;
</syntaxhighlight>
</source>
 
Con il costrutto ''case'', il valore dell'espressione in testa viene confrontato con il valore di ogni singolo caso; quando viene trovato un valore che soddisfa le condizioni sul selettore vengono eseguite le istruzioni relative al blocco in questione; poi il controllo passa alla prima istruzione dopo il costrutto ''case''.
Riga 87:
Facciamo un esempio del costrutto case:
 
<sourcesyntaxhighlight lang=pascal>
case contatore of
1, 2, 50, 210: writeln(contatore);
Riga 94:
end;
end;
</syntaxhighlight>
</source>
 
Ecco di seguito alcune considerazioni sull'esempio proposto:
Riga 109:
Questa struttura ci permette di ripetere una determinata serie di istruzioni per un numero finito di volte modificando man mano il valore di una variabile. La sua sintassi è:
 
<sourcesyntaxhighlight lang=pascal>
for Contatore:=valore_iniziale to valore_finale do
begin
Riga 117:
istruzione n;
end;
</syntaxhighlight>
</source>
 
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 racchiuso tra ''begin'' ed ''end''.
Riga 125:
L'iterazione può anche procedere in modo che la variabile contatore decresca a ogni ciclo; in questo caso la sintassi è:
 
<sourcesyntaxhighlight lang=pascal>
for Contatore:=valore_iniziale downto valore_finale do
begin
Riga 133:
istruzione n;
end;
</syntaxhighlight>
</source>
 
Facciamo un esempio: implementiamo un programma che calcoli la somma dei primi n numeri naturali usando un ciclo <code>for</code> (senza usare la nota formula <math>\frac{n(n + 1)}{2}</math>).<br/>
Riga 141:
*esporre il risultato.
 
<sourcesyntaxhighlight lang=pascal>
program sommatoria;
var i,n,s:integer;
Riga 153:
readln;
end.
</syntaxhighlight>
</source>
 
Analizziamo il programma riga per riga:
Riga 179:
La sua sintassi è:
 
<sourcesyntaxhighlight lang=pascal>
while condizione do
begin
Riga 187:
istruzione n;
end;
</syntaxhighlight>
</source>
 
Ovvero: '''mentre''' (''while'') una determinata condizione è vera '''esegui''' (''do'') le istruzioni all'interno del ciclo.
Riga 195:
Ad esempio:
 
<sourcesyntaxhighlight lang=pascal>
...
x:=1;
Riga 201:
x:=x+1;
...
</syntaxhighlight>
</source>
 
In questo esempio viene eseguito quanto indicato 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.
Riga 211:
La sua sintassi e':
 
<sourcesyntaxhighlight lang=pascal>
repeat
begin
Riga 220:
end;
until condizione;
</syntaxhighlight>
</source>
 
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.
Riga 226:
Ad esempio:
 
<sourcesyntaxhighlight lang=pascal>
x:=1;
repeat
x:=x+1;
until x=5;
</syntaxhighlight>
</source>
 
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.
Riga 244:
* Scrivere un programma che stampi la tabellina del numero immesso dall'utente
{{cassetto|titolo=Soluzione proposta|testo=
<sourcesyntaxhighlight lang=pascal>
program tabelline;
uses crt;
Riga 258:
readln;
end.
</syntaxhighlight>
</source>
}}
* Scrivere un programma "indovina il numero". Il programma deve chiedere all'utente un numero, scegliere casualmente un numero tra 1 e il numero fornito. L'utente dovrà quindi indovinare il numero pensato dal computer: ad ogni tentativo, il computer deve dire se il tentativo è maggiore o minore del numero pensato.
{{cassetto|titolo=Soluzione proposta|testo=
<sourcesyntaxhighlight lang=pascal>
program indovina;
var max, x, t: integer;
Riga 281:
readln;
end.
</syntaxhighlight>
</source>
}}
[[Image:Monte-Carlo method pi.svg|thumb|right|150px|Rappresentazione grafica del metodo Monte Carlo applicato al calcolo di <math>\pi</math>]]
Riga 287:
{{vedi pedia|Metodo Monte Carlo}}
{{cassetto|titolo=Soluzione proposta|testo=
<sourcesyntaxhighlight lang=pascal>
{CALCOLA il valore di pigreco usando il metodo di montecarlo}
program pigreco;
Riga 314:
readln;
end.
</syntaxhighlight>
</source>
}}
* Scrivere un programma per determinare il valore di un radicale tramite tentavi successivi, in questo modo: il programma chiede con quale indice si vuole lavorare; successivamente, chiederà all'utente un'approssimazione della radice, e mostrerà la potenza del numero immesso secondo l'indice. In questo modo, in base al valore della potenza, l'utente potrà ritentare proponendo un numero maggiore o minore di quello immesso. Il programma termina quando l'utente immette 0.
Riga 321:
 
{{cassetto|titolo=Soluzione proposta|testo=
<sourcesyntaxhighlight lang=pascal>
program radici;
uses crt;
Riga 344:
end.
 
</syntaxhighlight>
</source>
}}
* Scrivere una funziona che restituisca la posizione di un carattere chiesto all'utente nella stringa chiesta anch'essa all'utente. La posizione deve essere quella della prima occorrenza trovata.
{{cassetto|titolo=Soluzione proposta|testo=
<sourcesyntaxhighlight lang=pascal>
program strpos;
uses crt;
Riga 374:
readln;
end.
</syntaxhighlight>
</source>
}}