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

19
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 7 – Info B Lab 7 – Info B Marco D. Santambrogio – [email protected] Riccardo Cattaneo – [email protected] Ver. aggiornata al 6 Gennaio 2014

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

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 7 – Info B Lab 7 – Info B

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

Ver. aggiornata al 6 Gennaio 2014

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Calendario dei LabCalendario dei Lab

• 14 Gennaio 2014, 10am-12.45pm, @ LM1 MATLAB: funzioni ricorsive

• 21 Gennaio 2014, 10am-12.45pm, @ LM1 MATLAB: funzioni ricorsive, funzioni di

ordine superiore, grafici 2D e 3D

2

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 7: AgendaLab 7: Agenda

• Warm Up (30’)

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

• Altri exe (90’)

3

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 7: Ora..Lab 7: Ora..

• Warm Up (30’) shiftSinistro

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

• Altri exe (90’)

4

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

shiftSinistro: problemashiftSinistro: problema

• Dato un vettore riga v rappresentante un numero in codifica binaria Si effettui lo shift a sinistra (cioè si

spostino a sinistra i singoli bit) fino a che non si incontra il primo 1

Es: v=[0 0 1 0 1 0 1 1] -> [1 0 1 0 1 1 0 0]

5

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

shiftSinistroshiftSinistro

function [ris] = shiftSx(n) if ~isvector(n) | any (n < 0 | n > 1) ris = NaN;elseif n(1) == 1 ris = n;else ris = shiftSx([n(2:length(n)) n(1)]);end

6

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 7: Lab 7: OOra..ra..

• Warm Up (30’)

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

• Altri exe.. (90’)

7

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

numeroPrimo: problemanumeroPrimo: problema

• Dato un numero intero positivo inserito dall’utente, dire se tale numero è primo (stampa a video 1 se primo, 0 altrimenti) Un numero è primo se è divisibile solo

per 1 e se stesso Esempio• >>> 7 ---> >>>1• >>> 9 ---> >>>0

8

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

numeroPrimo iterativanumeroPrimo iterativa

function [ris] = numPrimo2(x) ris=1;for y=2:sqrt(x) ris = ris*(~(~rem(x,y)));end

9

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

numeroPrimo RicorsivanumeroPrimo Ricorsiva

function [ris] = numPrimo(x,y) if y>sqrt(x) ris = 1else ris =

(~(~rem(x,y)))*numPrimo(x,y+1);end

10

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

serie (normale): problemaserie (normale): problema

Si consideri la successione definita dalla seguente relazione:

x(1) = 0x(2) = 1x(n) = 2 * x(n-1) + 3 * x(n-2)

Si scriva una funzione succ(n) che calcoli il valoren-esimo della successione.

11

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

serie (normale): soluzioneserie (normale): soluzione

function res = succ(n) res = [0 1]if (n>2):

for i = 3:1:nres = [res 2*res(i-1) + 3*res(i-2)];

endelse if n==2

res = 1else n ==1

res = 0

12

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

Lab 7: Lab 7: OOrara……

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

(60’)

• Altri exe… (90’) sottoMatrici serie (ricorsione)

13

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

sottoMatrici: problemasottoMatrici: problema

Creare una matrice di dimensione n*n che nel suo centro contiene un quadrato 2x2 che contenente il valore 1 e, andando verso l'esterno, i valori 2, 3, .. fino a n/2 nella cornice più esterna

Es.:

14

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

sottoMatrici: soluzione1sottoMatrici: soluzione1

function [M] = sottoMatr(n) if(n == 1) M = ones(2,2);else M = sottoMatr(n-1) r = ones(1, size(M, 2)) * n M = [r; M ; r] c = ones(size(M, 1), 1) * n M = [c M c]end

15

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

sottoMatrici: soluzione2sottoMatrici: soluzione2

function [matrRis]=sottoMatr(n)

if n==1 matrRis=ones(2);else matrRis=n*ones(2*n); matrRis(2:2*n-1,2:2*n-1)=sottoMatr(n-1);end

16

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

serie (ricorsione): serie (ricorsione): problemaproblema

Si consideri la successione definita dalla seguente relazione ricorsiva:

x(1) = 0x(2) = 1x(n) = 2 * x(n-1) + 3 * x(n-2)

Si scriva una funzione ricorsiva succRic(n) che calcoli il valoren-esimo della successione.

17

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

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE

serie (ricorsione): serie (ricorsione): soluzionesoluzionefunction res = succRic(n)if n==1

% Primo caso baseres = 0;

elseif n==2% Secondo caso baseres = 1;

else% Passo ricorsivores = 2*succRic(n-1) + 3*succRic(n-2);

end

18

Page 19: DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 7 – Info B Marco D. Santambrogio – marco.santambrogio@polimi.it Riccardo Cattaneo – rcattaneo@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: Prof. Paolo Garza (per l’esercizio

sottoMatrici) Emanuele Panigati https://sites.google.com/site/engpanigati/

19