DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio –...
-
Upload
patrizia-rota -
Category
Documents
-
view
217 -
download
0
Transcript of DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 8 – Info B Marco D. Santambrogio –...
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
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 8: AgendaLab 8: Agenda
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’)
• Altri exe… (90’)
2
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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