Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Informatica B
Daniele Loiacono
Funzioni
A cosa servono le funzioni? 3
x = input('inserisci x: ');
fx=1
for i=1:x
fx = fx*x
end
if (fx>220)
y = input('inserisci y: ');
fy=1
for i=1:y
fy = fy*y
end
end
Daniele Loiacono
A cosa servono le funzioni? 4
x = input('inserisci x: ');
fx=1
for i=1:x
fx = fx*x
end
if (fx>220)
y = input('inserisci y: ');
fy=1
for i=1:y
fy = fy*y
end
end
Daniele Loiacono
A cosa servono le funzioni? 5
Riusabilità
Scrivo una sola volta codice utilizzato spesso
Modifiche e correzioni sono gestibili facilmente
Leggibilità
Incapsulo porzioni di codice complesso
Aumento il livello di astrazione dei miei programmi
Flessibilià
Posso aggiungere funzionalità non presenti nelle funzioni
di libreria
Daniele Loiacono
Usiamo uno script file? 6
Daniele Loiacono
Limiti degli script-files 7
Problemi:
Come fornisco l’input allo script?
Dove recupero l’output?
Gli script utilizzano le variabili dello workspace:
x = input('inserisci x: ');
n=x Prepara l’input in n
f=1
fattoriale chiama lo script
for i=1:n
fx=f Salva il risultato in f
if (f>220) f = f*i
y = input('inserisci y: '); end
n=y Prepara l’input
fattoriale.m
fattoriale chiama lo script
fy=f Salva il risultato in f
end
Daniele Loiacono
Limiti degli script-files (2) 8
Workspace
n=x f=1
fx x n f
fattoriale for i=1:n
fx=f f = f*i
end
Daniele Loiacono
Le funzioni 9
testata
function f=fattoriale(n)
f=1 n è l’argomento della
funzione (serve a
for i=1:n fornire l’input)
f = f*i corpo
f è il valore di ritorno
end della funzione (serve a
fornire l’output)
Daniele Loiacono
Le funzioni (2) 10
function f(x,y)
Esempio:
Daniele Loiacono
Invocazione 11
Esempio
x = input('inserisci x: ');
fx = fattoriale(x)
if (f>220)
y = input('inserisci y: ');
fy=fattoriale(y)
end
Daniele Loiacono
I parametri 12
Definizioni:
I parametri formali sono le variabili usate come argomenti
e valore di ritorno nella definizione della funzione
I parametri attuali sono i valori (o le variabili) usati come
argomenti/valore di ritorno nella invocazione della
funzione
Esempio:
function f=fattoriale(n)
f=1
for i=1:n f ed n sono parametri formali
f = f*i
fx e 5 sono parametri attuali
end
>> fx = fattoriale(5)
Daniele Loiacono
I parametri (2) 13
Daniele Loiacono
Esecuzione di una funzione 14
Daniele Loiacono
Esecuzione di una funzione: esempio 15
x=3
w=2 W “locale” dopo(1’) W “locale” (4’)
Daniele Loiacono
File funzione 16
Daniele Loiacono
Esempi 17
>> A=[1, 2, 3, 4, 3, 4, 5, 4, 5, 6]
A = 1 2 3 4 3 4 5 4 5 6
>> [p, i]=cerca(4,A)
p = 1
i = 4 6 8
Daniele Loiacono
Esempi (2) 18
function
[t]=trasposta(m)
[r,c]=size(m);
for i=1:r
for j=1:c
t(j,i)=m(i,j);
end;
end
>> m=[1,2,3,4;5,6,7,8;9,10,11,12]
m =
1 2 3 4
5 6 7 8
9 10 11 12
>> trasposta(m)
ans =
1 5 9
2 6 10
3 7 11
4 8 12
Daniele Loiacono
Esempi (3) 19
Daniele Loiacono
Ricorsione
Ricorsione 21
Daniele Loiacono
Programmazione ricorsiva 22
Daniele Loiacono
Esempio: il fattoriale 23
Definizione:
f(n) = n! = n*(n-1)*(n-2)*…*3*2*1
Passo ricorsivo:
f(n) = n*f(n-1)
Caso base:
f(0)=1
function [f]=factRic(n)
if (n==0)
f=1;
else
f=n*factRic(n-1);
end
Daniele Loiacono
Funzionamento ricorsione 24
function [f]=factRic(n)
if (n==0)
f=1;
else
f=n*factRic(n-1);
end
Daniele Loiacono
Funzionamento ricorsione 25
function [f]=factRic(n)
if (n==0)
f=1;
else
f=n*factRic(n-1);
factRic n:2 f: ...
end
Daniele Loiacono
Funzionamento ricorsione 26
function [f]=factRic(n)
if (n==0)
f=1; factRic n:1 f: ...
else
f=n*factRic(n-1);
factRic n:2 f: ...
end
Daniele Loiacono
Funzionamento ricorsione 27
Daniele Loiacono
Funzionamento ricorsione 28
Daniele Loiacono
Funzionamento ricorsione 29
function [f]=factRic(n)
if (n==0)
f=1; factRic n:1 f: 1
else
f=n*factRic(n-1);
factRic n:2 f: ...
end
Daniele Loiacono
Funzionamento ricorsione 30
function [f]=factRic(n)
if (n==0)
f=1;
else
f=n*factRic(n-1);
factRic n:2 f: 2
end
Daniele Loiacono
Funzionamento ricorsione 31
function [f]=factRic(n)
if (n==0)
f=1;
else
f=n*factRic(n-1);
end
factRic n:3 f: 6
Daniele Loiacono
Funzionamento ricorsione 32
function [f]=factRic(n)
if (n==0)
f=1;
else
f=n*factRic(n-1);
end
factRic n:3 f: 6
Daniele Loiacono
Esempio: Fibonacci 33
function [fib]=FiboRic(n)
if n==1 | n==2
fib=1;
else
fib=FiboRic(n-2)+FiboRic(n-1);
end
Daniele Loiacono
Esempio: MCD 34
Algoritmo di Euclide
se m = n, MCD(m,n) = m (caso base)
se m > n, MCD(m,n) = MCD(m-n,n) (caso risorsivo)
se m < n, MCD(m,n) = MCD(m,n-m) (caso risorsivo)
Esempio: MCD(30,18)
30 18
12 18
12 6
6 6
Daniele Loiacono
Esempio: MCD 35
Algoritmo di Euclide
se m = n, MCD(m,n) = m (caso base)
se m > n, MCD(m,n) = MCD(m-n,n) (caso risorsivo)
se m < n, MCD(m,n) = MCD(m,n-m) (caso risorsivo)
Implementazione
function [M]=MCDeuclidRic(m,n)
if m==n
M=m;
else
if m>n
M = MCDeuclidRic(m-n,n);
else
M = MCDeuclidRic(m,n-m);
end
end
Daniele Loiacono
Problemi nell’uso della ricorsione 36
Daniele Loiacono
Problemi nell’uso della ricorsione 37
function [fl]=Fiblist(n)
fl(1)=1;
fl(2)=1;
for k=3:n Funzione iterativa che
fl(k)=fl(k-2)+fl(k-1); calcola i primi n numeri di
end fibonacci
Daniele Loiacono
Variabili funzione
Variabili funzioni 39
Daniele Loiacono
Assegnamento di un valore di tipo 40
funzione
Handle di una funzione esistente
f = @nome_funzione
Esempio
>> seno=@sin
seno = @sin
>> seno(pi/2)
ans = 1
Daniele Loiacono
Funzioni di ordine superiore 41
Daniele Loiacono
Esempio: funzione accumulatore 42
f(…f(f(f(u,a(1)),a(2)),a(3))…,a(length(a)))
function [x]=acc(f, a, u)
x=u;
for i=1:length(a)
x=f(x, a(i));
end
function [s]=sommatoria(a)
som=@(x,y)x+y;
s=acc(som,a,0);
Daniele Loiacono