DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 7 – Info B Marco D. Santambrogio – [email protected] Riccardo Cattaneo – [email protected] Ver. aggiornata al 20 Gennaio 2015 Esame 5 Feb 2015 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Confermato alle 12.15 2 Esame 5 Feb 2015 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Confermato alle 12.15 • Ricordo Se 1mo + 2ndo >= 18 --> SUPERATO 3 Esame 5 Feb 2015 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Confermato alle 12.15 • Ricordo Se 1mo + 2ndo >= 18 --> SUPERATO 8+8 = 16 << 18 --> NON SUPERATO 4 Esame 5 Feb 2015 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Confermato alle 12.15 • Ricordo Se 1mo + 2ndo >= 18 --> SUPERATO 8+8 = 16 << 18 --> NON SUPERATO Se superato, DOVETE iscrivervi ad un appello per registrare il voto 5 Esame 5 Feb 2015 DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Confermato alle 12.15 • Ricordo Se 1mo + 2ndo >= 18 --> SUPERATO 8+8 = 16 << 18 --> NON SUPERATO Se superato, DOVETE iscrivervi ad un appello per registrare il voto L’appello DEVE essere di Info B!!!! 6 Lab 7: Agenda DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Warm Up (20’) • Qualche cosa un po’ più divertente (45’) • Altri exe (75’) 7 Lab 7: Ora.. DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Warm Up (20’) shiftSinistro • Qualche cosa un po’ più divertente (45’) • Altri exe (75’) 8 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] 9 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 10 Lab 7: Ora.. DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Warm Up (20’) • Qualche cosa un po’ più divertente (45’) numeroPrimo serie (normale) • Altri exe.. (75’) 11 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 12 numeroPrimo iterativa DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE function [ris] = numPrimo2(x) ris=1; for y=2:sqrt(x) ris = ris*(~(~rem(x,y))); end 13 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 14 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. 15 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 16 Lab 7: Ora… DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE • Warm Up (20’) • Qualche cosa un po’ più divertente (45’) • Altri exe… (75’) serie (ricorsione) sottoMatrici 17 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. 18 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 19 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 ù ú ú ú ú ú ú ú ú ú ú ú ú ú ú úû 20 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 21 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 22 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/ 23