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
© Copyright 2024 Paperzz