DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio –...

17
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Lab 8 – Info B Marco D. Santambrogio – [email protected] Riccardo Cattaneo – [email protected] Ver. aggiornata al 30 Dicembre 2013

Transcript of DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio –...

Page 1: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 8 – Info B Lab 8 – Info B

Marco D. Santambrogio – [email protected] Cattaneo – [email protected]

Ver. aggiornata al 30 Dicembre 2013

Page 2: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 8: AgendaLab 8: Agenda

• Warm Up (30’)

• Qualche cosa un po’ più divertente (60’)

• Altri exe… (90’)

2

Page 3: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 8: Ora..Lab 8: Ora..

• Warm Up (30’) modulo

• Qualche cosa un po’ più divertente (60’)

• Altri exe… (90’)

3

Page 4: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

modulo: problemamodulo: problema

• Dato un numero inserito dall’utente, scrivere a video il suo modulo Si usi una funzione di ordine superiore modulo scritta da voi

• EsempioInserire il numero:

>>> -3

>>> 3

4

Page 5: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

modulof1 in Octavemodulof1 in Octave

%script modulo1x=input("Inserisci uno scalare: ");

modulof1=@(x)((-1)*x);

if x<0r=modulof1(x)

elser=x

end

5

Page 6: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

modulof2 in Octavemodulof2 in Octave

%script modulo2x=input("Inserisci uno scalare: ");

minZero = @(x)(~(x>0));modulof2 = @(x)((-1)*x);

if minZero(x)r = modulof2(x)

else r=xend

6

Page 7: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 8: OLab 8: Ora..ra..

• Warm Up (30’)

• Qualche cosa un po’ più divertente (60’) tmp presente

• Altri exe… (90’)

7

Page 8: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

tmp: problematmp: problema

• Facendo uso della funzione di ordine superiore accumulatore

• Codificare la funzione tmp(v)

Prende come argomento un vettore di numeri v=[v1,…, vn]

Calcola e restituisce come risultato il valore

• Codice della funzione accumulatore function [x]=accumulatore(f, a, u) x = u; for i=1:length(a) x = f(x, a(i)); end

8

Page 9: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

tmp: soluzionetmp: soluzione

function ris = tmp(v) prod = @(x, y) x*y; sum = @(x, y) x+y; ris = accumulatore (prod, v, 1) * accumulatore (sum, v, 0);

9

Page 10: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

presente: problemapresente: problema

• Facendo uso delle funzioni di ordine superiore map e acc presentate a lezione, scrivere una funzione presente(x, v) dove x è un valore e v un vettore.

• La funzione deve restituire un valore logico true se x è contenuto in v, e deve eseguire il controllo verificando la seguente condizione:x==v(1) OR x==v(2) OR …. x==v(length(v))

• Procedere in questo modo: Calcolare tramite map un vettore logico che contiene

1 in corrispondenza dei valori del vettore che sono uguali a x

Calcolare poi tramite accumulatore l’OR degli elementi del vettore

Codice della funzione map:function [vout]=map(f, vin)

for i=1:length(vin) vout(i)=f(vin(i));end

10

Page 11: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

presente in Octavepresente in Octave

function [p]=presente(x,v) %Definiamo una variabile funzione che verifichi l'uguaglianzaeqx = @(a)a==x;

% Tramite map, costruiamo un vettore logico che contiene 1 nelle posizioni% in cui il vettore in ingresso contiene valori uguali a xvp = map(eqx,v);

% Definiamo una variabile funzione che calcoli l'OR tra due valori logiciOR = @(h,k)h||k;

% Tramite acc, calcoliamo l'OR tra tutti gli elementi del vettore logico% ottenuto con mapp = accumulatore(OR,vp,0);

11

Page 12: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 8: OLab 8: Orara……

• Warm Up (30’)• Qualche cosa un po’ più divertente (60’)

• Altri exe… (90’) garaTuffi combinaImmagini

12

Page 13: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

garaTuffi: problemagaraTuffi: problema

• Facendo uso della funzione di ordine superiore accumulatore

• Codificare la funzione garaTuffi(v)

Prende come argomento un vettore di voti v=[v1,…, vn]

Calcola e restituisce come risultato il valore medio dei voti

• Codice della funzione accumulatore function [x]=accumulatore(f, a, u) x = u; for i=1:length(a) x = f(x, a(i)); end

13

Page 14: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

garaTuffi: soluzionegaraTuffi: soluzione

function ris = garaTuffi(v)

sum = @(x, y) x+y; ris = accumulatore (sum, v, 0)/length(v);

14

Page 15: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

combinaImmagini: problemacombinaImmagini: problema

• Si conviene di rappresentare un’immagine mediante una matrice rettangolare di numeri, corrispondenti al colore dei suoi pixel (punti luminosi che compongono la figura)

• Si vuole progettare una funzione Octave di nome combinaImmagini che, ricevendo come parametri due matrici f1 ed f2 rappresentanti due immagini e due valori numerici C ed S, con C<S, rappresentanti due diversi colori, produce come risultato una terza figura f3, ottenuta da f1 ed f2 secondo la seguante regola. Nelle posizioni (r,c) in cui f1(r,c)<C ed f2(r,c)>C si ha

f3(r,c)=f2(r,c)-f1(r,c) Nelle posizioni (r,c) in cui f1(r,c)>S ed f2(r,c)<S si ha

f3(r,c)=f1(r,c)-f2(r,c) nelle posizioni rimanenti si ha f3(r,c)=f1(r,c)

• Domande Codificare la funzione combinaImmagini Scrivere uno script che acquisisce le due matrici di partenza

rispettivamente dai file file1.mat e file2.mat (si supponga che le due variabili contenenti le matrici al momento del salvataggio si chiamino matr1 e matr2), richiama la funzione combinaImmagini e salva sul file file3.mat la matrice risultante.

15

Page 16: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

combinaImmagini: combinaImmagini: soluzionesoluzionefunction [f3]=combinaImmagini(f1, f2, C, S) f3=f1; f3(f1<C & f2>C)=f2(f1<C & f2>C)-f1(f1<C &

f2>C); f3(f1>S & f2<S)=f1(f1>S & f2<S)-f2(f1>S &

f2<S);

%script che esegue combinaImmaginiload file1.mat matr1; load file2.mat matr2; C= input('inserisci il valore per C: '); S= input('inserisci il valore per S: '); matr3 = combinaImmagini(matr1, matr2, C, S); save file3.mat matr3;

16

Page 17: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – cattaneo@elet.polimi.it.

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Fonti per lo studio + Fonti per lo studio + CreditsCredits• Fonti per lo studio

Introduzione alla programmazione in MATLAB, A.Campi, E.Di Nitto, D.Loiacono, A.Morzenti, P.Spoletini, Ed.Esculapio•Capitolo 2, 4, 5

• Credits: Emanuele Panigati https://sites.google.com/site/engpanigati/

17