Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoVegliantino Carlucci Modificato 11 anni fa
1
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno 1 2005/2006
2
AA 2005/06 Lab Programmazione L. Capra 2 Procedura Costrutto sintattico presente in quasi tutti i LdP di alto livello che consente di raggruppare un blocco di istruzioni (che implementano un algoritmo) in maniera che possano essere richiamate in qualunque punto di un programma attraverso un nome Oltre al nome, una procedura è caratterizzata dallavere zero o più variabili di input (contenenti i dati su cui opera la procedura) detti parametri I parametri usati nella definizione di una procedura sono detti formali (essi rappresentano dei dati generici) I parametri formali vengono associati a valori effettivi (detti parametri attuali) al momento di una chiamata alla procedura
3
AA 2005/06 Lab Programmazione L. Capra 3 Parametri I parametri formali di una procedura, come ogni altra variabile di un programma, devono essere dichiarati di un certo tipo Il numero ed il tipo dei parametri formali varia da procedura a procedura Quando si richiama una procedura occorre che vi sia una corrispondenza in numero, tipo e ordine di apparizione tra i parametri attuali e quelli formali (associazione di tipo posizionale) Es. se la procedura A è stata definita con due parametri formali, di cui il primo di tipo intero ed il secondo di tipo stringa, allora A(2,due) è un esempio di chiamata corretta, mentre A(due,2) è un esempio di chiamata scorretta
4
AA 2005/06 Lab Programmazione L. Capra 4 Parametri (2) I parametri attuali usati nella chiamata ad una procedura, possono essere a loro volta delle variabili, o più in generale delle espressioni (compatibili per tipo rispetto ai corrispondenti parametri formali) Es.A( x + y * 3, sommaprodotto) Lespressione usata come parametro attuale viene prima valutata, quindi il valore risultante viene assegnato al parametro formale corrispondente Le variabili usate come parametri attuali possono essere modificate o meno dallesecuzione della procedura (nel primo caso si parla di side-effect, o parametri di I/O) Tale aspetto è molto importante, e dipende dalle modalità di passaggio dei parametri, che possono essere diverse a seconda dei linguaggi
5
AA 2005/06 Lab Programmazione L. Capra 5 Funzioni Una funzione è una procedura che restituisce un valore di tipo fissato come risultato di un calcolo Tale valore è reso disponibile alla istruzione contenente la chiamata alla funzione (ambiente chiamante) Quindi una (chiamata a funzione) può comparire allinterno di qualsiasi espressione Es. supponendo che A ritorni un intero: x = w - A(x*x,dueallax) + 3
6
AA 2005/06 Lab Programmazione L. Capra 6 Una funzione che calcola x y FUN eleva PAR x: INT,y: INT INT VAR r: INT ENDVAR IF y < 0 or (x == 0 and y ==0) THEN ABORT 1 ELSE r = 1 WHILE y > 0 DO r = r * x y = y – 1; REPEAT return r ENDIF ENDFUN
7
AA 2005/06 Lab Programmazione L. Capra 7 Descrizione FUN eleva PAR x: INT,y: INT INT VAR r: INT ENDVAR IF y < 0 or (x == 0 and y ==0) THEN ABORT 1 ELSE r = 1 WHILE y > 0 DO r = r * x y = y – 1; REPEAT return r ENDIF ENDFUN Parametri formali tipo rientro
8
AA 2005/06 Lab Programmazione L. Capra 8 Descrizione FUN eleva PAR x: INT,y: INT INT VAR r: INT ENDVAR IF y < 0 or (x == 0 and y ==0) THEN ABORT 1 ELSE r = 1 WHILE y > 0 DO r = r * x y = y – 1; REPEAT return r ENDIF ENDFUN Parametri formali tipo rientro Var. locali
9
AA 2005/06 Lab Programmazione L. Capra 9 Descrizione FUN eleva PAR x: INT,y: INT INT VAR r: INT ENDVAR IF y < 0 or (x == 0 and y ==0) THEN ABORT 1 ELSE r = 1 WHILE y > 0 DO r = r * x y = y – 1; REPEAT return r ENDIF ENDFUN Parametri formali tipo rientro Var. locali istruzione rientro istruzione rientro anomalo
10
AA 2005/06 Lab Programmazione L. Capra 10 Esercizio: conversione da base 2 Input : stringa di bit Es 1001101 Output: valore intero corrispondente (base 10) : 77 77 = 1 · 2 6 + 1 · 2 3 + 1 · 2 2 +1 · 2 0 Assunzione: esistono due funzioni predefinite stringlength e getchar per calcolare la lunghezza di una stringa data, e conoscere il carattere in una posizione data Suggerimento: usare la funzione eleva
11
AA 2005/06 Lab Programmazione L. Capra 11 funzione di conversione FUN convertFrom2to10 PAR bits: STRING INT VAR res, i, nb: INT; c CHAR ENDVAR nb = stringlength (bits) IF nb == 0 THEN return -1 %codice di errore% ELSE return res ENDIF ENDFUN
12
AA 2005/06 Lab Programmazione L. Capra 12 funzione di conversione FUN convertFrom2to10 PAR bits: STRING INT VAR res, i, nb: INT; c CHAR ENDVAR nb = stringlength (bits) IF nb == 0 THEN return -1 %codice di errore% ELSE res = 0 i = 0 DO i = i + 1 WHILE i < nb return res ENDIF ENDFUN
13
AA 2005/06 Lab Programmazione L. Capra 13 funzione di conversione FUN convertFrom2to10 PAR bits: STRING INT VAR res, i, nb: INT; c CHAR ENDVAR nb = stringlength (bits) IF nb == 0 THEN return -1 %codice di errore% ELSE res = 0 i = 0 DO c= getchar(bits,i) IF c =/= '1' and c =/= '0 THEN return –2 %codice di errore% ELSE i = i + 1 ENDIF WHILE i < nb return res ENDIF ENDFUN
14
AA 2005/06 Lab Programmazione L. Capra 14 funzione di conversione FUN convertFrom2to10 PAR bits: STRING INT VAR res, i, nb: INT; c CHAR ENDVAR nb = stringlength (bits) IF nb == 0 THEN return –1 %codice di errore% ELSE res = 0 i = 0 DO c= getchar(bits,i) IF c =/= '1' and c =/= '0 THEN return –2 %codice di errore% ELSE IF c == '1 THEN res = res + eleva(2, nb - i -1) ENDIF i = i + 1 ENDIF WHILE i < nb return res ENDIF ENDFUN
15
AA 2005/06 Lab Programmazione L. Capra 15 Esercizio: conversione da base 10 in base 2 Input : numero intero Es:20 Output: stringa binaria corrispondente Es. : 10100 Algoritmo: 20 2 10 2 5 2 2 2 1 2 Assunzione: loperatore + può essere anche usato per concatenare stringhe 10100 0 0 1 0 1 resti
16
AA 2005/06 Lab Programmazione L. Capra 16 Conversione inversa FUN convertFrom10to2 PAR num: INT STRING VAR c CHAR; res: STRING ENDVAR res = %stringa vuota% IF num < 0 THEN return res%codice di errore% ELSE IF num == 0 THEN return 0 ELSE return res ENDIF ENDFUN
17
AA 2005/06 Lab Programmazione L. Capra 17 Conversione inversa FUN convertFrom10to2 PAR num: INT STRING VAR c CHAR; res: STRING ENDVAR res = %stringa vuota% IF num < 0 THEN return res%codice di errore% ELSE IF num == 0 THEN return 0 ELSE DO num = num / 2 %divisione intera% WHILE num =/= 0 return res ENDIF ENDFUN
18
AA 2005/06 Lab Programmazione L. Capra 18 Conversione inversa FUN convertFrom10to2 PAR num: INT STRING VAR c CHAR; res: STRING ENDVAR res = %stringa vuota% IF num < 0 THEN return res%codice di errore% ELSE IF num == 0 THEN return 0 ELSE DO IF (num mod 2) == 0 THEN c = 0%resto zero% ELSE c = 1 ENDIF res = c + res%appende c a sinistra di res% num = num / 2 %divisione intera% WHILE num =/= 0 return res ENDIF ENDFUN
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.