DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 6 – Info B
Marco D. Santambrogio – [email protected]
Matteo Ferroni – [email protected]
Ver. aggiornata al 20 Ottobre 2015
Calendario dei Labs: MATLAB
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 15 Dic 2015, 10.30am-12.30pm, @ B6.27
 MATLAB: Ambienti di sviluppo e primi codici
• 12 Gennaio 2016, 10.30am-12.30pm, @ B6.27
 MATLAB: strutture di controllo, tipi di dato strutturato, e
vettori
• 19 Gennaio 2016, 10.30am-12.30pm, @ B6.27
 MATLAB: funzioni ricorsive
• 26 Gennaio 2016, 10.30am-12.30pm, @ B6.27
 MATLAB: funzioni ricorsive, funzioni di ordine superiore,
grafici 2D e 3D
2
Lab 6: Obiettivi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Introduzione a Matlab/Octave
Cicli
Funzioni
3
Lab 6: Agenda
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
 Warm Up (20’)
 Qualche cosa un po' più divertente (40’)
 Altri exe… (60’)
4
Lab 6: Warm up
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (20’)
 Inserisci numeri
 Temperatura
• Qualche cosa un po' più divertente (40’)
• Altri exe… (60’)
5
Problema: Inserisci numeri
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Acquisiamo numeri da tastiera finché
non viene inserito un numero negativo.
• In ogni caso non accettiamo più di mille
numeri
6
Soluzione: Inserisci numeri
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
vector = [ ]; %crea il vettore vuoto
for count = 1:1000 %Raccoglierà al max 1000 valori
value = input('next number ');
if value < 0
break %Se value negativo usciamo dal ciclo
else
vector(count) = value;
end
end
vector %permette di visualizzare il contenuto di vector
7
Problema: Temperatura
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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
8
Soluzione: Temperatura
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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)]);
9
Lab 6: Un po’ di divertimento
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (20’)
• Qualche cosa un po' più divertente (40’)
 Maggiore
 Equazione secondo grado
• Altri exe… (60’)
10
Problema: Maggiore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Scrivere un programma che prenda in
input un array e conti tutti i numeri che
sono maggiore di un numero n inserito
dall’utente
11
Soluzione: Maggiore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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;
end
end
disp(['I numeri maggiori di ',num2str(mag),' sono
',num2str(counter)]);
12
Soluzione: Maggiore (in due righe)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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)]);
13
Problema: Equazione secondo grado
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• 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).
14
Soluzione: Equazione secondo grado
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
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);
else
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
end
NOTA: delta, x1 e x2 vengono ritornate al
chiamante, indipendentemente da quello che si
fa nella funzione!
15
Lab 6: Altri exe
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Warm Up (20’)
• Qualche cosa un po' più divertente (40’)
• Altri exe… (60’)
 Cambio base
 Scambio elementi
16
Problema: Cambio base
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Ricevere un vettore che rappresenti le
singole cifre di un numero in base 2
stampare a video il valore in base 10
17
Cambio base - Soluzione
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function [ris] = cambioBase(n)
% N vettore di 0 e 1
esp=[length(n)-1:-1:0];
basi=2.^esp;
disp(sum(n.*basi));
18
Problema: Scambio elementi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
• Scrivere un programma che dati due
array scambi gli elementi di indice
dispari
 usare la funzione mod
19
Soluzione: Scambio elementi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
function [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;
end
end
20
Soluzione: Scambio elementi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
disp('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);
21
Fonti per lo studio
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
• Capitoli 2, 3 e 4
• Credits
 Emanuele Panigati
https://sites.google.com/site/engpanigati/
22
Scarica

V1 - PPT