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

Contenuto cancellato Contenuto aggiunto
Ramac (discussione | contributi)
m sintassi colorata
Ramac (discussione | contributi)
m formattazione
Riga 1:
{{Pascal}}
Per [[w:Progettazione top-down e bottom-up|'''metodo top-down''']] si intende una suddivisione di un problema, di un [[w:algoritmo|algoritmo]] o di un procedimento in sottoproblemi più piccoli e più semplici da implementare nel linguaggio desiderato. <br/>Una delle comodità della scomposizione dei problemi in porzioni di codice è la loro riutilizzabilità: tramite il metodo top-down, infatti, il programmatore può definire blocchi di codice a cui è possibile fare riferimento durante il corso della programmazione.
 
In Pascal possiamo implementare soluzioni top-down tramite le '''procedure''' e le '''funzioni'''.
Riga 12:
'''end''';
Le diverse procedure del programma Pascal devono essere scritte prima del blocco del blocco begin...end che delimita il programma principale. Vediamo un esempio completo di un sottoproblema implementato in Pascal come, ad esempio, dare il benvenuto ad un utente, all'interno di un programma più lungo che ometteremo:
 
<source lang=pascal>
program Esempio;
Line 36 ⟶ 37:
end.
</source>
 
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.
<br/>Un esempio potrebbe rendere il tutto più chiaro:
 
<source lang=pascal>
program Variabili;
Line 66 ⟶ 71:
end.
</source>
 
=== 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. Questi valori sono detti '''argomenti''' o '''parametri''' 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:
 
<source lang=pascal>
program Esempio;
Line 91 ⟶ 98:
end.
</source>
 
In questo caso la procedura Benvenuto è stata chiamata due volte nel corso del programma ''passando'' ogni volta i due argomenti richiesti, che non sono altro che delle espressioni che verranno poi salvate nelle variabili ''domanda'' e ''risposta''. L'output delle due procedure sarà il seguente, nel caso l'input sia Luigi o Luisa:
Qual è il tuo nome? Luigi
Line 104 ⟶ 112:
*quando i valori sono passati per '''riferimento''' la variabile che funge da parametro si sostituisce momentanemente alla variabile passata nella chiamata della procedura, che verrà quindi modificata nel corso del programma. In questo caso il parametro deve essere indicato con la sintassi <code>'''var''' nome_var : tipo di dato;</code>
La differenza sarà forse più chiara con un esempio:
 
<source lang=pascal>
program Esempio;
Line 134 ⟶ 143:
end.
</source>
 
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>.
Line 144 ⟶ 154:
 
== Funzioni ==
Il concetto di [[w:funzione (informatica)|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;