Differenze tra le versioni di "Pascal/Istruzioni di controllo"

m
Update syntaxhighlight tags - remove use of deprecated <source> tags
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)
 
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
istruzione n
end;
</syntaxhighlight>
</source>
 
Si noti come le istruzioni che precedono ''end'' ed ''else'' non debbano essere seguite da punto e virgola
*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;
readln; (* attenzione: questo readln non fa parte del blocco else! *)
end.
</syntaxhighlight>
</source>
 
=== Selezione multipla ===
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
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''.
Facciamo un esempio del costrutto case:
 
<sourcesyntaxhighlight lang=pascal>
case contatore of
1, 2, 50, 210: writeln(contatore);
end;
end;
</syntaxhighlight>
</source>
 
Ecco di seguito alcune considerazioni sull'esempio proposto:
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
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''.
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
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/>
*esporre il risultato.
 
<sourcesyntaxhighlight lang=pascal>
program sommatoria;
var i,n,s:integer;
readln;
end.
</syntaxhighlight>
</source>
 
Analizziamo il programma riga per riga:
La sua sintassi è:
 
<sourcesyntaxhighlight lang=pascal>
while condizione do
begin
istruzione n;
end;
</syntaxhighlight>
</source>
 
Ovvero: '''mentre''' (''while'') una determinata condizione è vera '''esegui''' (''do'') le istruzioni all'interno del ciclo.
Ad esempio:
 
<sourcesyntaxhighlight lang=pascal>
...
x:=1;
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.
La sua sintassi e':
 
<sourcesyntaxhighlight lang=pascal>
repeat
begin
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.
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.
* Scrivere un programma che stampi la tabellina del numero immesso dall'utente
{{cassetto|titolo=Soluzione proposta|testo=
<sourcesyntaxhighlight lang=pascal>
program tabelline;
uses crt;
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;
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>]]
{{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;
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.
 
{{cassetto|titolo=Soluzione proposta|testo=
<sourcesyntaxhighlight lang=pascal>
program radici;
uses crt;
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;
readln;
end.
</syntaxhighlight>
</source>
}}
 
266

contributi