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

32
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 6 – Info B Lab 6 – Info B Marco D. Santambrogio – [email protected] Riccardo Cattaneo – [email protected] Ver. aggiornata al 9 Agosto 2013

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

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 6 – Info B Lab 6 – Info B

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

Ver. aggiornata al 9 Agosto 2013

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 5: ObiettiviLab 5: Obiettivi

Introduzione a Matlab/Octave

CicliFunzioniStrutture

2

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 5: AgendaLab 5: Agenda

Warm Up (40’)

Qualche cosa un po' più divertente (90’)

Altri exe… (110’)

3

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 5: Warm upLab 5: Warm up

• Warm Up (40’) Inserisci numeri Temperatura mcm

• Qualche cosa un po' più divertente (90’)

• Altri exe… (110’)

4

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: Inserisci Problema: Inserisci numerinumeri

• Acquisiamo numeri da tastiera finché non viene inserito un numero negativo. • In ogni caso non accettiamo più di mille numeri

5

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: Inserisci Soluzione: Inserisci numerinumeri

vector = [ ]; %crea il vettore vuotofor count = 1:1000 %Raccoglierà al max 1000 valori

value = input('next number ');if value < 0 break %Se value negativo usciamo dal cicloelse vector(count) = value; end

endvector %permette di visualizzare il contenuto di vector

6

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: TemperaturaProblema: Temperatura

• Scrivere un programma che prende in input la temperatura in gradi Celsius e restituisce in output i gradi Fahrenheit Formula:

Fahrnait = Celsius * 9/5 + 32

7

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: TemperaturaSoluzione: Temperatura

temp_c = input('Inserire la temperatura in gradi Celsius: ');

temp_f = temp_c * 9/5 + 32;

disp(['La temperatura in gradi Fahrenheit è ', num2str(temp_f)]);

8

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

mmcm: problemacm: problema

• Dati due numeri x ed y, si definisce il minimo comune multiplo come mcm = x*y/MCD(x,y)

• Si risolve il problema creando una funzione mcm

9

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

mcd in Octavemcd in Octave

function [div] = mcd(x,y) if(x == y) div = x;elseif(x < y) for cont = x:-1:1 if mod(x,cont) == 0 && mod(y,cont) == 0 div = cont; break end endelse for cont = y:-1:1 if mod(x,cont) == 0 && mod(y,cont) == 0 div = cont; break end endend

10

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

mcm in Octavemcm in Octave

function [mul] = mcm(x,y) mul = x * y / mcd(x,y);

11

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 5: Un pLab 5: Un poo’’ di di divertimentodivertimento

• Warm Up (40’)

• Qualche cosa un po' più divertente (90’) Maggiore Equazione secondo grado Rilievi altimetrici

• Altri exe… (110’)

12

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: MaggioreProblema: Maggiore

• Scrivere un programma che prenda in input un array e conti tutti i numeri che sono maggiore di un numero n inserito dall’utente

13

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: MaggioreSoluzione: Maggiore

mag = input('Vuoi contare i numeri maggiori di quanto? ');

disp('Array (ricorda di inserire i numeri tra parentesi quadre):');

inarray = input('');

counter = 0;for ii=1:length(inarray) if inarray(ii)>mag counter = counter+1; endenddisp(['I numeri maggiori di ',num2str(mag),' sono

',num2str(counter)]);

14

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: Maggiore Soluzione: Maggiore (in due (in due righe)righe)

mag = input('Vuoi contare i numeri maggiori di quanto? ’)

disp('Array (ricorda di inserire i numeri tra parentesi quadre):’)

inarray = input(’’)

magV= inarray(inarray>mag);counter = size(magV,2);disp(['I numeri maggiori di ',num2str(mag),' sono

',num2str(counter)]);

15

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: Equazione secondo Problema: Equazione secondo gradogrado

• Scrivere una funzione per il calcolo dell'equazione di secondo grado: ax^2 + bx + c. Inseriti a, b e c la funzione deve ritornare il valore di delta, e i valori delle radici reali (se esistono).

In caso che delta sia uguale a 0, x1 contiene la soluzione, mentre x2 non è un numero (NaN).

16

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: Equazione secondo Soluzione: Equazione secondo gradogrado

function [delta, x1, x2] = eq2g(a,b,c)delta = b^2-4*a*c;if (delta==0)x1=(-b)/(2*a);x2=(-b)/(2*a);elsex1=(-b+sqrt(delta))/(2*a);x2=(-b-sqrt(delta))/(2*a);end

17

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Esercizio: Rilievi Esercizio: Rilievi altimetricialtimetrici

• Si sviluppi un programma in matlab che acquisisce da tastiera i dati relativi a rilievi altimetrici e stampa a video l’altitudine media di tutti quelli che hanno latitudine compresa tra 10 e 80 e longitudine tra 30 e 60

1818

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione Soluzione (1ma parte)(1ma parte): rilievi : rilievi altimetricialtimetrici

more = input('vuoi inserire valori altimetrici? (s/n)');

ii=1;while more=='s' arch(ii).altitudine = input('altitudine '); arch(ii).longitudine = input('longitudine '); arch(ii).latitudine = input('latitudine '); ii = ii+1; more = input('vuoi inserire altri valori

altimetrici? (s/n)');end

1919

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione Soluzione (2nda parte)(2nda parte): rilievi : rilievi altimetricialtimetrici

jj=1;for ii=1:length(arch)

%attenzione: la condizione deve essere scritta sulla stessa linea…

if arch(ii).latitudine>=10&&arch(ii).latitudine<=80 && arch(ii).longitudine>=30&&arch(ii).longitudine<=60

elemSelez(jj) = arch(ii).altitudine; jj=jj+1; endenddisp(['la media degli elementi selezionati e` '

num2str(mean(elemSelez))]);

2020

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 5: Altri exeLab 5: Altri exe

• Warm Up (40’)

• Qualche cosa un po' più divertente (90’)

• Altri exe… (110’) Cambio base Scambio elementi Matrici Città

21

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: Cambio baseProblema: Cambio base

• Ricevere un vettore che rappresenti le singole cifre di un numero in base 2 stampare a video il valore in base 10

22

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Cambio base - SoluzioneCambio base - Soluzione

23

function [ris] = cambioBase(n)% N vettore di 0 e 1esp=[length(n)-1:-1:0];Basi=2.^esp;disp(sum(n.*basi));

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: Scambio Problema: Scambio elementielementi

• Scrivere un programma che dati due array scambi gli elementi di indice dispari usare la funzione mod

24

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: Scambio Soluzione: Scambio elementielementifunction [inarray1, inarray2] = swapOdd(inarray1, inarray2)

for ii=1:min(length(inarray1),length(inarray2))if (mod(ii,2) == 1)

temp=inarray1(ii);inarray1(ii)=inarray2(ii);inarray2(ii) = temp;

endend

25

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: Scambio Soluzione: Scambio elementielementidisp('Array1 (ricorda di inserire i numeri tra

parentesi quadre):');inarray1 = input('');disp('Array2 (ricorda di inserire i numeri tra

parentesi quadre):');inarray2 = input('');

[inarray1, inarray2] = swapOdd(inarray1, inarray2);

disp('Ora gli array sono: ');disp(inarray1);disp(inarray2);

26

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: MatriciProblema: Matrici

• Date le seguenti matrici A e B:A = [1 3 -2 -2; 0 2 4 -5; -1 2 3 2; 0 -1 -9 3];

B = [2 0 4 -10; 1 -2 -4 0; 6 -2 -2 1; 3 2 -4 -9];

Si verifichi che •AB != BA, (A*B)T != AT*BT •ma che (AB)T = BT*AT (T significa matrice trasposta).

Provare anche che (A + B)2 != A2 + 2AB + B2.

27

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: Matrici Soluzione: Matrici (prima (prima parte)parte)

AB=A*B;BA=B*A;val = (AB==BA);if (sum(sum(val))==0) disp('Le due matrici A*B e B*A sono diverse');else disp('Le due matrici A*B e B*A sono uguali');end

ABT = (A*B)';ATBT = (A')*(B');val = (ABT==ATBT);if (sum(sum(val))==0) disp('Le due matrici (A*B)T e AT*BT sono diverse');else disp('Le due matrici (A*B)T e AT*BT sono uguali');end

28

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: Matrici Soluzione: Matrici (seconda (seconda parte)parte)

ABT = (A*B)';BTAT = (B')*(A');val = (ABT==BTAT);if (sum(sum(val))==0) disp('Le due matrici (A*B)T e BT*AT sono diverse');else disp('Le due matrici (A*B)T e BT*AT sono uguali');end

PR = (A+B)^2;SE = (A^2)+(2*A*B)+(B^2);val = (PR==SE);if (sum(sum(val))==0) disp('Le due matrici (A + B)2 e A2 + 2AB + B2 sono

diverse');else disp('Le due matrici (A + B)2 e A2 + 2AB + B2 sono

uguali');end

29

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Problema: CittàProblema: Città

• Sono date N città definite dalle loro coordinate euclidee (x,y). Tali coordinate sono scritte in due vettori di N elementi ciascuno (un vettore per le x, uno per le y). Ad esempio, x(1) e y(1) rappresentano le coordinate per la prima città. Generare casualmente i vettori x e y come segue:

x=rand(1,N); y=rand(1,N); osservare i valori risultanti, ed eventualmente moltiplicare i due vettori per 100 in modo che tali valori possano essere interpretati come coordinate espresse in km.

Disegnare la posizione di ogni città (plot) Calcolare e stampare la matrice NxN delle

distanze, in cui ogni cella (i,j) rappresenta la distanza euclidea tra la città i e la città j, calcolata tramite il teorema di pitagora.

Impostare a NaN la diagonale principale (in modo da non si considerare la distanza tra una città e stessa). Facoltativo: visualizzare la matrice tramite il comando image.

30

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Soluzione: CittàSoluzione: Città

N = input('Quante città: ');x = rand(1,N);y = rand(1,N);

x = 100*x;y = 100*y;

plot(x,y,'bo'); hold ondistanze = zeros(N,N);

for i1 = 1:N for i2 = 1:N distanzai1i2quad = (x(i1) - x(i2))^2 + (y(i1) - y(i2))^2; distanze(i1,i2) = sqrt(distanzai1i2quad); endenddisp(distanze);

% Si può fare con un ciclo for oppure con una 'matrice logica'% for i1 = 1:N% distanze(i1,i2) = NaN;% endlogicaldiag = logical(eye(N));distanze(logicaldiag) = NaN;disp(distanze);

31

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Fonti per lo studioFonti per lo studio

• Fonti per lo studio Introduzione alla programmazione in MATLAB, A.Campi, E.Di Nitto, D.Loiacono, A.Morzenti, P.Spoletini, Ed.Esculapio•Capitoli 2, 3 e 4

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

32