DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 7 – Info B
Marco D. Santambrogio – [email protected]
Riccardo Cattaneo – [email protected]
Ver. aggiornata al 6 Gennaio 2014
Calendario dei Lab
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
Lab 7: Agenda
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’)
• Altri exe (90’)
3
Lab 7: Ora..
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (30’)
 shiftSinistro
• Qualche cosa un po’ più divertente (60’)
• Altri exe (90’)
4
shiftSinistro: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
shiftSinistro
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
Lab 7: Ora..
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’)
 numeroPrimo
 serie (normale)
• Altri exe.. (90’)
7
numeroPrimo: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
numeroPrimo iterativa
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function [ris] = numPrimo2(x)
ris=1;
for y=2:sqrt(x)
ris = ris*(~(~rem(x,y)));
end
9
numeroPrimo Ricorsiva
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function [ris] = numPrimo(x,y)
if y>sqrt(x)
ris = 1
else
ris = (~(~rem(x,y)))*numPrimo(x,y+1);
end
10
serie (normale): problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Si consideri la successione definita dalla
seguente relazione:
x(1) = 0
x(2) = 1
x(n) = 2 * x(n-1) + 3 * x(n-2)
Si scriva una funzione succ(n) che calcoli
il valore
n-esimo della successione.
11
serie (normale): soluzione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function res = succ(n)
res = [0 1]
if (n>2):
for i = 3:1:n
res = [res 2*res(i-1) + 3*res(i-2)];
end
else if n==2
res = 1
else n ==1
res = 0
12
Lab 7: Ora…
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (30’)
• Qualche cosa un po’ più divertente (60’)
• Altri exe… (90’)
 sottoMatrici
 serie (ricorsione)
13
sottoMatrici: problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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.:
é
ê
ê
ê
ê
ê
ê
ê
ê
ê
ê
ê
ê
ê
ê
êë
6
6
6
6
6
6
6
6
6
6
6
6
6
5
5
5
5
5
5
5
5
5
5
6
6
5
4
4
4
4
4
4
4
4
5
6
6
5
4
3
3
3
3
3
3
4
5
6
6
5
4
3
2
2
2
2
3
4
5
6
6
5
4
3
2
1
1
2
3
4
5
6
6
5
4
3
2
1
1
2
3
4
5
6
6
5
4
3
2
2
2
2
3
4
5
6
6
5
4
3
3
3
3
3
3
4
5
6
6
5
4
4
4
4
4
4
4
4
5
6
6
5
5
5
5
5
5
5
5
5
5
6
6
6
6
6
6
6
6
6
6
6
6
6
ù
ú
ú
ú
ú
ú
ú
ú
ú
ú
ú
ú
ú
ú
ú
úû
14
sottoMatrici: soluzione1
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
sottoMatrici: soluzione2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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
serie (ricorsione): problema
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Si consideri la successione definita dalla
seguente relazione ricorsiva:
x(1) = 0
x(2) = 1
x(n) = 2 * x(n-1) + 3 * x(n-2)
Si scriva una funzione ricorsiva
succRic(n) che calcoli il valore
n-esimo della successione.
17
serie (ricorsione): soluzione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function res = succRic(n)
if n==1
% Primo caso base
res = 0;
elseif n==2
% Secondo caso base
res = 1;
else
% Passo ricorsivo
res = 2*succRic(n-1) + 3*succRic(n-2);
end
18
Fonti per lo studio + Credits
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
Scarica

V2 - PPT - Dipartimento di Elettronica ed informazione