Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduzione
http://plm.dia.uniroma3.it/milicchio/
milicchio@dia.uniroma3.it
@fmilicchio
Panoramica
Con i concetti fino ad ora introdotti possibile risolvere problemi
arbitrariamente complessi
Esempio
Radici delle equazioni di II grado
Specifica:
Progetto di Riferimento
import math
Input/Output
d1 = b1**2 - 4.0 * a1 * c1
d2 = b2**2 - 4.0 * a2 * c2
print d1, d2
Discriminante
Difetti
Il codice spesso ripetuto (e.g., input/output, discriminante)
Possibile Soluzione
Idealmente vorrei scrivere una volta sola il codice per le varie operazioni da
ripetere
Funzioni
bene identificare le funzioni con le funzioni matematiche
Come in matematica, per utilizzare una funzione f, prima tale funzione deve
essere definita
Funzioni
Una funzione un blocco di istruzioni
Corpo
Intestazione
discriminante : R R R ! R
# Leggeremo i coefficienti
Prima chiamata
print d1, d2
Seconda chiamata
Dominio e Codominio
In Python le variabili hanno un tipo dinamico, ovvero possono cambiare tipo
Linterprete comunica se nel chiamare una funzione i tipi siano coerenti con le
operazioni sui parametri
Semantica
Quando viene incontrata una chiamata ad una funzione, si interrompe
lesecuzione del programma
Passaggio di Parametri
Prima di iniziare lesecuzione della funzione, vengono identificati parametri
con argomenti
Eettivamente, i parametri delle funzioni sono delle variabili visibili solo
allinterno del corpo della funzione stessa
Passaggio di Parametri
f:
R
x
a=3
y = f (a)
!
7 !
R
2x
Passaggio di Parametri
# Leggeremo i coefficienti
discriminante
a1
b1
c1
d1
return
Semantica
Questo processo di identificazione ha dierenze rispetto alla matematica
Aliasing
Aliasing
def f(l):
for i in range(len(l)):
l[i] = 0
[1, 2, 3, 4]
[0, 0, 0, 0]
q = [1, 2, 3, 4]
print q
f(q)
print q
l = q
q
RAM
RAM
1 4
Aliasing
Chiamando una funzione con una lista, si incontra ancora laliasing
Codominio
Una funzione ha un dominio ed un codominio
Radici dellUnit
x
=(x)
1=0
Il polinomio ha
n radici complesse
radici : N
n=1
n=2
n=3
n=4
!C
+1
+1,
p 1
+1, 1/2( 1 + i 3), 1/2( 1
+1, 1, +i, i
<(x)
p
i 3)
Codominio
Un codominio complesso come lesempio precedente, ovvero RR nel caso
in cui n = 2, deve poter essere rappresentato
def radici2():
return (1, -1)
def radici2():
return 1, -1
r1, r2 = radici2()
print r1, r2
print r1, r2