Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Funzioni
Prof. E. Clementini
Le funzioni
• Suddivisione in sottoproblemi:
– non perdere di vista la strategia risolutiva globale;
– affrontare e risolvere un sottoproblema
indipendentemente dagli altri.
main
chiamata/
ritorno
S1 S2 S3
S4 S5
def f1():
print("A")
Quindi si ha la chiamata del sottopragramma e la
def main(): definizione del sottoprogramma. Si definisce un
f1() sottoprogramma ma non si conosce se
print("D")
f2()
for i in [1,2,3]: f1()
main() è un'istruzione, identificatore con parantesi non
è più una variabile ma una funzione (chiamata a
main() funzione), bisogna andare a cercare dov'è stato
definito main, a questo punto il programma effettua le
istruzioni all'interno della definizione di main.
print("A")
main() 1
4
f1()
print("D") 5
f2() 6 f3 ()
for i in [1,2,3]: f1()
print("C")
f2 () 3
2 print("B")
f3()
import math
def DistanzaTraDuePunti(x1,y1,x2,y2):
dx=x2-x1
dy=y2-y1
distquadrato=dx**2+dy**2
risultato=math.sqrt(distquadrato) Si sfrutta una funzione di libreria
return risultato sqrt., con import math si
riescono ad importare tutte le
a0=1 definzioni del programma
a1=2 contenute nella libreria math.
b0=2 return risultato rappresenta la
b1=2 funzione per restituire al
print(DistanzaTraDuePunti(a0,a1,b0,b1)) programma il risultato dalla
funzione.
def SommaMatrici(a,b,r,c):
m=[[0]*c for i in range(r)]
for i in range(r):
for j in range(c):
m[i][j]=a[i][j]+b[i][j]
return m
def main():
print ("Somma di due matrici")
nr=int(input("Inserire il numero di righe "))
nc=int(input("Inserire il numero di colonne "))
A=LetturaMatrice(nr,nc)
print (A)
B=LetturaMatrice(nr,nc)
print (B)
C=SommaMatrici(A,B,nr,nc)
print("La loro somma è")
print(C)
C=SommaMatrici(A,B,nr,nc)
Chiamata main() nr r
nc c
Inizio Chiamata
LetturaMatrice(nr,nc) A a
i
return a B
j
Fine Chiamata C
LetturaMatrice(nr,nc)
Chiamata main() nr r
nc c
Inizio Chiamata
LetturaMatrice(nr,nc) A a
i
return a B
j
Fine Chiamata C
LetturaMatrice(nr,nc)
Chiamata main() nr r
nc c
Inizio Chiamata
SommaMatrici(A,B,nr,nc) A a
return m B b
Fine Chiamata C m
SommaMatrici(A,B,nr,nc) i
j
def f1():
print("A")
def main():
f1()
print("D")
f2()
for i in [1,2,3]: f1()
main()
def f1():
print("A")
def main():
f1()
print("D")
f2()
for i in [1,2,3]: f1()
main()
lista=[3,4,5,6,7]
stampa_lista_doppia(lista)
print(lista)
lista=[3,4,5,6,7]
stampa_lista_doppia(lista)
print(lista)
Esempio funzione:
def Somma(x,y):
return x+y
Esempi di chiamata:
Somma(a*b,b+1)
Somma(4,5)
a=11
b=4
[q,r]=divisione(a,b)
print("quoziente=",q)
print("resto=",r)
numero
base
quoziente=
numero
quoziente
false
!=0
true
resto=
quoziente%base
resto
quoziente=
quoziente/base
def ConvBaseQualsiasi(numero,base):
quoziente=numero
sequenza=""
while quoziente!=0:
resto=quoziente%base
sequenza=str(resto)+sequenza
quoziente=quoziente//base
return sequenza
def ConvBaseQualsiasi(numero,base):
quoziente=numero;
sequenza=""
while quoziente!=0:
resto=quoziente%base
if resto in range(10):
sequenza=str(resto)+sequenza
elif resto in range (10,16):
carattere=ord('A')+(resto-10)
sequenza=chr(carattere)+sequenza
quoziente=quoziente//base
return sequenza
• approccio semplificato 2:
– l’ingresso di ogni cifra avviene nello stesso ordine rispetto al numero
dato, utilizzando la formula di Horner
base
valore=0
I=1
n=int(input("Inserire il numero di cifre"))
base=int(input("Inserire la base di partenza"))
I<=N false
i=1
true valore valore=0
cifra while i<=n:
valore=valore* cifra=int(input("cifra"+str(n-i)))
base+cifra #lettura cifre a partire dalla piu’ significativa
valore=valore*base+cifra
I=I+1
i=i+1
print("risultato =",valore)
def ConvBase10(numero,base):
n=len(numero)
i=0
valore=0
while i<n:
cifra=int(numero[i])
valore=valore*base+cifra
i=i+1
return valore
def ConvBase10(numero,base):
n=len(numero)
i=0
valore=0
while i<n:
if numero[i]>='0' and numero[i]<='9':
cifra=int(numero[i])
elif numero[i]>='A' and numero[i]<='F':
cifra=10+(ord(numero[i])-ord('A'))
valore=valore*base+cifra
i=i+1
return valore
a=a*fatt(6)
s=fatt(n)/fatt(k)
print(fatt(n))
• Un esempio di chiamata:
a=int(input("numero intero"))
if pari(a):
print("numero pari")
else:
print("numero dispari")
diag=True
i=0
while i<r and diag:
j=0
while j<c and diag:
if (i!=j and a[i][j]!=0):
diag=False
j=j+1
i=i+1
if diag:
print("La matrice è diagonale")
else:
print("La matrice non è diagonale")
def diagonale(a,r,c):
diag=True
i=0
while i<r and diag:
j=0
while j<c and diag:
if (i!=j and a[i][j]!=0):
diag=False
j=j+1
i=i+1
return diag
def main():
print ("Verifica di matrice diagonale")
n=int(input("Inserire il numero di righe "))
a=LetturaMatrice(n,n)
print (a)
if diagonale(a,n,n):
print ("La matrice inserita è diagonale")
else:
print ("La matrice inserita non è diagonale")
• Un esempio di chiamata:
parola=input("parola=")
if Palindroma(parola):
print (parola,"è una parola palindroma")
else:
print (parola,"non è una parola palindroma")
3!=3*2!
2!=2*1!
1!=1*0!
0!=1
f=x*fatt(x-1)
return f
def fatt(x):
if x==0:
return 1
else:
return x*fatt(x-1)
globale
x 4 x 3 x 2 x 1 x 0
fatt(4)
f f f f f 1
print(l[0])
f1 = 1
f n = f n−1 + f n−2 n 1
def fib(n):
if n==0 or n==1:
return 1
else:
return fib(n-1)+fib(n-2)
fib(1) fib(0)