Laboratorio di Python

Похожие документы
Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

Laboratorio di Python

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

laboratorio di python

1. Si scriva una function Matlab che implementa il seguente metodo di punto fisso

Fondamenti di Informatica

Rappresentazione degli algoritmi

Laboratorio di Python (con Linux)

Laboratorio di Python

Laboratorio di Python

Laboratorio di Informatica

Fondamenti di Informatica

Rappresentazione degli algoritmi

Laboratorio di Architettura degli Elaboratori A.A. 2014/15 Programmazione Assembly

Laboratorio di Python

Aritmetica dei Calcolatori 2

INFORMATICA. Strutture iterative

Progetto Matlab N 2. Calcolo Numerico 6 CFU. Corso di Laurea in Ingegneria delle Comunicazioni 31/05/2014

osservazione: 1 MCD(m,n) min(m,n) = si provano i numeri compresi tra 1 e min(m,n) conviene iniziare da min(m,n) e scendere verso 1

Fondamenti di Informatica

Laboratorio di Python

E17 Esercizi sugli Array in Java

Esercizi in Python. Docente: Domenico Daniele Bloisi

Risoluzione di un problema

Cicli. S i a i = a 1 + a 2 + a a n

Laboratorio di Python

Informatica (A-K) 5. Algoritmi e pseudocodifica

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

PROGRAMMAZIONE: Le strutture di controllo

Dati e Algoritmi I (Pietracaprina) Esercizi sulle Nozioni di Base

Calcolo Parallelo. Domanda. In particolare. Qual è l algoritmo parallelo. PROBLEMA: Prodotto Matrice-Vettore

Informatica Generale Andrea Corradini Gli algoritmi e la risoluzione di problemi

CORSO DI LAUREA IN INGEGNERIA ELETTRICA

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

Programmare con MATLAB c Parte 5 Cicli: for e while

Come scrivere bene codice? (1 di 1)

Транскрипт:

Algoritmo, sulle liste Università di Bologna 3 e 5 aprile 2013

Sommario Correzione esercizi 1 Correzione esercizi 2 3 4

Correzione Correzione esercizi 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

Correzione Correzione esercizi 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) x=int(input("digita la tua scelta \t")) La struttura di questo codice come vi sembra? Cosa accade con (6,10)?

Correzione Correzione esercizi o 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?

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.

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.

Esempi di algoritmo Problema: Date due matrici calcolarne il prodotto. Algoritmo risolutivo: 1 Memorizzare le matrici A n,k, B k,m 2 Verificare che il numero di colonne della prima, sia uguale al numero di righe della seconda: Se vero Allora calcolare ogni elemento m r,c della matrice M n,m come: m k r,c= i=0 a r,i b i,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

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)

La nostra rappresentazione La matrice A n,m é una sequenza di sequenze cosí rappresentata: R i = (a i,1,, a i,m ) La matrice risulta essere quindi: A n,m = R 1,, R n

Quindi moltiplicare le due matrici significa Abbiamo la matrice A n,m rappresentata come: A Ri = (a i,1,, a i,m ) A n,m = A R1,, AR n e la matrice B m,r rappresentata come: B Ri = (b i,1,, b i,r ) quindi: B m,r = B R1,, B Rm Eseguire il prodotto di AxB significa costruire la seguente matrice C n,r : Ogni riga della nostra matrice avrá la seguente struttura dove B[r] é la nostra colonna: C Rk = A Rk Ḃ[1],, A Rk Ḃ[r] e quindi C n,r = C R1, C Rn

Come calcolare tutte le C Rk? Per calcolare C Rk 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 C Rk [i] che é dato dal risultato del prodotto scalare tra A Rk Ḃ[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.

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 C Rk [i] che é dato dal risultato del prodotto scalare tra A Rk xb[i] 2 si inserisce nella sequenza che rappresenta le righe della matrice la k esima riga calcolata come abbiamo visto al punto precedente.

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.)

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

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 (B T ) 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 B T : 2 Si inserisce nella sequenza al posto i esimo il valore di C Rk [i] che é dato dal risultato del prodotto scalare tra A Rk xb T R i 3 si inserisce nella sequenza che rappresenta le righe della matrice la k esima riga calcolata come abbiamo visto al punto precedente. 4 Restituisco la sequenza che mi rappresenta la matrice

Esprimiamo in python questo algoritmo..

TxV Correzione esercizi 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)

o Correzione esercizi 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]

Soluzione Correzione esercizi 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

Correzione 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: labinfo.mat.unibo@gmail.com

Cosa abbiamo fatto? 1 Correzione esercizi 2 3 4