Esercizio 1: Cinematica Esercizio 2: Matrice Triangolare

CORSO DI LAUREA IN INGEGNERIA ELETTRICA
!
Informatica B
anno accademico 2012-2013
Prof. Danilo ARDAGNA
!
Esercitazione – 16.05.2013
!
!
!
Esercizio 1: Cinematica
!
Due treni partono da due stazioni adiacenti, che distano 15km, viaggiando a velocità di 50m/s e 30m/s in
direzione opposta.
Costruire un grafico che mostri la loro posizione, fino a quando il più veloce raggiunge la destinazione.
!
Il più veloce impiega 15000/50=300s
La distanza percorsa dal treno 1: DistanzaTreno1 = 50·t;
La distanza percorsa dal treno 2: DistanzaTreno2 = 15000 - 30·t;
direzione opposta)
(per mostrare la provenienza dalla
!
!
!
!
!
!
!
!
!
!
!
!!
!!
Esercizio 2: Matrice Triangolare
!
!
!
!
• Creazione dello script treni.m
• Esegui treni nella console
Soluzione
max_t = 15000/50; t=0:1:max_t; distanza_treno_1 = 50*t; distanza_treno_2 = 15000-­‐30*t; plot(t,distanza_treno_1); hold on plot(t,distanza_treno_2); hold off (Estratto dal tema d’esame della prova in itinere B1 2012)
Si scriva uno script in Matlab/Octave che svolge le seguenti operazioni:
1. Definisce una matrice quadrata di interi di dimensione N*N, con N pari a 5.
2. Acquisisce da tastiera una sequenza di valori interi che memorizza nella porzione triangolare superiore
della matrice. La parte triangolare superior della matrice è costituita dalle celle poste sulla diagonal
principale e al di sopra di tale diagonale.
!
!
3. Copia in un array di dimensioni opportune tutti I valori della porzione triangolare di matrice che sono
maggiori di -10.
4. Stampa il contenuto dell’array.
!2
!
!
Soluzione
N=5; for x=1:N for y=x:N M(x,y)=input(sprintf('M(%d,%d)= ',x,y)); end end !
%visualizza M M l=1; for x=1:N for y=x:N if(M(x,y)>-­‐10) a(l)=M(x,y); l=l+1; end end end !
%visualizza a %così a %oppure utilizzando disp disp(a) !
!
Esercizio 3: Rotazione di Matrice
!
Programma che data una matrice a NxN crea una nuova matrice b ruotata di 90 gradi in senso antiorario
rispetto ad a.
Si consideri N=4 e la matrice a inizializzata con i valori
!
!
!
!
[1 2 3
4; 2 3 4 5; 6 7 8 9; 0 0 0 0]
Soluzione
N=4; a = [1 2 3 4; 2 3 4 5; 6 7 8 9; 0 0 0 0]; for x=1:N for y=1:N b(N+1-­‐y,x)=a(x,y); end end !
%stampo la matrice originale a %stampo la matrice ruotata b !
!
!
!
Soluzione 2 N=4; a=[1 2 3 4; 2 3 4 5; 6 7 8 9; 0 0 0 0]; !2
!3
%utilizzo la funzione di MATLAB rot90 a !
!
Esercizio 4: Sequenza palindroma !
!
!
!
!
!
!
b=rot90(a) Si scriva uno script che chiede l’inserimento di una sequenza di N numeri e alla fine dice se la sequenza è
palindroma o no.
Si ricorda che una sequenza è palindroma se risulta uguale letta da sinistra verso destra o da destra verso
sinistra.
Soluzione
a=input('Inserire parola: '); N = length(a); palindroma = true; for x=1:N/2 if a(x)~= a(N-­‐x+1) palindroma=false; end end !
if palindroma disp('La sequenza e’ palindroma'); else disp('La sequenza NON e’ palindroma'); end !
Esercizio 5: Equazioni di secondo grado !
!
!
!
!
!
!
!
!
!
!
!
Si chieda l’inserimento dei tre coefficient di una equazione di secondo grado: ax2+bx+c=0 e si stampi il
valore delle radici reali.
Soluzione
Bisogna calcolare il discriminante dell'equazione con la formula b^2-­‐4*a*c Se è positive abbiamo due radici distinte, Se è nullo le radici sono reali e coincidenti, Se è negativo le radici non sono reali. a = input('Inserire a: '); b = input('Inserire b: '); c = input('Inserire c: '); delta = b^2-­‐4*a*c; if delta < 0 disp('L''equazione non ha soluzioni reali'); elseif delta==0 disp(['x=' num2str(-­‐b/(2*a))]); !3
!
!4
else disp(['x1=' num2str((-­‐b-­‐sqrt(delta))/(2*a)) ' x2=' ... num2str((-­‐b+sqrt(delta))/(2*a))]); !
!
Esercizio 6: Confronti
!
end Si scriva uno script che chiede di inserire una sequenza di N numeri.
Successivamente, si inserisca un ulteriore numero e si dica se tutti i numeri della sequenza sono minori,
uguali o maggiori di tale numero.
!
!
!
Soluzione
N=input('inserire N: '); for x=1:N a(x) = input('inserire numero: '); end !
!
!
!
!
M=input('inserire M: '); minori = true; maggiori = true; uguali = true; for x=1:N if a(x)>M minori=false; uguali=false; !
elseif a(x)<M maggiori=false; uguali=false; !
else maggiori=false; minori=false; end end !
!
!
!
!
!
!
if minori disp('I numeri della sequenza sono minori del numero dato'); else disp('I numeri della sequenza non sono minori del numero dato'); end if maggiori disp('I numeri della sequenza sono maggiori del numero dato'); else disp('I numeri della sequenza non sono maggiori del numero dato'); end if uguali disp('I numeri della sequenza sono uguali al numero dato'); !4
!
!
!!
!!
!
!5
else disp('I numeri della sequenza non sono uguali al numero dato'); end Versione alternativa che fa uso di operatori relazionali e vettori
N = input('inserire N: '); for x=1:N a(x) = input(['inserire numero, a(',num2str(x),')= ']); end !
!
M = input('inserire numero di confronto: '); maggiori = true; minori = true; uguali = true; !
l = length(a); if sum(a>M)== l % sono tutti maggiori di M minori = false; uguali = false; elseif sum(a<M)==l maggiori = false; uguali = false; elseif sum(a==M)==l maggiori = false; minori = false; else maggiori = false; minori = false; uguali = false; end if maggiori disp(['Tutti gli elementi di a sono maggiori di ',num2str(M)]); elseif minori disp(['Tutti gli elementi di a sono minori di ',num2str(M)]); elseif uguali disp(['Tutti gli elementi di a sono uguali a ',num2str(M)]); else disp(['Non tutti gli elementi di a sono maggiori di ',num2str(M)]); disp(['Non tutti gli elementi di a sono minori di ',num2str(M)]); disp(['Non tutti gli elementi di a sono uguali a ',num2str(M)]); end !!
Esercizio 7: Confronti con Matrici
!
Scrivere in Matlab uno script che, data una matrice m di numeri, restituisce in uscita una matrice mr,
ottenuta da m nel seguente modo: si calcola la media aritmetica dei valori di m; per i valori che in m sono
minori della media, in mr si pone nella stessa posizione il valore -1, per quelli superiori alla media si pone il
valore 1, e per gli altri (quelli uguali alla media) si pone lo stesso valore.
!
!
Si utilizzi la matrice m = [-2 2 3; 4 5 6]
Soluzione 1
!5
!
!
!
!
!6
m=[-­‐2 2 3; 4 5 6]; [R,C]= size(m); s=0; for r=1:R for c=1:C s=s+m(r,c); end end !
!
media = s/(R*C) for r=1:R for c=1:C if m(r,c)<media m(r,c)=-­‐1; !
!
elseif m(r,c)>media m(r,c)=1; end end end !
!
!
!
!
!
!
!
m Soluzione 2 m=[-­‐2 2 3; 4 5 6]; [R,C]= size(m); s=0; %utilizziamo la funzione mean media = mean(m(:)); for r=1:R for c=1:C if m(r,c)<media m(r,c)=-­‐1; elseif m(r,c)>media m(r,c)=1; end end end m
!!
!
!
!
Soluzione 3
m=[-­‐2 2 3; 4 5 6]; [R,C]= size(m); s=0; %utilizziamo la funzione mean !6
!
!
!
! !7
media = mean(m(:)); m(m<media) = -­‐1; m(m>media) = 1; m
!7