Laborator 4 MATLAB if Switch Etc

5
Page 1 of 5 Disciplina: Programarea şi Utilizarea Calculatoarelor II Dr.-Ing. Călin Vaida Nu uitati avantajele funcţiilor: - help ***** - doc ***** Dacă nu se specifică, secvenţele de program se vor introduce în scripturi (titlu_program.m) şi se vor executa de acolo. 1. Considerǎm funcţia f(x) definită pe mai multe intervale: f ( x )=¿ { 3 x 2 11 ,x<0 ¿ ¿¿¿ Să se calculeze valoarea funcţiei f(x) pentru o valoare a lui x, care se citeşte. Rezolvare: Se crează un fişier prog_if_1.m, în care se introduce: x=input('Introduceti valoarea lui x='); if (x<0) f=3*x^2-11; else f=x^2-x-5; end disp(['Valoarea functiei in punctul x este f(',num2str(x),')=',num2str(f)]); Rulaţi problema pentru diferite valori ale lui x. Exerciţii Considerǎm funcţia f(x) definită pe mai multe intervale: f( x)=¿ {3 x+5,x<−6 ¿ {15, 6x<7 ¿ ¿¿¿ Să se calculeze valoarea funcţiei f(x) pentru o valoare a lui x, care se citeşte. Să se rezolve aceeaşi problemă pentru funcţia: f( x)=¿ { 3x x+3 ,x<−8 ¿ { 2 x , 8x<2 ¿ ¿¿¿ Să se ruleze programul script pentru următoarele valori ale lui x: -8, -3, 0, 1, 5 Ce observaţi? Dacă e cazul, modificaţi programul. 2. Inversarea valorilor între două variabile. Se citesc două numere, a şi b. Dacă a este mai mare decât b, să se inverseze valorile celor două variabile. Ex: a=3, b=5 rezultă a=3, b=5 a=8, b=2 rezultă a=2, b=8 Rezolvare: a=input('Dati a='); b=input('Dati b='); if (a>b) aux=a; a=b; b=aux; end disp(['Noile valori sunt a=',num2str(a),' si b=',num2str(b)]); !!Atenţie la inversarea valorii între două variabile trebuie să folosim întotdeauna o variabilă ajutătoare. Să se scrie un program care, pe baza unui număr introdus, să returneze echivalentul in ziua

Transcript of Laborator 4 MATLAB if Switch Etc

Page 1: Laborator 4 MATLAB if Switch Etc

Page 1 of 4

Disciplina: Programarea şi Utilizarea Calculatoarelor II Dr.-Ing. Călin Vaida

Nu uitati avantajele funcţiilor: - help ***** - doc *****

Dacă nu se specifică, secvenţele de program se vor introduce în scripturi (titlu_program.m) şi se vor executa de acolo. 1. Considerǎm funcţia f(x) definită pe mai multe intervale:

f ( x )=¿ {3⋅x2−11, x<0 ¿ ¿¿¿Să se calculeze valoarea funcţiei f(x) pentru o valoare a lui x, care se citeşte.Rezolvare:Se crează un fişier prog_if_1.m, în care se introduce:x=input('Introduceti valoarea lui x='); if (x<0) f=3*x^2-11;else f=x^2-x-5;end disp(['Valoarea functiei in punctul x este f(',num2str(x),')=',num2str(f)]);

Rulaţi problema pentru diferite valori ale lui x.

Exerciţii

Considerǎm funcţia f(x) definită pe mai multe intervale:

f ( x )=¿ {−3⋅x+5 , x<−6 ¿ {15 , −6≤x<7 ¿ ¿¿¿Să se calculeze valoarea funcţiei f(x) pentru o valoare a lui x, care se citeşte.Să se rezolve aceeaşi problemă pentru funcţia:

f ( x )=¿ {−3⋅xx+3, x<−8¿ {2x , −8≤x<2 ¿ ¿¿¿

Să se ruleze programul script pentru următoarele valori ale lui x: -8, -3, 0, 1, 5

Ce observaţi? Dacă e cazul, modificaţi programul.

2. Inversarea valorilor între două variabile.

Se citesc două numere, a şi b. Dacă a este mai mare decât b, să se inverseze valorile celor două variabile. Ex:a=3, b=5 rezultă a=3, b=5a=8, b=2 rezultă a=2, b=8Rezolvare:

a=input('Dati a=');b=input('Dati b='); if (a>b) aux=a; a=b; b=aux;end disp(['Noile valori sunt a=',num2str(a),' si b=',num2str(b)]);

!!Atenţie la inversarea valorii între două variabile trebuie să folosim întotdeauna o variabilă ajutătoare.

Să se scrie un program care, pe baza unui număr introdus, să returneze echivalentul in ziua saptamanii (1 – Luni, 2- Marţi, etc).

Rezolvare

%%Exemplu switch zi=input('Alegeti o zi a sapt (1-7):'); switch zi case 1 disp('Ati ales: Luni'); case 2 disp('Ati ales: Marti'); case 3 disp('Ati ales: Miercuri'); case 4 disp('Ati ales: Joi'); case 5 disp('Ati ales: Vineri'); case 6 disp('Ati ales: Sambata'); case 7 disp('Ati ales: Duminica'); otherwise disp('Nu ati introdus un numar corect');end

3. Utilizând diferiţi operatori, să se determine dacă un an este bisect sau nu.

Page 2: Laborator 4 MATLAB if Switch Etc

Page 2 of 4

%%Program an bisect an=input('Introduceti anul:'); if (~rem(an,4)) disp ('Anul este bisect!!');else disp('Anul nu este bisect!!');end %%Sfarsit program

4. Să se modifice programul anterior, astfel încât calculatorul să verifice dacă utilizatorul doreşte să introducă alte valori sau nu.

%%Program an bisect cu repetitie while (1) an=input('Introduceti anul:'); if (~rem(an,4)) disp ('Anul este bisect!!') else disp('Anul nu este bisect!!') end raspuns = input('Doriti introducerea altui an? D/N [N]','s'); if isempty(raspuns) raspuns='N'; end if ~(raspuns == 'D') break; endend %%Sfarsit program

5. Să se scrie un program care să ceară introducerea unei valori de la tastatură, în intervalul [a,b] să verifice dacă valoarea e bună, şi să genereze apoi un şir de valori aleatoare în intervalul [a,b] până când se generează un număr egal cu cel ales de utilizator.

i=1;j=-1;while j<0 j=input('Dati o valoare intre 0 si 20: '); if j<0 || j>20 j=-1; endenddisp('Apasati o tasta pentru a incepe generarea de numere aleatoare!!');pause; while (1) a(i)=randi(20,1); if a(i)==j break end i=i+1;

enddisp(['Au fost generate ',num2str(length(a)), ' numere pana la obtinerea valorii ',num2str(j)])disp(a);%%Sfarsit program

6. Să se genereze un sir cu numere de la 1 la 100. Să se genereze un al doilea şir, care să conţină doar elementele divizibile cu un număr a. Soluţia 1. while – continue%%Exemplificarea utilizarii while - continue i=1;j=0;a(i)=0; while (i<100) i=i+1; a(i)=i; if rem(a(i),3) continue end j=j+1; b(j)=a(i);endadisp('Numerele divizibile cu trei sunt :')b %%Sfarsit program

Soluţia 2. While şi if

i=1;j=0;a(i)=0; while (i<100) i=i+1; a(i)=i; if rem(a(i),3)==0 j=j+1; b(j)=a(i); endend adisp('Numerele divizibile cu trei sunt :')b %%Sfarsit program

Exerciţiu. Modificaţi programul astfel încât acesta să solicite introducerea unui număr de la tastatură, să verifice dacă este mai mic ca 100, şi apoi să formeze şirul nou cu numerele divizibile cu numărul dat.

Page 3: Laborator 4 MATLAB if Switch Etc

Page 3 of 4

7. Să se genereze un număr între 0 şi 100, şi să se clasifice ca şi valoare în 5 intervale: foarte mic, mic, mediu, mare, foarte mare. Soluţia 1. Case

a = randi(100, 1) switch logical(true) case a < 20 disp('very small') case a < 40 disp('small') case a < 60 disp('medium') case a < 80 disp('high') otherwise disp('very high')end

%%Sfarsit program

Soluţia 2. If – elseif

a = randi(100, 1) if a < 20 disp('very small')elseif a < 40 disp('small')elseif a < 60 disp('medium')elseif a < 80 disp('high')else disp('very high')end %%Sfarsit program

Exerciţii. Să se modifice programul astfel încât să permită mai multe rulări. Să se modifice din nou, programul iniţial, astfel încât în loc de generarea numărului să ceară introducerea lui de către un utilizator, cu verificarea faptului că numărul este între valorile 0 şi 100.

8. Se dă funcţia:

f ( x )={ 2 x

x2−3 x+2, daca x≤0

2 x+1 , daca 0<x<103 x2−5 x+1 , daca x≥10

V1. (cu while)

Să se determine f ( x ) pentru x∈ [a ,b ] parcursă cu pasul p.

V2. (cu operatorul ‘.’)

Să se determine f ( x ) pentru x∈ [a ,b ] divizat in k intervale egale.

Soluţia 1.

'Introduceti capetele intervalului'a=input('a=');b=input('b='); if a>b aux=a; a=b; b=aux;end 'V1'p=input('Introduceti pasul p=');i=1;x=a;x(i)=a;while (x(i)<=b) if x(i)<=0 f(i)=2*x(i)/(x(i)^2-3*x(i)+2); elseif x(i)<10 f(i)=2*x(i)-1; else f(i)=3*x(i)^2-5*x(i)+1; end x(i+1)=x(i)+p; i=i+1;endx=x(1:(length(x)-1));'Valorile functiei sunt:'i=1;while (i<=length(x)) fprintf('f(%.2f)=%.2f\n',x(i),f(i)); i=i+1;endplot(x,f);

Soluţia 2.

'Introduceti capetele intervalului'a=input('a=');b=input('b='); if a>b aux=a; a=b; b=aux;end 'V2'k=input('introduceti numarul de intervale k=');p=(b-a)/k;x=a:p:b;

Page 4: Laborator 4 MATLAB if Switch Etc

Page 4 of 4

f1=(2*x(x<=0))./(x(x<=0).^2-3*x(x<=0)+2);f2=2*x(x>0&x<10)-1;f3=3*x(x>=10).^2-5*x(x>=10)+1;f=[f1 f2 f3]'i=1;while (i<=length(x)) fprintf('f(%.1f)=%.2f\n',x(i),f(i)); i=i+1;endplot(x,f);

Se dă funcţia:

Să se determine valorile funcţiei f(x) în intervalul [a,b], parcurs cu pasul k. Sa se afişeze, pentru fiecare valoare a lui x, f(x) dacă funcţia se poate calcula, respectiv un mesaj de eroare în punctele unde funcţia nu se poate calcula.