• Non ci sono risultati.

3e5aprile2013 Algoritmo,EsercizisullelisteSaraZuppiroli LaboratoriodiPython

N/A
N/A
Protected

Academic year: 2021

Condividi "3e5aprile2013 Algoritmo,EsercizisullelisteSaraZuppiroli LaboratoriodiPython"

Copied!
22
0
0

Testo completo

(1)

Esercizi per casa

Laboratorio di Python

Algoritmo, Esercizi sulle liste

Sara Zuppiroli

Università di Bologna

3 e 5 aprile 2013

(2)

Esercizi per casa

Sommario

1 Correzione esercizi

2 Fase di Progettazione - Algoritmi

3 Esercizi

4 Esercizi per casa

(3)

Esercizi per casa

Correzione

scrivere e documentare un programma con un menu dove:

la funz prende in input una tupla e restituisce il primo valore presente nella lista che massimizzi la distanza dal valore m=(max+min)/2

la funz prende in input due tuple e restituisce la somma delle due tuple solo se le tuple hanno lunghezza uguale

la funz prende in input tre punti A(x1,y1) B(x2,y2) C(x3,y3) e restituisce True se questi punti possono formare un triangolo.

False altrimenti

la funz prende in input due liste e restituisce la lista dei valori appartenenti ad entrambe le tuple

per uscire dal programma

(4)

Esercizi per casa

Correzione

def menu_2():

print("seleziona 1 ...") print("seleziona 2 ...") print("seleziona 3 ...") print("seleziona 4 ...")

print("seleziona 5 ...") #ricevo la scelta#

x=int(input("Digita la tua scelta \t")) while 1<=x<=5:

if x==1:#caso sel:1#

A=tuple(input("inserisci la tupla"))#ricevo i dati#

def sel1_(B):

for i in range(len(B)):

if B[i] is max(B) or B[i] is min(B):

#il valore che massimizza e' per forza o il minimo o il massimo#

print(B[i]) return B[i]

sel1_(A)

(5)

Esercizi per casa

Correzione

Esercizio

def triangle(x,y,z):

l1=lenght(x,y) l2=lenght(y,z) l3=lenght(x,z) if l1<l2+l3:

return True else:

return False

Cosa manca?

(6)

Esercizi per casa

Fase di progettazione

La fase di progettazione, consistente nel determinare il metodo per la soluzione problema.

Le sequenza di operazioni finite che descrivono il procedimento di soluzione a un determinato problema é detto algoritmo.

L’algoritmo non é legato al linguaggio di programmazione che si utilizzerá per implementare la soluzione.

(7)

Esercizi per casa

Algoritmo Deterministico

Un algoritmo é definito da una lista 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.

(8)

Esercizi per casa

Esempi di algoritmo

Problema: Date due matrici calcolarne il prodotto. Algoritmo risolutivo:

1 Memorizzare le matrici An,k, Bk ,m

2 Verificare che il numero di colonne della prima, sia uguale al numero di righe della seconda:

Se vero Allora calcolare ogni elemento mr ,cdella matrice Mn,mcome:

mr ,c=Pk

i=0ar ,i∗ bi,c, calcolato per ogni 1 ≤ r ≤ n e per ogni 1 ≤ c ≤ m.

Se Falso Rilevo un errore e lo memorizzo come risultato

3 Restituisco il risultato

(9)

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. (es. [Se vero] non é altro che il prodotto scalare tra due vettori eseguito m*n volte)

(10)

Esercizi per casa

La nostra rappresentazione

La matrice An,mé una sequenza di sequenze cosí rappresentata:

Ri = (ai,1, · · · ,ai,m)

La matrice risulta essere quindi: An,m=R1, · · · ,Rn

(11)

Esercizi per casa

Quindi moltiplicare le due matrici significa

Abbiamo la matrice An,mrappresentata come: ARi= (ai,1, · · · ,ai,m) An,m =AR1, · · · ,ARn

e la matrice Bm,r rappresentata come:

BRi = (bi,1, · · · ,bi,r) quindi:

Bm,r =BR1, · · · ,BRm

Eseguire il prodotto di AxB significa costruire la seguente matrice Cn,r:

Ogni riga della nostra matrice avrá la seguente struttura dove B[r] é la nostra colonna:

CRk =ARkB[1], · · · , A˙ RkB[r ]˙ e quindi

Cn,r =CR1, · · ·CRn

(12)

Esercizi per casa

Come calcolare tutte le C

Rk

?

Per calcolare CRk ad esempio dobbiamo eseguire queste operazioni:

1 per tutti gli i compresi tra 0 e le r − 1 colonne di B:

2 Si inserisce nella sequenza al posto i − esimo il valore di CRk[i]

che é dato dal risultato del prodotto scalare tra ARkB[i]˙

Dobbiamo poi calcolare tutte le n-righe della nostra matrice. Quindi:

1 per tutti i k compresi tra 0 e le n − 1 righe di A:

2 si inserisce nella sequenza che rappresenta le righe della matrice la k − esima riga calcolata come abbiamo visto al punto precedente.

(13)

Esercizi per casa

Come calcolare tutte le C

Rk

?

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 per tutti gli i compresi tra 0 e le r − 1 colonne di B:

2 Si inserisce nella sequenza al posto i − esimo il valore di CRk[i]

che é dato dal risultato del prodotto scalare tra ARkxB[i]

2 si inserisce nella sequenza che rappresenta le righe della matrice la k − esima riga calcolata come abbiamo visto al punto precedente.

(14)

Esercizi per casa

Le funzioni a mia disposizione

Abbiamo giá implementato il prodotto scalare tra due vettori Per una maggiore facilitá nella gestione delle colonne nella matrice B possiamo calcolarne la trasposta. (la matrice trasposta ha come generico elemento di indici (i,j) l’elemento di indici (j,i) della matrice originaria.)

(15)

Esercizi per casa

Calcolo della matrice trasposta

def trasposta(v):

a=[] #sequenza in cui memorizzo la mia trasposta

for i in range (0, len(v[0])): # ciclo sugli elementi della colonna c=[]

for j in range(0, len(v)): # ciclo su tutte le righe

c.append(v[j][i]) #elemento (i,j) che diviene l'elemento (j,i) a.append(c) #inserisco la riga alla mia matrice trasposta a return a

(16)

Esercizi per casa

Calcolare AxB

Ecco come risulta la sequenza di istruzioni finali.

1 verifico se sia possibile eseguire la moltiplicazione (funzione giá implementata)

Se falso Restituisco errore

Se Vero Eseguo le seguenti istruzioni:

1 Calcolo la trasposta di B (BT)

2 per tutti i k compresi tra 0 e le n − 1 righe di A:

1 per tutti gli i compresi tra 0 e le r − 1 righe di BT:

2 Si inserisce nella sequenza al posto i − esimo il valore di CRk[i] che é dato dal risultato del prodotto scalare tra ARkxBRT

i

3 si inserisce nella sequenza che rappresenta le righe della matrice la k − esima riga calcolata come abbiamo visto al punto precedente.

(17)

Esercizi per casa

Esprimiamo in python questo algoritmo

..

(18)

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)

(19)

Esercizi per casa

Esercizio

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]

(20)

Esercizi per casa

Soluzione

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

(21)

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 presa una terna di valori come parametro mi dica se questa é una terna pitagorica o meno

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:[email protected]

(22)

Esercizi per casa

Cosa abbiamo fatto?

1 Correzione esercizi

2 Fase di Progettazione - Algoritmi

3 Esercizi

4 Esercizi per casa

Riferimenti

Documenti correlati

Infine recentemente, analizzando 132 carcinomi del colon-retto, caratterizzati da instabilità cromosomica (CIN), sono state identificate 11 mutazioni somatiche in quattro

Insieme ai tuoi compagni scegli un numero di una cifra a piacere e scrivilo come moltiplicando; poi esegui le!. moltiplicazioni, scrivi il risultato

Definito (non--ambiguo) ambiguo), , ogni istruzione deve essere elementare e deve consentire un’interpretazione.. elementare e deve consentire un’interpretazione

Dopo altri 4 secondi il secondo motore si arresta automaticamente e il primo riparte, ruotando nel senso definito &#34;INDIETRO&#34;.. Sei secondi più tardi il primo motore

L’allievo dovrà elaborare gli schemi di collegamento ed il programma per il PLC, digitare il programma medesimo e collaudarlo in condizioni simulate, realizzare il cablaggio

[r]

14.. sono punti di discontinuit`a eliminabile. a)La funzione f ha due punti angolosi in x = ±1, come si vede facilmente anche disegnandone il grafico... Si pu`o quindi applicare