Pascal/Metodo top-down, procedure e funzioni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Ramac (discussione | contributi)
parametri
Ramac (discussione | contributi)
formattazione + variabili locali - globali + funzioni
Riga 31:
 
In questo semplice caso la procedura Benvenuto chiede un input all'utente e stampa un messaggio di benvenuto.
<br/>La comodità di questo semplice spezzone sta nel fatto che, durante l'esecuzione del programma vero e proprio, in qualsiasi punto è possibile eseguire la procedura Benvenuto quante volte si vuole riducendo così la mole di codice da scrivere e anche facilitando, ad esempio, la correzione di eventuali errori o la revisione del codice.<br/>Questo metodo è ovviamente comodo nel caso di programmi molto lunghi o di sottoproblemi che si ripresentino molte volte nel corso del programma.
 
Le variabili usate nella proedura e dichiarate quindi nella sezione di dichiarazione della procedura stessa (nel nostro esempio la variabile nome) sono chiamate variabili '''locali''', in quanto non è possibile richiamarle se non dalla procedura nelle quali sono dichiarate. Nel programma vero e proprio e nelle procedure le variabili locali delle altre eventuali procedure non sono quindi utilizzabili.<br/>Sono chiamate varibili '''globali''' le variabili dichiarate all'intestazione del programma principale, in quanto possono essere richiamate e utilizzate sia in ambito del programma principale stesso sia in ambito locale delle procedure.<br/>
Si noti che nel caso che due variabili con lo stesso nome sono dichiarate sia in ambito globale che in ambito locale, nelle procedure il compilatore prende in considerazione la variabile locale. Il consiglio è comunque quello di dare nomi sempre diversi alle variabili, evitando sovrapposizioni di qualsiasi genere. Un esempio potrebbe rendere il tutto più chiaro:
program Variabili;
var principale:integer;
procedure proc1;
var locale1:integer;
begin
(* da qui sono accessibili solo le variabili ''locale1'' e ''principale''*)
end
var locale2:integer;
begin
(* da qui sono accessibili solo le variabili ''locale2'' e ''principale''*)
end
(* qui incomincia il programma vero *)
begin
(* da qui è accessibile solo la variabile ''principale''*)
end
=== Procedure con argomenti ===
Può risultare utile, in molti casi, passare alla procedura dei valori che specifichino meglio l'operazione da svolgere o che ne rendano l'uso più utile alle diverse situazioni. Nell'esempio precedente, ad esempio, sarebbe meglio poter specificare ogni volta il messaggio stampato dalla procedura Benvenuto in modo tale da renderla utilizzabile in più situazioni. Vediamo l'esempio con l'uso delle variabili:
Line 58 ⟶ 75:
Salutami allore Luisa
 
I parametri sono ovviamente variabili locali della procedura.
==== Passaggio di parametri per valore e per riferimento ====
Introdotto l'uso dei parametri, è necessario però fare una distinzione molto importante tra i due modi possibili di passare una variabile:
Line 85 ⟶ 103:
end.
Dopo l'esecuzione del programma, avremo quindi la seguente situazione:
*il valore di z1 sarà rimasto lo stesso di quando la procedura è stata invocata, in quanto il passaggio del parametro x è avvenuto per valore. Al posto di z1 si poteva passare alla procedura anche un'espressione, come <code>3 + 4</code> o anche <code>z1 + 5</code>.
*il valore di z2 dopo la chiamata della procedura Riferimento sarà pari a 24, ossia 12 * 2, in quanto il parametro x è stato passato oper riferimento e, quindi, al momento dell'istruzione <code>x := x*2</code> non varia solo la variabile x stessa all'interno della procedura ma anche il valore della variabile z2.
L'output del programma sarà quindi:
Il valore di X è 10
Line 93 ⟶ 111:
Il valore di z2 è 24
 
== Funzioni ==
<!--==== Scope delle variabili ====-->
Il concetto di funzioni in programmazione è strettamente legato al [[w:Funzione (matematica)|concetto di funzione matematica]]. In Pascal possiamo pensare ad una funzione come ad una procedura che restituisce un valore: le funzioni, come le procedure, devono essere dichiarate prima del programma principale e possono disporre di variabili locali e di parametri.
<br/>La loro sintassi è tuttavia leggermente diversa:
'''function''' nome_della_funzione(parametri):tipo_di_dato_restituito_dalla_funzione;
dichiarazioni
'''begin'''
istruzioni;
'''end'''
Per riferirsi al valore della funzione si deve fare riferimento al nome della funzione stessa. Creiamo ad esempio una funzione che restituisca il valore assoluto di un numero:
function Assoluto (x:real):real;
begin
if x<0 then
Assoluto := -x
else
Assoluto := x;
end;
Analizziamo il listato riga per riga:
#la prima riga è la dichiarazione della funzione, che richiede un parametro real, ''x'', e che restituisce un valore real
#inizio della funzione (non ci sono variabili da dichiarare in questo caso perché la funzione è molto semplice)
#se x è minore di zero allora
#restituisci come valore l'opposto di x
#altrimenti (x maggiore o uguale a 0)
#restituisci il valore di x
#fine della funzione
In questo modo, passando alla funzione 3, Assoluto restituisce 3, mentre se si passa -12 la funzione restituisce 12. &Egrave; possibile in qualsiasi punto del programma in cui la funzione è stata inserita ricorrere ad essa usando la seguente notazione:
Assoluto(''n'');
che funge da espressione in quanto restituisce un valore.
[[Categoria:Programmare in Pascal|Metodo top-down, procedure e funzioni]]