Pascal/Istruzioni di controllo: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Correzione errori comuni - Lista
Ramac (discussione | contributi)
punteggiatura e contenuto
Riga 2:
 
 
==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) c'è una certa condizione è vera '''allora''' (''then'') il programma esegue una certa istruzione;, '''altrimenti''' (''else'') ne esegue un'altra istruzione:
 
'''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''.; Spessotuttavia a volte il ramo in ''else'' non è strettamente utile o addirittura non serve.
 
Più precisamente,quandoQuando le istruzioneistruzioni che seguono il ''then'' o l'''else'' sono più di una, esse devono essere compresedelimitate trada istruzioni ''begin'' e ''end'';ciò vale anche per le istruzioni che seguono l'''else'':
'''if''' condizione '''then'''
''begin''
Riga 28:
''end'';
 
Si notanoti come a l'''end'' che segue le istruzioni dopoche ilprecedono ''thenend'' nono segue un punto e virgola;e che all'istruzione prima di ''endelse'' non è obbligatorio chedebbano siaessere seguitoseguite unda punto e virgola.
 
Facciamo un esempio pratico:si.<br/> Si vuole calcolare la radice quadrata di un numero: ci&ograve;ma se&egrave; ilpossibile numeronell'insieme dovessedei esserenumeri negativo,lareali radicesolo quadratase nonil puòvalore esserein espressaingresso con&egrave; i numeri realipositivo.
Il programma deve perciòperci&ograve;:
*Acquisireacquisire il numero
*eseguire una selezione binaria: ''Sese'' il numero è positivo,''allora'' ne calcola la radice quadrata e espone il risultato;''altrimenti'' scrive un messaggio di errore;
 
program radice_quadrata;
Riga 43:
begin
r:=sqrt(n);
writeln('La radice quadrata del numero inserito è&egrave; ',r:8:3);
end
else writeln('La radice di un numero negativo non può essere espressa con numeri reali');
Riga 49:
end.
 
==Case...of, else==
 
Questo metodo permette di fare scelte piùpi&ugrave; complesse;la. La sintassi è&egrave;:
'''case''' selettore '''of'''
Riga 71:
end;
 
Con il costrutto ''case'', il valore della variabile selettore viene confrontato con il valore di ogni singolo caso,; quando viene trovato un casovalore che eguagliaeguagli il selettore l'istruzionevengono cheeseguite seguele vieneistruzioni relative al blocco in eseguitaquestione; poi il controllo passa alla prima istruzione dopo il costrutto ''case''.
Se nessun casovalore soddisfa il selettore, viene eseguita l'ultimaultimo istruzione,blocco quelladi individuataistruzioni 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 contruttocostrutto ''case''.
<br/>Quando c'è solo un istruzione che segue un certo caso, si puòpossono omettere ''begin'' e ''end''. <br/>Occorre fare attenzione che il costrutto ''case'' termina con un ''end''.
 
Facciamo un esempio del costrutto case:
Line 82 ⟶ 83:
'''end;'''
alcune considerazioni sull'esempio proposto:
*abbiamo&egrave; stata omesso lail parteblocco facoltativafacoltativo '''else'''
*sono state scritte delle liste di possibili casi
*è stato usato un range di valori x..y; al terzo rigo,''60..80'' sta a indicareindica tutti i valori compresi o uguali 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 strutturastrutture 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'''
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 '''faiesegui'''(do) un gruppoblocco 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_finalevalore 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
Riga 117:
end;
 
Facciamo un esempio: scrivamo un programma che calcoli la somma dei primi n numeri naturali.
Il programma deve:
*Leggereleggere n;
*Contramite un ciclo for, sommare tutti i numeri da 1 a n;
*Esporreesporre il risultato.
 
program sommatoria;
Riga 133:
s:=s+i;
end;
writeln('La somma dei primi n è ',s);
readln;
end.
 
VediamoAnalizziamo il programma riga per riga:
*Dichiarazionedichiarazione del programma;
*Dichiarazionedichiarazione delle variabili: i è la variabile contatore, n fafunge da valore finale del ciclo for, q è di volta in volta il quadrato di i, mentre s è la somma dei quadratinumeri dei numerinaturali fino a n.
*Inizioinizio del programma
*Lala somma è&egrave; inizialmente uguale a 0;
*Messaggiomessaggio di testo;
*Ilil programma legge n;
*Ilil ciclo for: ''per i uguale a 1 fino a che i non sia uguale a n,esegue il gruppo d'istruzioni:''
*Inizioinizio del ciclo;
*Allaalla variabile s viene assegnata la somma del valore di s+i; prima del ciclo s era uguale a 0, quindi s:=1;
*Finefine 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:
*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.
*Reiniziareinizia il ciclo; i:=3,diverso da 50,quindi il ciclo continua;
*s:=s+1;cioè s:=3+3;
*Ee 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 e'&egrave;:
 
'''while''' condizione '''do'''
Line 170 ⟶ 169:
'''end''';
 
Ovvero: '''mentre'''(while) c'è una certadeterminata condizione &egrave; vera '''faiesegui'''(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 unverit&agrave; qualche cosa affinché ladella condizione. siQuesto avveri.&egrave; Èmolto importante fare attenzione che ci sia all'interno del ciclo qualcosa che modifichi il valore della condizione,perch&eacute; altrimenti il ciclo si ripeteripeterebbe all'infinito e il programma non giungeràriuscirebbe mai a giungere alle righe che seguono l'istruzione '''end'''. Questo è&egrave; un comune errore che con un po' di attenzione sipu&ograve; puòessere evitareevitato. Se vi è una sola istruzione, '''begin''' e '''end''' possono essere omessi.
 
Ad esempio
Line 184 ⟶ 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.
 
== 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':
Line 198 ⟶ 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 diventarediventi vera in qualche modo, altrimenti finiamo in un loop infinito perdendo il controllo del programma.
 
Ad esempio:
 
...
Line 208 ⟶ 207:
until x=5;
 
In questo caso, x viene sommato a 1 fino a chè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 contattorecontatore 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'è&Egrave; da notare che le istruzioni del ciclo '''Repeat Until''' verranno eseguite almeno una volta, poichépoich&eacute; la condizione viene verificata alla fine, dopo il codice del ciclo. Mentre la condizione di ingresso di; un ciclo '''whileWhile''', essendo la sua condizione testata prima didell'esecuzione eseguire ildel codice associato al ciclo, potrebbe, se questa risulta falsa, non fare nulla e riprendere dalle istruzioni che si trovano dopo il ciclo;. èQuesto importantepu&ograve; quindirisultare verificareutile conin attenzioneparticolari secasi ilmentre flussoin dialtri esecuzionepu&ograve; delessere programma entra almeno qualche volta nel codice del ciclo, controllando se la condizionecausa di ingresso risulta vera almeno in qualche casobug.
 
[[Categoria:Programmare in Pascal|Istruzioni di controllo]]