SOTTOPROGRAMMI IN TPASCAL METODO TOP DOWN - prof. V. Riboldi - L’intero programma viene suddiviso in un blocco principale, detto programma principale o main program, e in ulteriori blocchi, i sottoprogrammi, sviluppati separatamente e richiamabili, mediante il nome ad essi assegnato, dal programma principale o da un altro sottoprogramma - prof. V. Riboldi - Una buona organizzazione del programma in sottoprogrammi consente una struttura gerarchica e modulare facilita la comprensione la verifica la documentazione pertanto agevola la questione della complessità - prof. V. Riboldi - Ogni sottoprogramma è identificato da un nome a cui un’istruzione del programma principale, detta chiamata, fa riferimento in ogni punto del programma in cui è richiesta l’esecuzione del sottoprogramma stesso. M D A B E F C Il programma principale M può chiamare un sottoprogramma A, che a sua volta chiama un sottoprogramma B, che a sua volta utilizza un sottoprogramma C …… Il calcolatore ogni volta che, durante l’elaborazione del programma principale, incontra una chiamata, sospende l’elaborazione del main program ed esegue le istruzioni del sottoprogramma stesso: al termine dell’esecuzione, il controllo torna all’istruzione del main program successiva a quella di chiamata - prof. V. Riboldi - In generale viene attuato uno scambio di dati tra sottoprogramma e programma chiamante e ciò avviene per mezzo dei parametri: Parametri formali appaiono nella dichiarazione di un sottoprogramma Parametri attuali appaiono nelle chiamate del sottoprogramma I parametri formali, al momento dell’esecuzione del sottoprogramma sono sostituiti dai corrispondenti parametri attuali indicati nell’istruzione di chiamata I parametri formali e attuali devono essere congrui tra loro in numero, tipo, ordine - prof. V. Riboldi - In un sottoprogramma possono essere presenti variabili di tre classi diverse: Parametri formali Variabili locali • dichiarate nel sottoprogramma • usate solo all’interno del sottoprogramma • accessibili solo al sottoprogramma in cui sono dichiarate (visibilità locale) Variabili globali • dichiarate nel programma principale (P.P.) • usate sia dal P.P. che dal sottoprogramma • accessibili da qualsiasi parte del programma (visibilità globale) - prof. V. Riboldi - esempio M A B C Ogni oggetto dichiarato nel programma principale M è visibile anche nei sottoprogrammi A, B, C Ogni oggetto definito in B è visibile anche in C Gli oggetti definiti in A e C sono visibili solo nei rispettivi moduli - prof. V. Riboldi - I sottoprogrammi in TP possono essere di due tipi: FUNZIONI • restituiscono al programma chiamante un risultato individuato tramite una notazione funzionale • non modificano il valore dei parametri passati PROCEDURE • restituiscono, solo attraverso parametri, anche più di un risultato al programma chiamante • possono modificare il valore dei parametri passati Sia le procedure che le funzioni devono essere dichiarate dopo le variabili, prima della sezione delle istruzioni - prof. V. Riboldi - LE FUNZIONI DICHIARAZIONE intestazione FUNCTION nome_funz(x:tipo_parametro):tipo risultato parte dichiarativa contiene la definizione delle variabili locali istruzioni deve contenere almeno una istruzione di assegnazione nome_funz:=<<espressione>> CHIAMATA la funzione viene invocata dal programma attraverso il suo nome, assegnato ad una variabile, seguito dai parametri attuali racchiusi in parentesi - prof. V. Riboldi - esempio Program…… var X,Y,Z:integer; function MASSIMO (I,J:integer):integer; begin if I > J then MASSIMO:=I else MASSIMO:=J end; begin …… X:=Y+MASSIMO(Y,Z) ….. end. - prof. V. Riboldi - LE PROCEDURE DICHIARAZIONE intestazione PROCEDURE nome_proc (elenco parametri formali con esplicitazione del tipo) parte dichiarativa contiene la definizione delle variabili locali istruzioni CHIAMATA la procedure viene invocata dal programma attraverso il suo nome, seguito dai parametri attuali racchiusi in parentesi - prof. V. Riboldi - MODALITA’ TRASFERIMENTO DATI PASSAGGIO PER VALORE il parametro formale e quello attuale occupano due aree di memoria diverse PROCEDURE nome_proc (PARAMETRO_VALORE: tipo) PASSAGGIO PER INDIRIZZO il parametro formale e quello attuale occupano la stessa area di memoria PROCEDURE nome_proc (var PARAMETRO_VARIABILE: tipo) - prof. V. Riboldi - Quando si vuole conservare nel P.P. il valore di una variabile, questa deve essere passata alla procedura mediante un parametro valore Quando si vuole che la procedura passi al P.P. il risultato dell’elaborazione, la variabile deve essere passata alla procedura mediante un parametro variabile Tra la lista dei parametri formali di una procedura e quella dei parametri attuali dell’istruzione di chiamata esiste una corrispondenza biunivoca: al primo, al secondo, …. parametro formale corrisponde il primo, il secondo, …. parametro attuale e viceversa I parametri corrispondenti devono essere dichiarati dello stesso tipo - prof. V. Riboldi - valore indirizzo var A,B:integer; P.P. procedure TEST(X:integer; var Y:integer); begin X:=X+10; Y:=Y*10; end; A=5 B=2 TEST X=5 Y=2 X=15 Y=20 A=5 B=20 begin A:=5; B:=2; TEST(A,B); P.P. end - prof. V. Riboldi -