Verso una metodologia di programmazione:i sottoprogrammi                Prof. Filippo TROTTA
Per determinare la soluzione algoritmica di unproblema complesso è, in generaleconveniente adottare la seguente metodologi...
METODOLOGIA DI         PROGRAMMAZIONE            TOP-DOWN     dal generale al particolare, peraffinamenti successivi o per...
I vantaggi di tale approccio sono:• migliore schematizzazione del problema;• migliore comprensibilità;• facilità di indivi...
PROBLEMA 1Determinare il peso massimo, date tre parolebinarie a, b, c di 18 bit.(Ricordimano che per peso P(X) di una paro...
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) <<ASS...
PROBLEMA 2Determinare il peso di una parola binaria Xdi N bit.(La parola X è considerata inserita in un vettore diN elemen...
L’algoritmo 2 sarà:     I=1     P=0     DO           P = P + X(I)           I=I+1     LOOP UNTIL I > N                    ...
A questo punto abbiamo tutti glielementi per risolvere il problema 1,ma dobbiamo trovare il modo e leregole per l’utilizza...
In pratica vengono utilizzate due tecniche:a)   MACRO-ESPANSIONE: si     utilizzano gli algoritmi 1 e 2 per     definirne ...
MACRO-ESPANSIONEAlgor. 1 + Algor. 2 Algoritmo 3                                             Risultati   Dati              ...
SOTTOPROGRAMMAAlgoritmo 1Algoritmo 2                          Risultati  Dati              ESECUTORE              Prof. Fi...
SOLUZIONE A MACRO                                  IF d <= e THEN<<CARICA (a,b,c)>>                                    d=e...
SOLUZIONE A SOTTOPROGRAMMA                                       Interfaccia che associa i parametri <<CARICA (a,b,c)>>   ...
Interfaccia che associa i         parametriFORMALI a quelli ATTUALI   dall’esempio sarà:   Parametri formali:             ...
CONFRONTO FRA MACRO E SOTTOPROGRAMMA Il confronto fra le due organizzazioni si effettua relativamente ad alcuni parametri:...
OCCUPAZIONE DI MEMORIAL’organizzazione a sottoprogrammimolto più vantaggiosa quanta più èfrequente    in    un    algoritm...
TEMPO DI ESECUZIONEL’organizzazione a sottoprogrammaè tanto peggiore, rispetto a quella amacro, quanto più tempo si spende...
COSTO DI UTILIZZAZIONESi intende il costo delle operazioni necessarie pergiungere all’esecuzione del programma. Nel casodi...
Dalle considerazioni fatte si può dire che:     NESSUNA DELLE DUE   ORGANIZZAZIONI PREVALE        SULL’ALTRA.             ...
Ambiente locale e non-locale di un           sottoprogrammaL’ambiente è l’insieme di tutte le entitàcaratterizzate da un n...
Supponiamo che un programma P, chiami unsottoprogramma P’ e chiediamoci: qual’èl’ambiente di P’? cioè qual’è l’insieme del...
COMPRENSIONE AMBIENTI NON-LOCALEM          (progr. principale)Dim X,Y,Z as integer;                         sottoprog. P  ...
Regole di “scoping”M          (progr. principale)Dim X,Y,Z as integer;                                    Regola 1. L’ambi...
Regola 2. Se neiM          (progr. principale)                          programmi contenenti undim X,Y,Z as integer;      ...
Regola 3. I nomi deiM          (progr. principale)Dim X,Y,Z as integer;                                                   ...
OCCORRE LIMITAREM          (progr. principale)                          AL MINIMO LAdim X,Y,Z as integer;                 ...
Esercizio n.1Un programma principale M di un linguaggio strutturatoa blocchi contiene tre variabili intere A, B, C. Mconti...
Risposta Esercizio n.1M          (progr. principale)dimA,B,C as integer;                         sottoprog. P             ...
Esercizio n.2Risolvere il problema precedentesupponenndo che le procedure R e Qabbiano dei parametri formali di nomeB, C e...
Risposta Esercizio n.2M          (progr. principale)dim A,B,C as integer;                         sottoprog. P            ...
Esercizio n.3Dim A, B as integerPP PROVA_COMPRENSIONE_AMBIENTI_NON_LOCALIB = 10; A = 10; chiama P; chiama Q; scrivi A, BEn...
Esercitazione Visual BasicCreare un progetto VB che:4.   Carichi un array di N numeri casuali5.   Visualizzi l’array in un...
I parametri e la loro trasmissione.Si possono dividere i parametri in tre classi direzionali:- parametri di ingresso (in)-...
Schema riassuntivo           Direzionalità dei parametriO                        in               out   in/outc     Mc    ...
Interfacciamento fra chiamante e chiamato Interfaccia di comunicazione:Sub <nome-sub> ([<lista parametri formali>]) Per la...
Calcolo del quoziente e resto per differenze successiveSub DIVISIONE (ByVal D, D1 as integer; ByRef Q, R as integer) R=D Q...
Per quanto riguarda il numero e il tipo di argomenti,occorre, in generale, attenersi alle seguenti regole:il numero dei pa...
Esercizio n.4Scrivere l’interfaccia di comunicazione deisottoprogrammi che risolvono i seguenti problemi:a)    sommare q a...
Risposta esercizio n.4a) Sub sommaq (ByVal X as integer; ByRef S as integer)b) Sub equazione (ByVal A,B,C as integer; ByRe...
I SOTTOPROGRAMMI FUNZIONALIA differenza delle procedure, chemanifestano i loro effetti attraverso dellemodifiche      all’...
La definizione assume l’aspetto di questo tipo:function <nome_function> ([<lista dei parametri formali>]) [as <tipo risult...
Definizione della funzione per il calcolo del MCD                                                      algoritmoFunction M...
riferito all’esempio è perfettamente lecito scrivere:A = MCD(MCD(A, B), MCD(B, 3)) + 1oMsgBox (“Il mcd è “ & MCD(A + B, A ...
Esercizio n.5Scrivere l’interfaccia di comunicazione delle function   che risolvono i seguenti problemi:• calcolare l’impo...
Risposta esercizio n.5a) function sconto(ByVal X as Long, ByVal Y as integer)as Longb) function ordine(ByRef V() as Intege...
I SOTTOPROGRAMMI RICORSIVISe si stabilisce che un sottoprogramma puòchiamare qualsiasi altro sottoprogramma (adesso access...
L’algoritmo di Euclide per trovare il MCD fra m e n con(m > n) potrebbe essere espresso come segue a parolecome segue:{per...
Definizione ricorsiva della funzione per il             calcolo del MCDfunction MCD (ByVal M,N as integer) as integerDim R...
Matematica                          ProgrammazioneCostruire un sottoprogrammaricorsivo per un dato problemacorrisponde a d...
Affinché un sottoprogramma ricorsivo siacorrettamente concepito (in pratica perché nonvada in loop infinito):a)   deve ess...
Non tutti i linguaggi consentono la ricorsione (ad es.FORTRAN, BASIC, COBOL). Ciò è dovuto al fatto chela ricorsione richi...
Esercizio n.61)     scrivere una function ricorsiva per il calcolo del       fattoriale di un numero N >= 0 (che succede s...
SOTTOPROGRAMMI ESTRENI, MODULI E     LA FASE DI COLLEGAMENTOFino a questo punto abbiamo fatto l’ipotesiche i sottoprogramm...
a) Una volta scritto un sottoprogramma di usogenerale (ad es. un algoritmo di ordinamento), nonè possibile riutilizzarlo i...
Più sottoprogrammi esterni legati logicamente fra loro (e/ooperanti su un unico ambiente non locale) sono riuniti inun mod...
FINEProf. Filippo TROTTA
Upcoming SlideShare
Loading in …5
×

Sottoprogrammi in Visual Basic

2,443 views

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,443
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Sottoprogrammi in Visual Basic

  1. 1. Verso una metodologia di programmazione:i sottoprogrammi Prof. Filippo TROTTA
  2. 2. Per determinare la soluzione algoritmica di unproblema complesso è, in generaleconveniente 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. 3. METODOLOGIA DI PROGRAMMAZIONE TOP-DOWN dal generale al particolare, peraffinamenti successivi o per individuazione di sottoproblemi Prof. Filippo TROTTA
  4. 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. 5. PROBLEMA 1Determinare il peso massimo, date tre parolebinarie a, b, c di 18 bit.(Ricordimano che per peso P(X) di una parolabinaria X, si intende il numero di bit ad 1 di X). 101 101 101 Prof. Filippo TROTTA
  6. 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. 7. PROBLEMA 2Determinare il peso di una parola binaria Xdi N bit.(La parola X è considerata inserita in un vettore diN elementi). 101 101 101 Prof. Filippo TROTTA
  8. 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. 9. A questo punto abbiamo tutti glielementi per risolvere il problema 1,ma dobbiamo trovare il modo e leregole per l’utilizzazione congiuntadel problema 1 con il problema 2. PROBLEMA 1 PROBLEMA 2 Prof. Filippo TROTTA
  10. 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. 11. MACRO-ESPANSIONEAlgor. 1 + Algor. 2 Algoritmo 3 Risultati Dati ESECUTORE Prof. Filippo TROTTA
  12. 12. SOTTOPROGRAMMAAlgoritmo 1Algoritmo 2 Risultati Dati ESECUTORE Prof. Filippo TROTTA
  13. 13. SOLUZIONE A MACRO IF d <= e THEN<<CARICA (a,b,c)>> d=ei=1 END IFd=0 i=1 IL PESODO e=0 MASSIMO d = d + a(i) DO E’ IN d i=i+1 e = e + c(i)LOOP UNTIL i > 18 i=i+1i=1 LOOP UNTIL i > 18e=0 IF d <= e THENDO d=e e = e + b(i) END IF i=i+1 MSGBOX(“Il maggiore è “&d)LOOP UNTIL i > 18 Prof. Filippo TROTTA
  14. 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. 15. Interfaccia che associa i parametriFORMALI 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. 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. 17. OCCUPAZIONE DI MEMORIAL’organizzazione a sottoprogrammimolto più vantaggiosa quanta più èfrequente in un algoritmol’esecuzione di sottoprogrammisempre uguali. Prof. Filippo TROTTA
  18. 18. TEMPO DI ESECUZIONEL’organizzazione a sottoprogrammaè tanto peggiore, rispetto a quella amacro, quanto più tempo si spendeper la chiamata e l’associazione deiparametri. Prof. Filippo TROTTA
  19. 19. COSTO DI UTILIZZAZIONESi intende il costo delle operazioni necessarie pergiungere all’esecuzione del programma. Nel casodi sottoprogrammi è data dalla codifica dellechiamate e dal caricamento del sottoprogramma.Nel caso di macro ogni espansione richiede, ingenerale, lesame di tutta la macro: operazioneche è in generale più costosa di quelle richiesteper la chiamata del corrispondente programma. Prof. Filippo TROTTA
  20. 20. Dalle considerazioni fatte si può dire che: NESSUNA DELLE DUE ORGANIZZAZIONI PREVALE SULL’ALTRA. Prof. Filippo TROTTA
  21. 21. Ambiente locale e non-locale di un sottoprogrammaL’ambiente è l’insieme di tutte le entitàcaratterizzate da un nome, accessibili daun programma (costanti simboliche,variabili, sottoprogrammi, ecc.) Prof. Filippo TROTTA
  22. 22. Supponiamo che un programma P, chiami unsottoprogramma P’ e chiediamoci: qual’èl’ambiente di P’? cioè qual’è l’insieme dellevariabili 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. 23. COMPRENSIONE AMBIENTI NON-LOCALEM (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. 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. 25. Regola 2. Se neiM (progr. principale) programmi contenenti undim 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. 26. Regola 3. I nomi deiM (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. 27. OCCORRE LIMITAREM (progr. principale) AL MINIMO LAdim 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. 28. Esercizio n.1Un programma principale M di un linguaggio strutturatoa blocchi contiene tre variabili intere A, B, C. Mcontiene due sottoprogrammi interni P e Q i cui ambientilocali sono costituiti dalle variabili intere A, X, Y e B, C,Y rispettivamente.P, a sua volta, contiene un sottoprogramma interno Ravente come variabili locali A, X, D intere.Descrivere gli ambienti non locali delle treprocedure P, Q, R. Prof. Filippo TROTTA
  29. 29. Risposta Esercizio n.1M (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. 30. Esercizio n.2Risolvere il problema precedentesupponenndo che le procedure R e Qabbiano dei parametri formali di nomeB, C e A, X rispettivamente. Prof. Filippo TROTTA
  31. 31. Risposta Esercizio n.2M (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. 32. Esercizio n.3Dim A, B as integerPP PROVA_COMPRENSIONE_AMBIENTI_NON_LOCALIB = 10; A = 10; chiama P; chiama Q; scrivi A, BEnd PP A B Ap 10 10 11 Sub P:Sub P 8 12 9 B=A+1Dim A as integer Sub Q: A = B + 1; B = A + 1 {fine proc. P} B=A-1 A=B-1Sub Q B = A - 1; A = B - 1 {fine proc. Q}Cosa scrive il programma? Quali istruzioni di P e Qprovocano degli effetti Prof. Filippo TROTTA laterali?
  33. 33. Esercitazione Visual BasicCreare un progetto VB che:4. Carichi un array di N numeri casuali5. Visualizzi l’array in una TextBox non modificabile6. Ordini L’array7. Visualizzi l’array ordinato in un’altra TextBoxN.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. 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 deiparametri nei più comuni linguaggi di programm. sono:- passaggio per valore- passaggio per indirizzo o “by reference” Prof. Filippo TROTTA
  35. 35. Schema riassuntivo Direzionalità dei parametriO in out in/outc Mc e Tipo VALORE INDIRIZZO INDIRIZZOu d m semplice p.a. = p.a. = p.a. =p i o espressione variabile variabilea rz ii a Tipo INDIRIZZO INDIRIZZO INDIRIZZOo strutturato p.a. = p.a. = p.a. =n variabile variabile variabilee Prof. Filippo TROTTA
  36. 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. 37. Calcolo del quoziente e resto per differenze successiveSub 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 loopEnd Sub sottoprogrammi una possibile chiamata: DIVISIONE (A + B, 3, C, B); parametri attuali Prof. Filippo TROTTA
  38. 38. Per quanto riguarda il numero e il tipo di argomenti,occorre, in generale, attenersi alle seguenti regole:il numero dei parametri attuali deve uguagliarequello dei parametri formali.il tipo di un parametro attuale deve essere uguale,o almeno compatibile, con quello delcorrispondente parametro formale. Prof. Filippo TROTTA
  39. 39. Esercizio n.4Scrivere l’interfaccia di comunicazione deisottoprogrammi 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. 40. Risposta esercizio n.4a) 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. 41. I SOTTOPROGRAMMI FUNZIONALIA differenza delle procedure, chemanifestano i loro effetti attraverso dellemodifiche all’ambiente (sia conassegnamenti alle variabili non locali, siaattraverso i parametri di out e in/out), lefunction manifestano il loro effettorestituendo un valore al programmachiamante. Prof. Filippo TROTTA
  42. 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 occorrespecificare quale valore restituire. La tecnica piùdiffusa è:<nome_function> <espressione> Prof. Filippo TROTTA
  43. 43. Definizione della funzione per il calcolo del MCD algoritmoFunction MCD(ByVal x, y As Integer) As Integer diDim 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=xEnd Function x=y y=h End Sub Prof. Filippo TROTTA
  44. 44. riferito all’esempio è perfettamente lecito scrivere:A = MCD(MCD(A, B), MCD(B, 3)) + 1oMsgBox (“Il mcd è “ & MCD(A + B, A - B))sono invece sintatticamente errate scritture come:MCD(A, B) = wo A=InputBox() B=InputBox() MCD(A, B); Prof. Filippo TROTTA
  45. 45. Esercizio n.5Scrivere 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. 46. Risposta esercizio n.5a) function sconto(ByVal X as Long, ByVal Y as integer)as Longb) function ordine(ByRef V() as Integer) as boolean c) function converte (ByVal N as integer) as stringd) function contr_data (ByVal S as string) as boolean dove S conterrà GG/MM/AAe) function primo (ByVal n as integer) as integer Prof. Filippo TROTTA
  47. 47. I SOTTOPROGRAMMI RICORSIVISe si stabilisce che un sottoprogramma puòchiamare qualsiasi altro sottoprogramma (adesso accessibile) dobbiamo esaminare lapossibilità che richiami se stesso.Quando ciò avviene si parla diprogrammazione ricorsiva e l’azione o ladenotazione del richiamo viene dettaricorsione. Prof. Filippo TROTTA
  48. 48. L’algoritmo di Euclide per trovare il MCD fra m e n con(m > n) potrebbe essere espresso come segue a parolecome segue:{per trovare MCD(m, n) si effettui la divisione fram ed n. Sia r il resto della divisione. Se r = 0 alloran è il MCD, altrimenti il MCD(m, n) è uguale alMCD(n, r)} cioè:MCD(15, 9) = MCD(9, 6) = MCD(6, 3 ) = 3certamente si ricorre ma su argomenti sempre più piccolifino a trovare un caso in cui non si ricorre più. Prof. Filippo TROTTA
  49. 49. Definizione ricorsiva della funzione per il calcolo del MCDfunction MCD (ByVal M,N as integer) as integerDim 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. 50. Matematica ProgrammazioneCostruire un sottoprogrammaricorsivo per un dato problemacorrisponde a dare una definizioneper induzione della sua soluzione. Prof. Filippo TROTTA
  51. 51. Affinché un sottoprogramma ricorsivo siacorrettamente concepito (in pratica perché nonvada 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. 52. Non tutti i linguaggi consentono la ricorsione (ad es.FORTRAN, BASIC, COBOL). Ciò è dovuto al fatto chela ricorsione richiede un tipo di gestione dinamicadegli ambienti locali.Una chiamata ricorsiva comporta (come per unachiamata non ricorsiva) il salvataggio delle informazioninecessarie a riprendere successivamente il calcolo, ecioè:- il punto di ritorno- i parametri attuali- lo stato dell’ambiente locale. Prof. Filippo TROTTA
  53. 53. Esercizio n.61) 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,k3) 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. 54. SOTTOPROGRAMMI ESTRENI, MODULI E LA FASE DI COLLEGAMENTOFino a questo punto abbiamo fatto l’ipotesiche i sottoprogrammi (procedure e funzioni)fossero definiti internamente al programmaprincipale.Se questo fosse l’unico modo di definire isottoprogrammi, il linguaggio soffrirebbe deiseguenti inconvenienti: Prof. Filippo TROTTA
  55. 55. a) Una volta scritto un sottoprogramma di usogenerale (ad es. un algoritmo di ordinamento), nonè possibile riutilizzarlo in altri programmi se nonricopiandone il testo.b) Non è possibile mettere a punto separatamente(magari da parte di diverse persone)sottoprogrammi diversi apparteneneti ad unostesso progetto di programmazione.c) L’impiego di sottoprogrammi inteni puòincoraggiare un certo abuso dell’ambiente nonlocale che porta spesso ad errori e all’illeggibilitàdei sottoprogrammi stessi. Prof. Filippo TROTTA
  56. 56. Più sottoprogrammi esterni legati logicamente fra loro (e/ooperanti su un unico ambiente non locale) sono riuniti inun modulo o libreria.Si tratta di un modo abbastanza moderno di strutturare econcepire i programmi, secondo una metodologia chepotremmo chiamare programmazione modulare.Subroutine Esempi di utilizzo del Modulo Function variabile Prof. Filippo TROTTA
  57. 57. FINEProf. Filippo TROTTA

×