Lucidi

Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Laboratorio di Python
Algoritmo, Esercizi sulle liste
28 marzo 2014
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Sommario
1
Correzione esercizi
2
Fase di Progettazione - Algoritmi
3
Esercizi
4
Esercizi per casa
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Correzione
def coppia_y(c):
print(c)
for i in range(len(c)):
if c[i]==",":
c1=float(c[:i])
return c1
def coppia_x(c):
for i in range(len(c)):
if c[i]==",":
j=i+1
c2=float(c[j:])
return c2
Proviamo a richiamare la funzione di coppia_x(s4,3) o
coppia_y(3,s2)
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Correzione
Menu’
def MULTI():
print ("Digita 1 ")
print ("Digita 2 ")
print ("Digita 3 ")
print ("Digita 4 ")
print ("Digita 5 ")
print ("Digita 6 ")
w=int(input("Digita la tua scelta: "))
while w!=6:
if.....
.
.
elif w==6:
break
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Fase di progettazione
La fase di progettazione, consistente nel determinare quale metodo
risolutivo utilizzare per risolvere il problema.
Le sequenza di operazioni finite che descrivono il procedimento volte
alla soluzione di un determinato problema è detto algoritmo.
L’algoritmo non è legato al linguaggio di programmazione che si
utilizzerà per implementare la soluzione.
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Algoritmo Deterministico
Un algoritmo è definito da una sequenza finita di istruzioni che
specificano il procedimento esatto da eseguire per ottenere un
determinato risultato.
In ogni momento di esecuzione dell’algoritmo si sa esattamente
quale sia l’operazione successiva da eseguire e quale sia lo stato del
sistema.
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Esempi di algoritmo
Problema: Data una matrice calcolarne la trasporta.
Algoritmo risolutivo:
1
2
Preso in input il parametro B
Verificare che B sia una matrice:
Se vero
Se Falso
3
Ogni i- esima colonna di B ∈ K m,n diventa la i − esima riga di
B t ∈ K n,m
Rilevo un errore
Restituisco il risultato
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Codifichiamo questo algoritmo
Proviamo a svolgerlo insieme. Con matrici rappresentate da liste di
liste e tuple di tuple.
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Calcolo della matrice trasposta-Liste
def trasposta(v):
if se_matrice(v):
a=[] #sequenza in cui memorizzo la mia trasposta
for i in range (0, len(v[0])): # ciclo sulla colonna
c=[]
for j in range(0, len(v)): # ciclo su tutte le righe
c.append(v[j][i])#elem. in posizione (i,j) ha posizione (j,i)
a.append(c) #inserisco la riga alla mia matrice trasposta a
else:
a='inserire una matrice'
return a
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Calcolo della matrice trasposta - Liste
def se_numero(t):
# funzione che mi restituisce True se ho passato in input
# una sequenza di numeri, False altrimenti
for i in t:
if type(i)<>int and type(i)<> float:
return False
return True
def se_matrice(t):
# funzione che mi restituisce True se ho passato in input
# una matrice, False altrimenti
if type(t)<>list:
return False
for i in t:
if not( type(i)==list and se_numero(i)):
return False
elif len(i)<>len(t[0]):
return False
return True
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Calcolo della matrice trasposta - Tuple
def se_matrice_tupla(t):
# funzione che mi restituisce True se ho passato in input
# una matrice, False altrimenti
if type(t)<>tuple:
return False
for i in t:
if not( type(i)==tuple and se_numero(i)):
return False
elif len(i)<>len(t[0]):
return False
return True
def trasposta_tupla(A):
if se_matrice_tupla(A):
t=()
for i in range(0,len(A[0])):
c=()
for j in range(0,len(A)):
c=c+(A[j][i],)
t=t+(c,)
return t
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Esempi di algoritmo
Problema: Date due matrici calcolarne il prodotto. Algoritmo
risolutivo:
1
2
Date le matrici An,k , B k ,m
Verificare se sono matrici
Se vero
Verificare che il numero di colonne della prima, sia uguale al
numero di righe della seconda
Se vero
calcolo la matrice C n,m dove ogni elemento cr ,s =
1 ≤ r ≤ n, 1 ≤ s ≤ m.
Se Falso rilevo un errore
Se Falso rilevo un errore
3
Restituisco il risultato
Laboratorio di Python
Pk
i=0
ar ,i · bi,s ,
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Passare dall’algoritmo alla sua implementazione
Per fare questo passaggio bisogna prendere in considerazione
alcune informazioni:
La rappresentazione che si sta utilizzando per salvare i dati.
Come rappresento le matrici?
I comandi e le funzioni che ho a mia disposizione per la
risoluzione del mio problema.
Riconoscere e scomporre in sotto-problemi più facili.
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
La nostra rappresentazione
La matrice An,m è una sequenza di sequenze dove ogni riga i - esima
è rappresentata come: Ri = [ai,1 , · · · , ai,m ] ogni colonna j- esima da:
Kj = A[j] La matrice risulta essere quindi: An,m = [R1 , · · · , Rn ]
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Come calcolare tutte le CRk ?
In definitiva devo usare due cicli, uno dentro l’altro (annidati):
1
per tutti i k compresi tra 0 e le n − 1 righe di A:
1
2
2
per tutti gli i compresi tra 0 e le r − 1 colonne di B:
Si inserisce nella sequenza al posto i − esimo il valore di CRk [i]
che è dato dal risultato del prodotto scalare tra ARk xB[i]
si inserisce nella sequenza che rappresenta le righe della
matrice la k − esima riga calcolata come abbiamo visto al punto
precedente.
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Esprimiamo in python questo algoritmo
..
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
TxV
def molt_mat(t,v):
if se_molt(t,v): # se posso eseguire la molt
c=[] #sequenza di output
r=trasposta(v) #trasposta di r
for i in range(0,len(t)):
rig=[]
for j in range(0, len(r)):#ciclo sulle righe della trasposta
k=molt_vet(t[i],r[j]) #prodotto scalare
rig.append(k) #inseriesco elemento nella riga
c.append(rig) #inserisco la riga in c
return(c) #restituisco il ris
else:
return(False)
def se_molt(t,v):
# funzione che mi calcola restituisce True se posso moltiplicare
#le matrici, False altrimenti
a,b= righe_colonne(t)
c,d=righe_colonne(v)
return b==c
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
TxV
def molt_mat(t,v):
if se_molt(t,v):
c=[]
for i in range(0,len(t)):
rig=[]
for l in range(0, len(v[0])):
k=0
for j in range(0, len(v)):
k=k+t[i][j]*v[j][l]
rig.append(k)
c.append(rig)
return(c)
else:
return(False)
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Esercizio
1
Si scriva la funzione iterativa che preso come argomento una
sequenza restituisca la sequenza dove tutti gli elementi adiacenti
uguali siano stati ridotti a un solo elemento. Esempio:
rimdup([1,2,3,3,3,2,4,4,3])→ [1,2,3,2,4,3]
2
Scrivere una funzione che ordini un sequenza di elementi
passati come parametro. Non utilizzare la funzione sort.
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Soluzione 1
def rimdup(s):
if len(s)<=1:
return(s)
else:
o=[]
conf=s[0]
o.append(conf)
for i in range(1,len(s)):
if conf<>s[i]:
conf=s[i]
o.append(conf)
return o
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Soluzione 2
def bubble(l):
for elemdaord in range(len(l)-1,0,-1):
for i in range(elemdaord):
if l[i]>l[i+1]:
l[i],l[i+1]=l[i+1],l[i]
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Esercizi
Scrivere e documentare le funzioni che risolvano i seguenti problemi:
1
Definire una funzione che presa una sequenza come parametro
restituisca il valore della media geometrica di tale sequenza
2
Definire una funzione che prese due sequenze come parametro
ne restituisca l’unione, l’intersezione, la differenza e il prodotto
cartesiano.
3
Definire una funzione che presa un sequenza mi restituisca tutti i
possibili suffissi di tale sequenza (es. (1,4,3) → (), (3,), (4,3),
(1,4,3)) usare l’iterazione e la ricorsione
4
Definire una funzione che presa un sequenza e un parametro
intero mi restituisca tutti i possibili suffissi di tale sequenza fino
alla lunghezza definita dal parametro intero (es. preso (1,4,3), 1
→ (), (3,)) usare l’iterazione e la ricorsione
Inviate gli esercizi svolti a: labinfo.mat.unibo@gmail.com
Laboratorio di Python
Correzione esercizi
Fase di Progettazione - Algoritmi
Esercizi
Esercizi per casa
Cosa abbiamo fatto?
1
Correzione esercizi
2
Fase di Progettazione - Algoritmi
3
Esercizi
4
Esercizi per casa
Laboratorio di Python