SlideShare a Scribd company logo
1 of 57
Verso una metodologia di programmazione:

i sottoprogrammi


                Prof. Filippo TROTTA
Per determinare la soluzione algoritmica di un
problema complesso è, in generale
conveniente adottare la seguente metodologia:
• scomporre il problema originale in un
  insieme di sottoproblemi;
• fornire una soluzione algoritmica del
  problema      originale,   assumendo      di
  conoscere una soluzione algoritmica per i
  sottoproblemi individuati;
• affrontare singolarmente e con la stessa
  metodologia i singoli sottoproblemi.
                 Prof. Filippo TROTTA
METODOLOGIA DI
         PROGRAMMAZIONE


            TOP-DOWN

     dal generale al particolare, per
affinamenti successivi o per individuazione
             di sottoproblemi
                Prof. Filippo TROTTA
I vantaggi di tale approccio sono:

• migliore schematizzazione del problema;
• migliore comprensibilità;
• facilità di individuazione di sottoproblemi
  che ricorrono più volte nella soluzione
  iniziale;
• individuazione di problemi già risolti,
  eventualmente anche in ambito diverso.

                   Prof. Filippo TROTTA
PROBLEMA 1
Determinare il peso massimo, date tre parole
binarie a, b, c di 18 bit.

(Ricordimano che per peso P(X) di una parola
binaria X, si intende il numero di bit ad 1 di X).
                   101 101             101




                    Prof. Filippo TROTTA
L’algoritmo 1 sarà:
 (H) <<CARICA I VALORI BINARI IN TRE ARRAY DI NOME
(a,b,c)>>

 (A) <<ASSEGNA A d IL PESO DI a>>

  (B) <<ASSEGNA A e IL PESO DI b>>
       IF d <= e THEN d = e

 (C) <<ASSEGNA A e IL PESO DI c>>
       IF d <= e THEN d = e
       MSGBOX(“Il massimo è “ &d)
Si assume di conoscere la soluzione algoritmica di A, B, C, H
                           Prof. Filippo TROTTA
PROBLEMA 2
Determinare il peso di una parola binaria X
di N bit.
(La parola X è considerata inserita in un vettore di
N elementi).
                  101 101              101




                    Prof. Filippo TROTTA
L’algoritmo 2 sarà:


     I=1
     P=0
     DO
           P = P + X(I)
           I=I+1
     LOOP UNTIL I > N

                      Prof. Filippo TROTTA
A questo punto abbiamo tutti gli
elementi per risolvere il problema 1,
ma dobbiamo trovare il modo e le
regole per l’utilizzazione congiunta
del problema 1 con il problema 2.

   PROBLEMA 1                          PROBLEMA 2


                Prof. Filippo TROTTA
In pratica vengono utilizzate due tecniche:

a)   MACRO-ESPANSIONE: si
     utilizzano gli algoritmi 1 e 2 per
     definirne un terzo;
b) SOTTOPROGRAMMA: la
   soluzione del problema è formata
   dall’esecuzione congiunta degli
   algoritmi 1 e 2;
                    Prof. Filippo TROTTA
MACRO-ESPANSIONE
Algor. 1 + Algor. 2



 Algoritmo 3
                                             Risultati
   Dati


                  ESECUTORE
                      Prof. Filippo TROTTA
SOTTOPROGRAMMA


Algoritmo 1

Algoritmo 2                          Risultati
  Dati


              ESECUTORE
              Prof. Filippo TROTTA
SOLUZIONE A MACRO
                                  IF d <= e THEN
<<CARICA (a,b,c)>>
                                    d=e
i=1
                                 END IF
d=0
                                  i=1               IL PESO
DO
                                  e=0              MASSIMO
  d = d + a(i)
                                  DO                 E’ IN d
  i=i+1
                                    e = e + c(i)
LOOP UNTIL i > 18
                                    i=i+1
i=1
                                  LOOP UNTIL i > 18
e=0
                                  IF d <= e THEN
DO
                                    d=e
  e = e + b(i)
                                  END IF
  i=i+1
                                  MSGBOX(“Il maggiore è “&d)
LOOP UNTIL i > 18     Prof. Filippo TROTTA
SOLUZIONE A SOTTOPROGRAMMA
                                       Interfaccia che associa i parametri
 <<CARICA (a,b,c)>>
                                         FORMALI a quelli ATTUALI
 <<ASSEGNA A d IL PESO DI a>>
 <<ASSEGNA A e IL PESO DI b>>                          I=1
 IF d <= e THEN d = e                                  P=0
 <<ASSEGNA A e IL PESO DI c>>                          DO
 IF d <= e THEN d = e                                         P = P + X(I)
MSGBOX(“Il maggiore è “&d)                                    I=I+1
                                                       LOOP UNTIL I > N

   PROGRAMMA
    PRINCIPALE                            SOTTOPROGRAMMA
                                Prof. Filippo TROTTA
Interfaccia che associa i
         parametri
FORMALI a quelli ATTUALI
   dall’esempio sarà:

   Parametri formali:              X   P   N

   Parametri attuali:              a   d   18
                                   b   e   18
                                   c   e   18
                Prof. Filippo TROTTA
CONFRONTO FRA MACRO E SOTTOPROGRAMMA

 Il confronto fra le due organizzazioni si effettua
 relativamente ad alcuni parametri:
• OCCUPAZIONE DI MEMORIA
 intesa come numero di celle occupate dal programma
 codificato nel linguaggio macchina;

• TEMPO DI ESECUZIONE;
• COSTO DI UTILIZZAZIONE

                   Prof. Filippo TROTTA
OCCUPAZIONE DI MEMORIA

L’organizzazione a sottoprogrammi
molto più vantaggiosa quanta più è
frequente    in    un    algoritmo
l’esecuzione di sottoprogrammi
sempre uguali.

             Prof. Filippo TROTTA
TEMPO DI ESECUZIONE
L’organizzazione a sottoprogramma
è tanto peggiore, rispetto a quella a
macro, quanto più tempo si spende
per la chiamata e l’associazione dei
parametri.


              Prof. Filippo TROTTA
COSTO DI UTILIZZAZIONE
Si intende il costo delle operazioni necessarie per
giungere all’esecuzione del programma. Nel caso
di sottoprogrammi è data dalla codifica delle
chiamate e dal caricamento del sottoprogramma.
Nel caso di macro ogni espansione richiede, in
generale, lesame di tutta la macro: operazione
che è in generale più costosa di quelle richieste
per la chiamata del corrispondente programma.


                    Prof. Filippo TROTTA
Dalle considerazioni fatte si può dire che:

     NESSUNA DELLE DUE
   ORGANIZZAZIONI PREVALE
        SULL’ALTRA.
                     Prof. Filippo TROTTA
Ambiente locale e non-locale di un
           sottoprogramma


L’ambiente è l’insieme di tutte le entità
caratterizzate da un nome, accessibili da
un programma (costanti simboliche,
variabili, sottoprogrammi, ecc.)

                Prof. Filippo TROTTA
Supponiamo che un programma P, chiami un
sottoprogramma P’ e chiediamoci: qual’è
l’ambiente di P’? cioè qual’è l’insieme delle
variabili accessibili a P’?
Si considerano, fondamentalmente due possibilità:
a)   l’ambiente del chiamato è lo stesso del
          chiamante; (L.M., BASIC COBOL ecc.)
b)   il programma chiamato dispone di un
     ambiente locale inaccessibile al programma
     chiamante. (ALGOL, PASCAL, C, C++ ecc.)
                    Prof. Filippo TROTTA
COMPRENSIONE AMBIENTI NON-LOCALE
M          (progr. principale)
Dim X,Y,Z as integer;
                         sottoprog. P                   livello 0           M
           dim A,X as integer;
                         sottoprogr. R
           dim A,B as integer;
           .......
           B             A+Z+X                           livello 1    P            Q
           .........
                         sottoprogr. Q
           dim A,B,Z as integer;
           ..........
           Y             A+B+Z                          livello 2     R
           ...........
           ...........                   corpo
           Z             X+Y
                                         del                        P,Q e R
                                         principale
                                                                 senza parametri
                                          Prof. Filippo TROTTA
Regole di “scoping”
M          (progr. principale)
Dim X,Y,Z as integer;                                    Regola 1. L’ambiente
                         sottoprog. P
           dim A,X as integer;
                                                         di un sottoprogramma
                         sottoprogr. R                   è composto solo da
           dim A,B as integer;
           .......
                                                         variabili appartenenti
           B             A+Z+X                           agli ambienti locali dei
           .........
                         sottoprogr. Q
                                                         programmi che lo
           dim A,B,Z as integer;                         contengono.
           ..........
           Y             A+B+Z
                                                         Es. non locale di Q
           ...........
           ...........                   corpo           sarà composto solo da
                                         del
           Z             X+Y
                                         principale      variabili dell’ambiente
                                                         locale di M.
                                          Prof. Filippo TROTTA
Regola 2. Se nei
M          (progr. principale)                          programmi contenenti un
dim X,Y,Z as integer;
                         sottoprog. P
                                                        programma P vi sono più
           dim A,X as integer;                          variabili avente lo stesso
                         sottoprogr. R                  nome N, ogni riferimento
           dim A,B as integer;
           .......
                                                        ad N in P è alla variabile
           B             A+Z+X                          del sottoprogramma di
           .........                                    livello più profondo.
                         sottoprogr. Q
           dim A,B,Z as integer;                        Es.
           ..........
           Y             A+B+Z
                                                        non-locale di P: Y, Z di M
           ...........                                  non-locale di Q:X, Y di M
           ...........                   corpo          non-locale di R: X di P
           Z             X+Y
                                         del
                                         principale     non-locale di R: Y, Z di M
                                          Prof. Filippo TROTTA
Regola 3. I nomi dei
M          (progr. principale)
Dim X,Y,Z as integer;
                                                            parametri formali di
                         sottoprog. P                       un sottopr. P agiscono
           dim A,X as integer;
                         sottoprogr. R (x)
                                                            come quelli delle
           dim A,B as integer;                              variabili locali.
           .......
           B
           .........
                         A+Z+X
                                                            Es. Se il sottopr. R
                         sottoprogr. Q                      avesse un parametro
           dim A,B,Z as integer;
           ..........
                                                            formale X o Z, ogni
           Y             A+B+Z                              riferimento ad X o Z
           ...........
           ...........                       corpo
                                                            sarebbe a queste
           Z             X+Y
                                             del
                                             principale
                                                            parametri.

                                              Prof. Filippo TROTTA
OCCORRE LIMITARE
M          (progr. principale)                          AL MINIMO LA
dim X,Y,Z as integer;
                         sottoprog. P
                                                        MODIFICA
           dim A,X as integer;                          DELL’AMBIENTE
                         sottoprogr. R                  NON-LOCALE, COME
           dim A,B as integer;
           .......
                                                        AD ES.
           B             A+Z+X
           .........                                    Y        A + B + Z in Q
                         sottoprogr. Q
           dim A,B,Z as integer;
           ..........
           Y             A+B+Z
           ...........                                      Effetti laterali
           ...........                   corpo
           Z             X+Y
                                         del
                                         principale


                                          Prof. Filippo TROTTA
Esercizio n.1
Un programma principale M di un linguaggio strutturato
a blocchi contiene tre variabili intere A, B, C. M
contiene due sottoprogrammi interni P e Q i cui ambienti
locali sono costituiti dalle variabili intere A, X, Y e B, C,
Y rispettivamente.
P, a sua volta, contiene un sottoprogramma interno R
avente come variabili locali A, X, D intere.

Descrivere gli ambienti non locali delle tre
procedure P, Q, R.
                       Prof. Filippo TROTTA
Risposta Esercizio n.1
M          (progr. principale)
dimA,B,C as integer;
                         sottoprog. P                  non locale di P: B, C di M
           dimr A,X,Y as integer;
                         sottoprogr. R                 non locale di Q: A di M
           dim A,X,D as integer;
           .......                                     non locale di R:Y di P
           .........
           .........                                   non locale di R: B, C di M
                         sottoprogr. Q
           dim B,C,Y as integer;
           ..........
           ..........
           ...........
           ...........
           ...........



                                         Prof. Filippo TROTTA
Esercizio n.2
Risolvere il problema precedente
supponenndo che le procedure R e Q
abbiano dei parametri formali di nome
B, C e A, X rispettivamente.




                Prof. Filippo TROTTA
Risposta Esercizio n.2
M          (progr. principale)
dim A,B,C as integer;
                         sottoprog. P                non locale di P: B, C di M
           dim A,X,Y as integer;
              sottoprogr. R(B, C ..)                 non locale di Q: nessuna
           dim A,X,D as integer;
           .......                                   non locale di R:Y di P
           .........
           .........                                 non locale di R: nessuna
              sottoprogr. Q(A, X ..)
           dim B,C,Y as integer;
           ..........
           ..........
           ...........
           ...........
           ...........

                                        Prof. Filippo TROTTA
Esercizio n.3
Dim A, B as integer
PP PROVA_COMPRENSIONE_AMBIENTI_NON_LOCALI
B = 10; A = 10; chiama P; chiama Q; scrivi A, B
End PP
                         A    B    Ap
                         10   10   11    Sub P:
Sub P                    8    12
                              9          B=A+1
Dim A as integer                         Sub Q:
 A = B + 1; B = A + 1 {fine proc. P}     B=A-1
                                         A=B-1
Sub Q
 B = A - 1; A = B - 1 {fine proc. Q}

Cosa scrive il programma? Quali istruzioni di P e Q
provocano degli effetti Prof. Filippo TROTTA
                        laterali?
Esercitazione Visual Basic
Creare un progetto VB che:

4.   Carichi un array di N numeri casuali
5.   Visualizzi l’array in una TextBox non modificabile
6.   Ordini L’array
7.   Visualizzi l’array ordinato in un’altra TextBox

N.B.
• Le due TextBox devono prevedere l’utilizzo di barre di
   scorrimento verticale
• Tutto il progetto va in esecuzione con l’evento load del
   form
                      Prof. Filippo TROTTA
I parametri e la loro trasmissione.
Si possono dividere i parametri in tre classi direzionali:
- parametri di ingresso (in)
- parametri di uscita (out)
- patrametri di ingresso/uscita (in/out)
Le principali tecniche implementative del passaggio dei
parametri nei più comuni linguaggi di programm. sono:
- passaggio per valore
- passaggio per indirizzo o “by reference”
                        Prof. Filippo TROTTA
Schema riassuntivo
           Direzionalità dei parametri
O                        in               out   in/out
c     M
c     e
             Tipo      VALORE INDIRIZZO INDIRIZZO
u d   m
           semplice      p.a. =    p.a. =    p.a. =
p i   o
                      espressione variabile variabile
a     r
z     i
i     a      Tipo     INDIRIZZO INDIRIZZO INDIRIZZO
o         strutturato    p.a. =    p.a. =    p.a. =
n                       variabile variabile variabile
e
                        Prof. Filippo TROTTA
Interfacciamento fra chiamante e chiamato
 Interfaccia di comunicazione:

Sub <nome-sub> ([<lista parametri formali>])


 Per la chiamata adotteremo la seguente sintassi:

<nome-sub> <arg1>, <arg2>, .......<arg n>
                      parametri attuali

                       Prof. Filippo TROTTA
Calcolo del quoziente e resto per differenze successive
Sub DIVISIONE (ByVal D, D1 as integer; ByRef Q, R as integer)
 R=D
 Q=0                                    parametri formali
 do while R >= D1 R = R - D1: Q = Q + 1 loop
End Sub                                  sottoprogrammi



  una possibile chiamata:

  DIVISIONE (A + B, 3, C, B);
                                              parametri attuali

                            Prof. Filippo TROTTA
Per quanto riguarda il numero e il tipo di argomenti,
occorre, in generale, attenersi alle seguenti regole:

il numero dei parametri attuali deve uguagliare
quello dei parametri formali.
il tipo di un parametro attuale deve essere uguale,
o almeno compatibile, con              quello del
corrispondente parametro formale.


                        Prof. Filippo TROTTA
Esercizio n.4
Scrivere l’interfaccia di comunicazione dei
sottoprogrammi che risolvono i seguenti problemi:
a)    sommare q ad una data variabile;
b)    calcolare, se esistono, le radici intere di una
      equazione di 2° grado;
c)    calcolare il numero di volte in cui ciascuna
      lettera è presente in una data stringa;
d)    eseguire una ricerca su un vettore di 100 numeri
      reali;
e)    Scambia il valore tra due variabili;


                      Prof. Filippo TROTTA
Risposta esercizio n.4
a) Sub sommaq (ByVal X as integer; ByRef S as integer)
b) Sub equazione (ByVal A,B,C as integer; ByRef X1,X2 as single)
c) Sub contalettera (ByVal S as string; ByRef NVOL as VET)
  Dim VET(26) as string*1 {26 lettere alfabeto}
d) Sub ricerca (ByRef V () as integer; ByRef J as integer)
      J è il valore dell’indice se esiste altrimenti J=0.
e) Sub scambia (ByRef x, y as integer)



                          Prof. Filippo TROTTA
I SOTTOPROGRAMMI FUNZIONALI

A differenza delle procedure, che
manifestano i loro effetti attraverso delle
modifiche      all’ambiente    (sia    con
assegnamenti alle variabili non locali, sia
attraverso i parametri di out e in/out), le
function manifestano il loro effetto
restituendo un valore al programma
chiamante.
                 Prof. Filippo TROTTA
La definizione assume l’aspetto di questo tipo:

function <nome_function> ([<lista dei parametri formali>]) [as <tipo risultato>]
                          <corpo della funzione>



Prima di tornare al programma chiamante occorre
specificare quale valore restituire. La tecnica più
diffusa è:
<nome_function>                               <espressione>


                               Prof. Filippo TROTTA
Definizione della funzione per il calcolo del MCD
                                                      algoritmo
Function MCD(ByVal x, y As Integer) As Integer            di
Dim M As Integer, N As Integer, RESTO As Integer        Euclide

 M = x: N = y
 If M < N Then Scambia M, N ' {chiamata a SCAMBIA}
 RESTO = M Mod N
 do while RESTO <> 0
   M = N: N = RESTO: RESTO = M Mod N
 loop              Sub Scambia(ByRef x, y As Integer)
                   Dim h As Integer
 MCD = N            h=x
End Function        x=y
                     y=h
                    End Sub


                              Prof. Filippo TROTTA
riferito all’esempio è perfettamente lecito scrivere:

A = MCD(MCD(A, B), MCD(B, 3)) + 1
o
MsgBox (“Il mcd è “ & MCD(A + B, A - B))

sono invece sintatticamente errate scritture come:

MCD(A, B) = w
o
  A=InputBox()
  B=InputBox()
  MCD(A, B);

                      Prof. Filippo TROTTA
Esercizio n.5
Scrivere l’interfaccia di comunicazione delle function
   che risolvono i seguenti problemi:
• calcolare l’importo scontato dato l’importo totale e
  la percentuale di sconto
• stabilire se un vettore di stringhe è in ordine
  alfabetico;
• trasformate un numero intero nella sua
  rappresentazione a stringa in base b;
• stabilire se una stringa del tipo GG/MM/AA può
  rappresentare la data di un giorno (tener conto
     degli anni bisestili);
• Calcolare il numero primo successivo a un numero
  dato;
                       Prof. Filippo TROTTA
Risposta esercizio n.5
a) function sconto(ByVal X as Long, ByVal Y as integer)as Long
b) function ordine(ByRef V() as Integer) as boolean
 c) function converte (ByVal N as integer) as string
d) function contr_data (ByVal S as string) as boolean
   dove S conterrà GG/MM/AA
e) function primo (ByVal n as integer) as integer


                            Prof. Filippo TROTTA
I SOTTOPROGRAMMI RICORSIVI

Se si stabilisce che un sottoprogramma può
chiamare qualsiasi altro sottoprogramma (ad
esso accessibile) dobbiamo esaminare la
possibilità che richiami se stesso.
Quando ciò avviene si parla di
programmazione ricorsiva e l’azione o la
denotazione del richiamo viene detta
ricorsione.
                 Prof. Filippo TROTTA
L’algoritmo di Euclide per trovare il MCD fra m e n con
(m > n) potrebbe essere espresso come segue a parole
come segue:

{per trovare MCD(m, n) si effettui la divisione fra
m ed n. Sia r il resto della divisione. Se r = 0 allora
n è il MCD, altrimenti il MCD(m, n) è uguale al
MCD(n, r)} cioè:

MCD(15, 9) = MCD(9, 6) = MCD(6, 3 ) = 3
certamente si ricorre ma su argomenti sempre più piccoli
fino a trovare un caso in cui non si ricorre più.
                       Prof. Filippo TROTTA
Definizione ricorsiva della funzione per il
             calcolo del MCD
function MCD (ByVal M,N as integer) as integer
Dim R as integer                             algoritmo
  R = M mod N                                    di
                                               Euclide
  if R = 0 then MCD = N ‘ {o return N}
           else MCD = MCD(N, R) ‘{o return MCD (N, R)}
End function


                   chiamata ricorsiva
                       Prof. Filippo TROTTA
Matematica                          Programmazione




Costruire un sottoprogramma
ricorsivo per un dato problema
corrisponde a dare una definizione
per induzione della sua soluzione.
               Prof. Filippo TROTTA
Affinché un sottoprogramma ricorsivo sia
correttamente concepito (in pratica perché non
vada in loop infinito):
a)   deve esserci un modo per uscire dal
     sottoprogramma evitando ogni chiamata
     ricorsiva (corrisponde alla base di
     induzione).
b)   deve esserci almeno una chiamata ricorsiva
     con argomenti orientati alla soluzione di un
     sottoproblema più piccolo dell’originale
     (corrisponde all’ipotesi d’induzione).
                   Prof. Filippo TROTTA
Non tutti i linguaggi consentono la ricorsione (ad es.
FORTRAN, BASIC, COBOL). Ciò è dovuto al fatto che
la ricorsione richiede un tipo di gestione dinamica
degli ambienti locali.
Una chiamata ricorsiva comporta (come per una
chiamata non ricorsiva) il salvataggio delle informazioni
necessarie a riprendere successivamente il calcolo, e
cioè:

- il punto di ritorno
- i parametri attuali
- lo stato dell’ambiente locale.
                        Prof. Filippo TROTTA
Esercizio n.6
1)     scrivere una function ricorsiva per il calcolo del
       fattoriale di un numero N >= 0 (che succede se
       N < 0?);
2)     scrivere una function ricorsiva per il calcolo del
       numero di combinazioni di n oggetti presi a K a
       K; cioè C n,k
3)     scrivere una procedura ricorsiva per eseguire a
       ricerca binaria su un vettore A(1 to N). Restituire
       l’indice dell’elemento cercato (se esiste) e l’esito
       della ricerca;
4)     cosa calcola la seguente funzione ricorsiva?
     function F (ByVal N, K as integer) as integer
      if N <=0 then F = 0 else F = N ^ K + F(N - 1, K)
                       Prof. Filippo TROTTA
SOTTOPROGRAMMI ESTRENI, MODULI E
     LA FASE DI COLLEGAMENTO

Fino a questo punto abbiamo fatto l’ipotesi
che i sottoprogrammi (procedure e funzioni)
fossero definiti internamente al programma
principale.
Se questo fosse l’unico modo di definire i
sottoprogrammi, il linguaggio soffrirebbe dei
seguenti inconvenienti:
                  Prof. Filippo TROTTA
a) Una volta scritto un sottoprogramma di uso
generale (ad es. un algoritmo di ordinamento), non
è possibile riutilizzarlo in altri programmi se non
ricopiandone il testo.
b) Non è possibile mettere a punto separatamente
(magari    da     parte   di  diverse   persone)
sottoprogrammi diversi apparteneneti ad uno
stesso progetto di programmazione.
c) L’impiego di sottoprogrammi inteni può
incoraggiare un certo abuso dell’ambiente non
locale che porta spesso ad errori e all’illeggibilità
dei sottoprogrammi stessi.
                     Prof. Filippo TROTTA
Più sottoprogrammi esterni legati logicamente fra loro (e/o
operanti su un unico ambiente non locale) sono riuniti in
un modulo o libreria.
Si tratta di un modo abbastanza moderno di strutturare e
concepire i programmi, secondo una metodologia che
potremmo chiamare programmazione modulare.
Subroutine                       Esempi di utilizzo del Modulo
                Function


                                               variabile



                       Prof. Filippo TROTTA
FINE


Prof. Filippo TROTTA

More Related Content

Similar to Sottoprogrammi in Visual Basic

Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningAndrea Ciccotta
 
Ecdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiEcdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiAngela Cristina
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: FunzioniMajong DevJfu
 
Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)STELITANO
 
Algoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingAlgoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingdanielenicassio
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)STELITANO
 
Coding class da scratch a python
Coding class  da scratch a pythonCoding class  da scratch a python
Coding class da scratch a pythonEnrico La Sala
 
Functional Programming per tutti
Functional Programming per tuttiFunctional Programming per tutti
Functional Programming per tuttiGiancarlo Valente
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)STELITANO
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Espressività di linguaggi concorrenti linda like
Espressività di linguaggi concorrenti linda likeEspressività di linguaggi concorrenti linda like
Espressività di linguaggi concorrenti linda likePaolo Diomede
 

Similar to Sottoprogrammi in Visual Basic (12)

Java Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine LeariningJava Symbolic Regression - Machine Learining
Java Symbolic Regression - Machine Learining
 
Ecdl modulo 1 -Fondamenti
Ecdl modulo 1 -FondamentiEcdl modulo 1 -Fondamenti
Ecdl modulo 1 -Fondamenti
 
05 - Programmazione: Funzioni
05 - Programmazione: Funzioni05 - Programmazione: Funzioni
05 - Programmazione: Funzioni
 
Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)Lezione 3 (29 febbraio 2012)
Lezione 3 (29 febbraio 2012)
 
Algoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decodingAlgoritmo probabilistico di tipo montecarlo per il list decoding
Algoritmo probabilistico di tipo montecarlo per il list decoding
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)Lezione 11 (26 marzo 2012)
Lezione 11 (26 marzo 2012)
 
Coding class da scratch a python
Coding class  da scratch a pythonCoding class  da scratch a python
Coding class da scratch a python
 
Functional Programming per tutti
Functional Programming per tuttiFunctional Programming per tutti
Functional Programming per tutti
 
Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)Lezione 6 (12 marzo 2012)
Lezione 6 (12 marzo 2012)
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Espressività di linguaggi concorrenti linda like
Espressività di linguaggi concorrenti linda likeEspressività di linguaggi concorrenti linda like
Espressività di linguaggi concorrenti linda like
 

Recently uploaded

Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereMarco Chizzali
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxsasaselvatico
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.camillaorlando17
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxlorenzodemidio01
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfteccarellilorenzo
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxteccarellilorenzo
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxlorenzodemidio01
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024IISGiovanniVallePado
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticanico07fusco
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxlorenzodemidio01
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxteccarellilorenzo
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxteccarellilorenzo
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxlorenzodemidio01
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................giorgiadeascaniis59
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....giorgiadeascaniis59
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...Nguyen Thanh Tu Collection
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................giorgiadeascaniis59
 

Recently uploaded (17)

Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docx
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 

Sottoprogrammi in Visual Basic

  • 1. Verso una metodologia di programmazione: i sottoprogrammi Prof. Filippo TROTTA
  • 2. Per determinare la soluzione algoritmica di un problema complesso è, in generale conveniente adottare la seguente metodologia: • scomporre il problema originale in un insieme di sottoproblemi; • fornire una soluzione algoritmica del problema originale, assumendo di conoscere una soluzione algoritmica per i sottoproblemi individuati; • affrontare singolarmente e con la stessa metodologia i singoli sottoproblemi. Prof. Filippo TROTTA
  • 3. METODOLOGIA DI PROGRAMMAZIONE TOP-DOWN dal generale al particolare, per affinamenti successivi o per individuazione di sottoproblemi Prof. Filippo TROTTA
  • 4. I vantaggi di tale approccio sono: • migliore schematizzazione del problema; • migliore comprensibilità; • facilità di individuazione di sottoproblemi che ricorrono più volte nella soluzione iniziale; • individuazione di problemi già risolti, eventualmente anche in ambito diverso. Prof. Filippo TROTTA
  • 5. PROBLEMA 1 Determinare il peso massimo, date tre parole binarie a, b, c di 18 bit. (Ricordimano che per peso P(X) di una parola binaria X, si intende il numero di bit ad 1 di X). 101 101 101 Prof. Filippo TROTTA
  • 6. L’algoritmo 1 sarà: (H) <<CARICA I VALORI BINARI IN TRE ARRAY DI NOME (a,b,c)>> (A) <<ASSEGNA A d IL PESO DI a>> (B) <<ASSEGNA A e IL PESO DI b>> IF d <= e THEN d = e (C) <<ASSEGNA A e IL PESO DI c>> IF d <= e THEN d = e MSGBOX(“Il massimo è “ &d) Si assume di conoscere la soluzione algoritmica di A, B, C, H Prof. Filippo TROTTA
  • 7. PROBLEMA 2 Determinare il peso di una parola binaria X di N bit. (La parola X è considerata inserita in un vettore di N elementi). 101 101 101 Prof. Filippo TROTTA
  • 8. L’algoritmo 2 sarà: I=1 P=0 DO P = P + X(I) I=I+1 LOOP UNTIL I > N Prof. Filippo TROTTA
  • 9. A questo punto abbiamo tutti gli elementi per risolvere il problema 1, ma dobbiamo trovare il modo e le regole per l’utilizzazione congiunta del problema 1 con il problema 2. PROBLEMA 1 PROBLEMA 2 Prof. Filippo TROTTA
  • 10. In pratica vengono utilizzate due tecniche: a) MACRO-ESPANSIONE: si utilizzano gli algoritmi 1 e 2 per definirne un terzo; b) SOTTOPROGRAMMA: la soluzione del problema è formata dall’esecuzione congiunta degli algoritmi 1 e 2; Prof. Filippo TROTTA
  • 11. MACRO-ESPANSIONE Algor. 1 + Algor. 2 Algoritmo 3 Risultati Dati ESECUTORE Prof. Filippo TROTTA
  • 12. SOTTOPROGRAMMA Algoritmo 1 Algoritmo 2 Risultati Dati ESECUTORE Prof. Filippo TROTTA
  • 13. SOLUZIONE A MACRO IF d <= e THEN <<CARICA (a,b,c)>> d=e i=1 END IF d=0 i=1 IL PESO DO e=0 MASSIMO d = d + a(i) DO E’ IN d i=i+1 e = e + c(i) LOOP UNTIL i > 18 i=i+1 i=1 LOOP UNTIL i > 18 e=0 IF d <= e THEN DO d=e e = e + b(i) END IF i=i+1 MSGBOX(“Il maggiore è “&d) LOOP UNTIL i > 18 Prof. Filippo TROTTA
  • 14. SOLUZIONE A SOTTOPROGRAMMA Interfaccia che associa i parametri <<CARICA (a,b,c)>> FORMALI a quelli ATTUALI <<ASSEGNA A d IL PESO DI a>> <<ASSEGNA A e IL PESO DI b>> I=1 IF d <= e THEN d = e P=0 <<ASSEGNA A e IL PESO DI c>> DO IF d <= e THEN d = e P = P + X(I) MSGBOX(“Il maggiore è “&d) I=I+1 LOOP UNTIL I > N PROGRAMMA PRINCIPALE SOTTOPROGRAMMA Prof. Filippo TROTTA
  • 15. Interfaccia che associa i parametri FORMALI a quelli ATTUALI dall’esempio sarà: Parametri formali: X P N Parametri attuali: a d 18 b e 18 c e 18 Prof. Filippo TROTTA
  • 16. CONFRONTO FRA MACRO E SOTTOPROGRAMMA Il confronto fra le due organizzazioni si effettua relativamente ad alcuni parametri: • OCCUPAZIONE DI MEMORIA intesa come numero di celle occupate dal programma codificato nel linguaggio macchina; • TEMPO DI ESECUZIONE; • COSTO DI UTILIZZAZIONE Prof. Filippo TROTTA
  • 17. OCCUPAZIONE DI MEMORIA L’organizzazione a sottoprogrammi molto più vantaggiosa quanta più è frequente in un algoritmo l’esecuzione di sottoprogrammi sempre uguali. Prof. Filippo TROTTA
  • 18. TEMPO DI ESECUZIONE L’organizzazione a sottoprogramma è tanto peggiore, rispetto a quella a macro, quanto più tempo si spende per la chiamata e l’associazione dei parametri. Prof. Filippo TROTTA
  • 19. COSTO DI UTILIZZAZIONE Si intende il costo delle operazioni necessarie per giungere all’esecuzione del programma. Nel caso di sottoprogrammi è data dalla codifica delle chiamate e dal caricamento del sottoprogramma. Nel caso di macro ogni espansione richiede, in generale, lesame di tutta la macro: operazione che è in generale più costosa di quelle richieste per la chiamata del corrispondente programma. Prof. Filippo TROTTA
  • 20. Dalle considerazioni fatte si può dire che: NESSUNA DELLE DUE ORGANIZZAZIONI PREVALE SULL’ALTRA. Prof. Filippo TROTTA
  • 21. Ambiente locale e non-locale di un sottoprogramma L’ambiente è l’insieme di tutte le entità caratterizzate da un nome, accessibili da un programma (costanti simboliche, variabili, sottoprogrammi, ecc.) Prof. Filippo TROTTA
  • 22. Supponiamo che un programma P, chiami un sottoprogramma P’ e chiediamoci: qual’è l’ambiente di P’? cioè qual’è l’insieme delle variabili accessibili a P’? Si considerano, fondamentalmente due possibilità: a) l’ambiente del chiamato è lo stesso del chiamante; (L.M., BASIC COBOL ecc.) b) il programma chiamato dispone di un ambiente locale inaccessibile al programma chiamante. (ALGOL, PASCAL, C, C++ ecc.) Prof. Filippo TROTTA
  • 23. COMPRENSIONE AMBIENTI NON-LOCALE M (progr. principale) Dim X,Y,Z as integer; sottoprog. P livello 0 M dim A,X as integer; sottoprogr. R dim A,B as integer; ....... B A+Z+X livello 1 P Q ......... sottoprogr. Q dim A,B,Z as integer; .......... Y A+B+Z livello 2 R ........... ........... corpo Z X+Y del P,Q e R principale senza parametri Prof. Filippo TROTTA
  • 24. Regole di “scoping” M (progr. principale) Dim X,Y,Z as integer; Regola 1. L’ambiente sottoprog. P dim A,X as integer; di un sottoprogramma sottoprogr. R è composto solo da dim A,B as integer; ....... variabili appartenenti B A+Z+X agli ambienti locali dei ......... sottoprogr. Q programmi che lo dim A,B,Z as integer; contengono. .......... Y A+B+Z Es. non locale di Q ........... ........... corpo sarà composto solo da del Z X+Y principale variabili dell’ambiente locale di M. Prof. Filippo TROTTA
  • 25. Regola 2. Se nei M (progr. principale) programmi contenenti un dim X,Y,Z as integer; sottoprog. P programma P vi sono più dim A,X as integer; variabili avente lo stesso sottoprogr. R nome N, ogni riferimento dim A,B as integer; ....... ad N in P è alla variabile B A+Z+X del sottoprogramma di ......... livello più profondo. sottoprogr. Q dim A,B,Z as integer; Es. .......... Y A+B+Z non-locale di P: Y, Z di M ........... non-locale di Q:X, Y di M ........... corpo non-locale di R: X di P Z X+Y del principale non-locale di R: Y, Z di M Prof. Filippo TROTTA
  • 26. Regola 3. I nomi dei M (progr. principale) Dim X,Y,Z as integer; parametri formali di sottoprog. P un sottopr. P agiscono dim A,X as integer; sottoprogr. R (x) come quelli delle dim A,B as integer; variabili locali. ....... B ......... A+Z+X Es. Se il sottopr. R sottoprogr. Q avesse un parametro dim A,B,Z as integer; .......... formale X o Z, ogni Y A+B+Z riferimento ad X o Z ........... ........... corpo sarebbe a queste Z X+Y del principale parametri. Prof. Filippo TROTTA
  • 27. OCCORRE LIMITARE M (progr. principale) AL MINIMO LA dim X,Y,Z as integer; sottoprog. P MODIFICA dim A,X as integer; DELL’AMBIENTE sottoprogr. R NON-LOCALE, COME dim A,B as integer; ....... AD ES. B A+Z+X ......... Y A + B + Z in Q sottoprogr. Q dim A,B,Z as integer; .......... Y A+B+Z ........... Effetti laterali ........... corpo Z X+Y del principale Prof. Filippo TROTTA
  • 28. Esercizio n.1 Un programma principale M di un linguaggio strutturato a blocchi contiene tre variabili intere A, B, C. M contiene due sottoprogrammi interni P e Q i cui ambienti locali sono costituiti dalle variabili intere A, X, Y e B, C, Y rispettivamente. P, a sua volta, contiene un sottoprogramma interno R avente come variabili locali A, X, D intere. Descrivere gli ambienti non locali delle tre procedure P, Q, R. Prof. Filippo TROTTA
  • 29. Risposta Esercizio n.1 M (progr. principale) dimA,B,C as integer; sottoprog. P non locale di P: B, C di M dimr A,X,Y as integer; sottoprogr. R non locale di Q: A di M dim A,X,D as integer; ....... non locale di R:Y di P ......... ......... non locale di R: B, C di M sottoprogr. Q dim B,C,Y as integer; .......... .......... ........... ........... ........... Prof. Filippo TROTTA
  • 30. Esercizio n.2 Risolvere il problema precedente supponenndo che le procedure R e Q abbiano dei parametri formali di nome B, C e A, X rispettivamente. Prof. Filippo TROTTA
  • 31. Risposta Esercizio n.2 M (progr. principale) dim A,B,C as integer; sottoprog. P non locale di P: B, C di M dim A,X,Y as integer; sottoprogr. R(B, C ..) non locale di Q: nessuna dim A,X,D as integer; ....... non locale di R:Y di P ......... ......... non locale di R: nessuna sottoprogr. Q(A, X ..) dim B,C,Y as integer; .......... .......... ........... ........... ........... Prof. Filippo TROTTA
  • 32. Esercizio n.3 Dim A, B as integer PP PROVA_COMPRENSIONE_AMBIENTI_NON_LOCALI B = 10; A = 10; chiama P; chiama Q; scrivi A, B End PP A B Ap 10 10 11 Sub P: Sub P 8 12 9 B=A+1 Dim A as integer Sub Q: A = B + 1; B = A + 1 {fine proc. P} B=A-1 A=B-1 Sub Q B = A - 1; A = B - 1 {fine proc. Q} Cosa scrive il programma? Quali istruzioni di P e Q provocano degli effetti Prof. Filippo TROTTA laterali?
  • 33. Esercitazione Visual Basic Creare un progetto VB che: 4. Carichi un array di N numeri casuali 5. Visualizzi l’array in una TextBox non modificabile 6. Ordini L’array 7. Visualizzi l’array ordinato in un’altra TextBox N.B. • Le due TextBox devono prevedere l’utilizzo di barre di scorrimento verticale • Tutto il progetto va in esecuzione con l’evento load del form Prof. Filippo TROTTA
  • 34. I parametri e la loro trasmissione. Si possono dividere i parametri in tre classi direzionali: - parametri di ingresso (in) - parametri di uscita (out) - patrametri di ingresso/uscita (in/out) Le principali tecniche implementative del passaggio dei parametri nei più comuni linguaggi di programm. sono: - passaggio per valore - passaggio per indirizzo o “by reference” Prof. Filippo TROTTA
  • 35. Schema riassuntivo Direzionalità dei parametri O in out in/out c M c e Tipo VALORE INDIRIZZO INDIRIZZO u d m semplice p.a. = p.a. = p.a. = p i o espressione variabile variabile a r z i i a Tipo INDIRIZZO INDIRIZZO INDIRIZZO o strutturato p.a. = p.a. = p.a. = n variabile variabile variabile e Prof. Filippo TROTTA
  • 36. Interfacciamento fra chiamante e chiamato Interfaccia di comunicazione: Sub <nome-sub> ([<lista parametri formali>]) Per la chiamata adotteremo la seguente sintassi: <nome-sub> <arg1>, <arg2>, .......<arg n> parametri attuali Prof. Filippo TROTTA
  • 37. Calcolo del quoziente e resto per differenze successive Sub DIVISIONE (ByVal D, D1 as integer; ByRef Q, R as integer) R=D Q=0 parametri formali do while R >= D1 R = R - D1: Q = Q + 1 loop End Sub sottoprogrammi una possibile chiamata: DIVISIONE (A + B, 3, C, B); parametri attuali Prof. Filippo TROTTA
  • 38. Per quanto riguarda il numero e il tipo di argomenti, occorre, in generale, attenersi alle seguenti regole: il numero dei parametri attuali deve uguagliare quello dei parametri formali. il tipo di un parametro attuale deve essere uguale, o almeno compatibile, con quello del corrispondente parametro formale. Prof. Filippo TROTTA
  • 39. Esercizio n.4 Scrivere l’interfaccia di comunicazione dei sottoprogrammi che risolvono i seguenti problemi: a) sommare q ad una data variabile; b) calcolare, se esistono, le radici intere di una equazione di 2° grado; c) calcolare il numero di volte in cui ciascuna lettera è presente in una data stringa; d) eseguire una ricerca su un vettore di 100 numeri reali; e) Scambia il valore tra due variabili; Prof. Filippo TROTTA
  • 40. Risposta esercizio n.4 a) Sub sommaq (ByVal X as integer; ByRef S as integer) b) Sub equazione (ByVal A,B,C as integer; ByRef X1,X2 as single) c) Sub contalettera (ByVal S as string; ByRef NVOL as VET) Dim VET(26) as string*1 {26 lettere alfabeto} d) Sub ricerca (ByRef V () as integer; ByRef J as integer) J è il valore dell’indice se esiste altrimenti J=0. e) Sub scambia (ByRef x, y as integer) Prof. Filippo TROTTA
  • 41. I SOTTOPROGRAMMI FUNZIONALI A differenza delle procedure, che manifestano i loro effetti attraverso delle modifiche all’ambiente (sia con assegnamenti alle variabili non locali, sia attraverso i parametri di out e in/out), le function manifestano il loro effetto restituendo un valore al programma chiamante. Prof. Filippo TROTTA
  • 42. La definizione assume l’aspetto di questo tipo: function <nome_function> ([<lista dei parametri formali>]) [as <tipo risultato>] <corpo della funzione> Prima di tornare al programma chiamante occorre specificare quale valore restituire. La tecnica più diffusa è: <nome_function> <espressione> Prof. Filippo TROTTA
  • 43. Definizione della funzione per il calcolo del MCD algoritmo Function MCD(ByVal x, y As Integer) As Integer di Dim M As Integer, N As Integer, RESTO As Integer Euclide M = x: N = y If M < N Then Scambia M, N ' {chiamata a SCAMBIA} RESTO = M Mod N do while RESTO <> 0 M = N: N = RESTO: RESTO = M Mod N loop Sub Scambia(ByRef x, y As Integer) Dim h As Integer MCD = N h=x End Function x=y y=h End Sub Prof. Filippo TROTTA
  • 44. riferito all’esempio è perfettamente lecito scrivere: A = MCD(MCD(A, B), MCD(B, 3)) + 1 o MsgBox (“Il mcd è “ & MCD(A + B, A - B)) sono invece sintatticamente errate scritture come: MCD(A, B) = w o A=InputBox() B=InputBox() MCD(A, B); Prof. Filippo TROTTA
  • 45. Esercizio n.5 Scrivere l’interfaccia di comunicazione delle function che risolvono i seguenti problemi: • calcolare l’importo scontato dato l’importo totale e la percentuale di sconto • stabilire se un vettore di stringhe è in ordine alfabetico; • trasformate un numero intero nella sua rappresentazione a stringa in base b; • stabilire se una stringa del tipo GG/MM/AA può rappresentare la data di un giorno (tener conto degli anni bisestili); • Calcolare il numero primo successivo a un numero dato; Prof. Filippo TROTTA
  • 46. Risposta esercizio n.5 a) function sconto(ByVal X as Long, ByVal Y as integer)as Long b) function ordine(ByRef V() as Integer) as boolean c) function converte (ByVal N as integer) as string d) function contr_data (ByVal S as string) as boolean dove S conterrà GG/MM/AA e) function primo (ByVal n as integer) as integer Prof. Filippo TROTTA
  • 47. I SOTTOPROGRAMMI RICORSIVI Se si stabilisce che un sottoprogramma può chiamare qualsiasi altro sottoprogramma (ad esso accessibile) dobbiamo esaminare la possibilità che richiami se stesso. Quando ciò avviene si parla di programmazione ricorsiva e l’azione o la denotazione del richiamo viene detta ricorsione. Prof. Filippo TROTTA
  • 48. L’algoritmo di Euclide per trovare il MCD fra m e n con (m > n) potrebbe essere espresso come segue a parole come segue: {per trovare MCD(m, n) si effettui la divisione fra m ed n. Sia r il resto della divisione. Se r = 0 allora n è il MCD, altrimenti il MCD(m, n) è uguale al MCD(n, r)} cioè: MCD(15, 9) = MCD(9, 6) = MCD(6, 3 ) = 3 certamente si ricorre ma su argomenti sempre più piccoli fino a trovare un caso in cui non si ricorre più. Prof. Filippo TROTTA
  • 49. Definizione ricorsiva della funzione per il calcolo del MCD function MCD (ByVal M,N as integer) as integer Dim R as integer algoritmo R = M mod N di Euclide if R = 0 then MCD = N ‘ {o return N} else MCD = MCD(N, R) ‘{o return MCD (N, R)} End function chiamata ricorsiva Prof. Filippo TROTTA
  • 50. Matematica Programmazione Costruire un sottoprogramma ricorsivo per un dato problema corrisponde a dare una definizione per induzione della sua soluzione. Prof. Filippo TROTTA
  • 51. Affinché un sottoprogramma ricorsivo sia correttamente concepito (in pratica perché non vada in loop infinito): a) deve esserci un modo per uscire dal sottoprogramma evitando ogni chiamata ricorsiva (corrisponde alla base di induzione). b) deve esserci almeno una chiamata ricorsiva con argomenti orientati alla soluzione di un sottoproblema più piccolo dell’originale (corrisponde all’ipotesi d’induzione). Prof. Filippo TROTTA
  • 52. Non tutti i linguaggi consentono la ricorsione (ad es. FORTRAN, BASIC, COBOL). Ciò è dovuto al fatto che la ricorsione richiede un tipo di gestione dinamica degli ambienti locali. Una chiamata ricorsiva comporta (come per una chiamata non ricorsiva) il salvataggio delle informazioni necessarie a riprendere successivamente il calcolo, e cioè: - il punto di ritorno - i parametri attuali - lo stato dell’ambiente locale. Prof. Filippo TROTTA
  • 53. Esercizio n.6 1) scrivere una function ricorsiva per il calcolo del fattoriale di un numero N >= 0 (che succede se N < 0?); 2) scrivere una function ricorsiva per il calcolo del numero di combinazioni di n oggetti presi a K a K; cioè C n,k 3) scrivere una procedura ricorsiva per eseguire a ricerca binaria su un vettore A(1 to N). Restituire l’indice dell’elemento cercato (se esiste) e l’esito della ricerca; 4) cosa calcola la seguente funzione ricorsiva? function F (ByVal N, K as integer) as integer if N <=0 then F = 0 else F = N ^ K + F(N - 1, K) Prof. Filippo TROTTA
  • 54. SOTTOPROGRAMMI ESTRENI, MODULI E LA FASE DI COLLEGAMENTO Fino a questo punto abbiamo fatto l’ipotesi che i sottoprogrammi (procedure e funzioni) fossero definiti internamente al programma principale. Se questo fosse l’unico modo di definire i sottoprogrammi, il linguaggio soffrirebbe dei seguenti inconvenienti: Prof. Filippo TROTTA
  • 55. a) Una volta scritto un sottoprogramma di uso generale (ad es. un algoritmo di ordinamento), non è possibile riutilizzarlo in altri programmi se non ricopiandone il testo. b) Non è possibile mettere a punto separatamente (magari da parte di diverse persone) sottoprogrammi diversi apparteneneti ad uno stesso progetto di programmazione. c) L’impiego di sottoprogrammi inteni può incoraggiare un certo abuso dell’ambiente non locale che porta spesso ad errori e all’illeggibilità dei sottoprogrammi stessi. Prof. Filippo TROTTA
  • 56. Più sottoprogrammi esterni legati logicamente fra loro (e/o operanti su un unico ambiente non locale) sono riuniti in un modulo o libreria. Si tratta di un modo abbastanza moderno di strutturare e concepire i programmi, secondo una metodologia che potremmo chiamare programmazione modulare. Subroutine Esempi di utilizzo del Modulo Function variabile Prof. Filippo TROTTA