2. Metodologia Top-donw
• Scomposizione del problema in sottoproblemi
per:
– Semplificazione programma
– Riuso di codice riprodurre senza ripetere il codice
nello stesso programma
– Portabilità riuso stesso codice in altri programmi
Per gli ultimi due punti è necessario l’utilizzo di
scomposizione in sottoprogrammi con parametri.
4. Chiamata a sottoprogramma
• Avviene quando nel programma principale
si chiama una serie di istruzioni locate in
altro punto della codifica per assolvere ad
una funzione specifica del programma.
• All’atto della chiamata possono essere
scambiati fra programma principale e
sottoprogramma valori o variabili
6. Tipi di chiamate a sottoprogrammi
• Non parametriche ovvero non vi è
scambio dati diretto fra programma
chiamante e sottoprogramma ma solo dati
in comune fra tutte le unità di programma
• Parametriche sono passati dati in valore o
per variabile dal programma chiamante al
sottoprogramma
7. Tipologia di dati utilizzati
• Variabili e costanti globali visibili nel
programma e nei sottoprogrammi i Visual
Basic si dichiarano con Public
• Variabili locali visibili solo nei
sottoprogrammi ove sono dichiarati in
Visual Basic si dichiarano con Dim,
Private;
8. Tipologia di dati utilizzati
• Parametri formali variabili e costanti
simboliche utilizzate nei sottoprogrammi
per la scrittura di codice che sia
indipendente dal programma principale
contesto;
• Parametri attuali variabili e costanti globali
che si sostituiscono all’atto della chiamata
nel sottoprogramma ove sono utilizzati;
9. Tipologia di chiamate parametriche
• Esiste la chiamata a sottoprogramma per
indirizzo o referenza o riferimento quando viene
passata la variabile globale. In questo caso se
nel sottoprogramma cambia la variabili globale
la modifica si propaga nel programma principale
• Nella chiamata per valore si passa il valore che
in quel momento assume la variabile globale nel
programma principale senza alterare quindi la
variabile globale nel programma principale.
10. Tipologia di chiamate parametriche
• Esiste la chiamata a sottoprogramma per
indirizzo o referenza o riferimento quando viene
passata la variabile globale. In questo caso se
nel sottoprogramma cambia la variabili globale
la modifica si propaga nel programma principale
• Nella chiamata per valore si passa il valore che
in quel momento assume la variabile globale nel
programma principale senza alterare quindi la
variabile globale nel programma principale.
11. Chiamata per valore in Visual Basic
Analizziamo lo spezzone di codice
PUBLIC A,B,S AS INTEGER
PUBLIC SUB SOMMA (BYVAL X,Y AS INTEGER, BYVAL T AS
INTEGER)
T=X+Y
END SUB
SUB MAIN()
A=3
B=5
CALL SOMMA(4,5,S)
A=B-2
MSGBOX (STR(S))
END SUB
La parola Byval indica che il parametro sarà
passato per valore;
Dopo la chiamata che avviene con la parola
Call seguito dal nome del sottoprogramma
la variabile globale A cambia ma la variazione
non coinvolge il risultato del sottoprogramma S.
12. Chiamata per referenza in Visual
Basic
Analizziamo la stessa porzione di codice
PUBLIC A,B,S AS INTEGER
PUBLIC SUB SOMMA (BYREF X,Y AS INTEGER, BYREF T AS INTEGER)
X=1
T=X+Y
END SUB
SUB MAIN()
A=3
B=5
CALL SOMMA(A,B,S)
A=B-2
MSGBOX (STR(S))
END SUB
La parola chiave Byref indica il passaggio per
referenza ora inizialmente A e B valevano 3 e 5,
ma nel sottoprogramma a X viene assegnato
il valore 1 ed equivale ad assegnare alla viabile
A il valore 1 e quindi il risultato cambia perché
nel sottoprogramma è cambiato la variabile globale
associata a X.
13. Procedure e Funzioni
In tutti i linguaggi di programmazione esiste
la possibilità di dichiarare e usare
procedure ovvero sottoprogrammi che
eseguono dei compiti specifici ma possono
non restituire dei risultati e delle funzioni
ovvero particolari tipi di programma che
permettono di essere richiamati all’interno
di un istruzione di calcolo o assegnazione e
quindi restituiscono obbligatoriamente un
risultato.
14. Funzione in Visual Basic
Supponiamo di voler realizzare una funzione
in Visual Basic che mi permetta di calcolare il cubo di un numero.
Scriveremo un codice del tipo
PUBLIC N,R AS DOUBLE
PUBLIC FUNCTION CUBO(BYVAL X AS DOUBLE)
CUBO=X*X*X
END SUB
SUB MAIN()
N=VAL(INPUTBOX(“DAMMI IL NUMERO”)
R=CUBO(N)
MSGBOX(N)
END SUB
15. Considerazioni sulla codifica
• In entrambi i casi di procedure e funzioni si sono
dichiarati sottoprogrammi a livello di modulo e
quindi di validità generale
• Sub Main nel modulo di Visual Basic indica
l’inizio di un eventuale programma principale. Il
sottoprogramma o oggetto GUI che deve essere
avviato per primo può essere specificato nelle
proprietà dle progetto.
• Le strutture dati devono essere passate a Visual
Basic come tipo Variant a meno di non volerle
dichiarare ogni volta nell’intestazione delle
procedure o funzioni.
16. Esercitazione
Realizzare un programma che permetta di
calcolare la somma degli elementi di due
vettori di uguale dimensione, dopo aver
inserito gli elementi.
18. Dati del problema
Classe Nome Tipo Uso
Input A,B Vettori di 100 interi Globale
Input N intero Globale
Input X,Y Vettpri di 100 interi Parametri
Formali
Interno I Intero Locale
Input M intero Parametro
Formale
Output S intero Globale
Output T intero Parametro
Formale
19. Il programma principale
Questo è il programma principale
che richiama due volte la procedura
carica con variabili globali diverse.
La chiamata è per riferimento.
Le variabili inserite come argomento
della chiamata vanno nominate nell’ordine
in cui sono state dichiarate nelle
intestazioni delle procedure.
21. Considerazioni sulle procedure
• La carica serve per inserire gli elementi un
vettore X di M elementi
• La somma effettua la somma di due vettori
di pari dimensione e il risultato è in output
in un parametro formale T.
• Abbiamo generalizzato delle procedure
che possiamo riciclare in altri programmi
che coinvolgono i vettori.
22. Realizziamo il progetto in Visual
Basic
• Il form sarà costituito da due etichette e
due caselle di testo per inserire la
dimensione N dei vettori e per
visualizzarne la somma degli elementi;
• Sono presenti inoltre due pulsanti uno per
avviare il programma e l’altro per
terminarlo;
23. Modulo
• La codifica è effettuata a livello di modulo per
renderla condivisibile con atri progetti e
generalizzare gli algoritmi
• Per inserire un modulo basta scegliere dal Menù
Progetto – Inserisci Modulo;
• La variabili globali sono dichiarate come public,
mentre i parametri sono passati in alcuni casi
come variant. Variant è un tipo speciale che
assume come tipo variabili quelle che gli viene
costruita o assegnata in fase di esecuzione del
programma.
25. La codifica degli eventi nel Form
Private Sub cmd_Avvia_Click()
N = Val(txtn)
Call principale
txts = s
End Sub
Private Sub cmdfine_Click()
Unload Me
End Sub
Nell’evento del bottone Avvia vi è Call principale ovvero il sottoprogramma
che in Visual Basic nell’esercizio è considerato il primo ad essere richiamato.
Il programma principale in Visual Basic dall’utente è scelto in base alle
sue esigenze.
26. Il modulo – I parte
Option Explicit
Public s, N As Integer
Public a(100), b(100) As Integer
Public Sub carica(ByRef x As Variant, m As Integer)
Dim i As Integer
For i = 1 To m
x(i) = Val(InputBox("Inserisci elementi del vettore"))
Next i
End Sub
Public Sub somma(ByRef x, y As Variant, ByRef m, ByRef t As Variant)
Dim i As Integer
t = 0
For i = 1 To m
t = x(i) + y(i) + t
Next i
End Sub
27. Il modulo – parte II
Public Sub principale()
Call carica(a, N)
Call carica(b, N)
Call somma(a, b, N, s)
End Sub
Il programma principale sempre a livello di modulo richiama
i tre sottoprogrammi.
28. Per Concludere
• Svolgere il seguente esercizio realizzare
un programma che carichi e calcoli la
somma di due vettori di dimensione N e P
diverse.