lab 6 – info b
DESCRIPTION
Lab 6 – Info B. Marco D. Santambrogio – [email protected] Riccardo Cattaneo – [email protected] Ver. aggiornata al 30 Dicembre 2013. Lab 6: Obiettivi. Introduzione a Matlab/Octave Cicli Funzioni. Lab 6: Agenda. Warm Up (30 ’ ) Qualche cosa un po' più divertente (60 ’ ) - PowerPoint PPT PresentationTRANSCRIPT
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 6 – Info B Lab 6 – Info B
Marco D. Santambrogio – [email protected] Cattaneo – [email protected]
Ver. aggiornata al 30 Dicembre 2013
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 6: ObiettiviLab 6: Obiettivi
Introduzione a Matlab/Octave
CicliFunzioni
2
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 6: AgendaLab 6: Agenda
Warm Up (30’)
Qualche cosa un po' più divertente (60’)
Altri exe… (90’)
3
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 6: Warm upLab 6: Warm up
• Warm Up (30’) Inserisci numeri Temperatura
• Qualche cosa un po' più divertente (60’)
• Altri exe… (90’)
4
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
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
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
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
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 6: Un pLab 6: Un poo’’ di di divertimentodivertimento
• Warm Up (30’)
• Qualche cosa un po' più divertente (60’) Maggiore Equazione secondo grado
• Altri exe… (90’)
9
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
10
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)]);
11
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)]);
12
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).
13
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
14
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Lab 6: Altri exeLab 6: Altri exe
• Warm Up (30’)
• Qualche cosa un po' più divertente (60’)
• Altri exe… (90’) Cambio base Scambio elementi Rilievi altimetrici
15
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
16
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE
Cambio base - SoluzioneCambio base - Soluzione
17
function [ris] = cambioBase(n)% N vettore di 0 e 1esp=[length(n)-1:-1:0];Basi=2.^esp;disp(sum(n.*basi));
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
18
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
19
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);
20
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
2121
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
2222
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))]);
2323
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/
24