Sunteți pe pagina 1din 9

Informatica aplicată 2 - MATLAB 1

CURS 4

PROGRAMAREA ÎN LIMBAJUL MATLAB (partea 3)

2. Instrucțiuni de salt și bucle (instrucțiuni pentru controlul derulării unui program) (partea 2)

Instrucțiunile switch, case, otherwise


Execută grupuri de instrucțiuni pe baza condiției logice de identitate a unor șiruri de caractere.

Sintaxa Schema logică


codul anterior
switch expresie
case valoare 1
grup 1 de instructiuni
case valoare 2
grup 2 de instructiuni
...
case valoare n
grup n de instructiuni
otherwise
grup n+1 de instructiuni
end
codul ulterior
Informatica aplicată 2 - MATLAB 2

Exemplu: Un fișier script cu numele calculArieVar2 pentru triunghi, dreptunghi și cerc.


figura=input('Tastati triunghi, dreptunghi sau cerc: ','s');
switch figura
case 'triunghi'
b=input('Tastati valoarea numerica a bazei in [mm] = ');
h=input('Tastati valoarea numerica a inaltimii in [mm] = ');
aria=b*h/2;
disp(['aria triunghiului = ', num2str(aria), ' [mm^2]']);
case 'dreptunghi'
a=input('Tastati valoarea numerica a bazei in [mm] = ');
b=input('Tastati valoarea numerica a inaltimii in [mm] = ');
aria=a*b;
disp(['aria dreptunghiului = ', num2str(aria), ' [mm^2]']);
case 'cerc'
r=input('Tastati valoarea numerica a razei in [mm] = ');
aria=pi*r^2;
disp(['aria cercului = ', num2str(aria), ' [mm^2]']);
otherwise
disp('Ati tastat altceva decat triunghi, dreptunghi sau cerc');
end

Comparație între switch-case-otherwise și if-elseif-else

switch-case-otherwise if-elseif-else

mai ușor de scris/înțeles mai greu de scris/înțeles

pentru a compara șiruri de caractere


poate compara șiruri de caractere
trebuie folosită funcția strcmp
testează doar pe baza condiției logice testează pe baza condițiilor logice de
de identitate identitate sau inegalitate
Informatica aplicată 2 - MATLAB 3

Instrucțiunea for
Execută un grup de instrucțiuni de un număr fixat de ori.

Sintaxa Schema logică


codul anterior
for index=start:increment:end
corpul de instrucțiuni ale lui for
end
codul ulterior

Exemplul 1: Să se scrie un fișier script numit sumaSerieNumereVar1 pentru calculul sumei unei
serii de n valori numerice introduse de utilizator.
%Calculeaza suma unei serii de n valori numerice introduse de utilizator
%Se foloseste bucla FOR

%Numarul de valori numerice din serie


n=input('Introduceti numarul de valori din serie: ');
disp(['Numarul de valori insumate va fi ',num2str(n)])
%Initializez acumulatorul (variabila) suma
suma=0; %acumulatorul se intializează intotdeauna cu 0
for i=1:1:n %se poate scrie si i=1:n
numar=input('Introduceti un numar: ');
suma=suma+numar; %se recalculeaza variabila ”suma”
end
%Afisez suma
disp(['Suma celor ',num2str(n),' valori introduse este ',num2str(suma)])
Informatica aplicată 2 - MATLAB 4

Exemplul 2: Să se genereze 5 numere egale cu dublul celui anterior, primul fiind introdus de utilizator.
x(1)=input('Introduceti valoarea primului numar: ');
for n=2:1:6 %se poate scrie si n=2:6
x(n)=2*x(n-1);
end
disp(x)

Se pot scrie instrucțiuni for în corpul unei alte instrucțiuni for (for imbricat).
Exemplul 3: Să se scrie un fișier script numit generareMatriceVar1 pentru generarea unei
matrice M cu m linii și n coloane având valorile elementelor dată de relația M(i,j)=1/(i+j-1)
%Generarea unei matrice m x n cu elementele calc. cu rel. M(i,j)=1/(i+j-1)

m=input('numarul de linii = ');


n=input('numarul de coloane = ');
M=zeros(m,n); %functia zeros genereaza o matrice m x n cu elemente = 0
for i=1:m %se repeta de m ori
for j=1:n %se repeta de m x n ori
M(i,j)=1/(i+j-1);
end
end
disp('Matricea generata este:');
disp(M)

Combinarea instrucțiunilor if și for.


Exemplul 4: Să se scrie un fișier script numit nrValStrictPozitive care să returneze numărul
de valori strict pozitive dintr-un șir numeric introdus de utilizator.
%Script-ul returneaza numarul de valori strict pozitive dintr-un sir numeric
%Sirul numeric se da sub forma unui vector linie, de exemplu [1 -2 3 -9 4 1]

a=input('Tastati un sir numeric ');


contor=0; %initializez variabila contor care va numara valorile strict poz.
for i=1:length(a)
if a(i)>0
contor=contor+1;
end
end
disp(['Numarul de valori strict pozitive este ',num2str(contor)])
Informatica aplicată 2 - MATLAB 5

Instrucțiunea while
Execută un grup de instrucțiuni de un număr nedefinit de ori pe baza unei condiții logice.

Sintaxa Schema logică


codul anterior
while conditie logica
corpul de instrucțiuni ale lui while
end
codul ulterior

Exemplul 1: Să se scrie un fișier script numit sumaSerieNumereVar2 pentru calculul sumei unei
serii de n valori numerice introduse de utilizator.
%Calculeaza suma unei serii de n valori numerice introduse de utilizator
%Se foloseste bucla WHILE

%Numarul de valori numerice din serie


n=input('Introduceti numarul de valori din serie: ');
disp(['Numarul de valori insumate va fi ',num2str(n)])
%Initializez acumulatorul (variabila) suma
suma=0; %acumulatorul se intializează intotdeauna cu 0
i=1;% se initializeaza indicele ”i” cu valoarea 1
while i<=n
numar=input('Introduceti un numar: ');
suma=suma+numar; %se recalculeaza variabila ”suma”
i=i+1; %se indexeaza indicele ”i”
end
%Afisez suma
disp(['Suma celor ',num2str(n),' valori introduse este ',num2str(suma)])

Exemplul 2: Să se scrie un fișier script numit traiectorie pentru calculul elementelor


traiectoriei unui proiectil (înălțime, distanță) lansat sub un anumit unghi față de orizontală, sub
acțiunea gravitației: la orice moment t, componentele deplasării (orizontală și verticală a
proiectilului) sunt date de relațiile (1):
Informatica aplicată 2 - MATLAB 6

x = v 0  cos (  )  t

 t2 (1)
 y = v  sin ( )
  t − g

0
2

%Script-ul calculeaza inaltimea maxima si distanta maxima parcurse de un


%proiectil lansat cu viteza data sub un unghi dat

v=input('Introduceti valoarea vitezei de lansare in [m/s]: ');


alfa=input('Introduceti valoarea unghiului de lansare in [grd]: ');
t=0; %initializare timp
deltaT=10^-5; %variatia timpului se stabileste 10^-5 sec
x(1)=0; %valoarea initiala a deplasarii pe axa X la t=0
y(1)=0; %valoarea initiala a deplasarii pe axa Y la t=0
i=1; %initializare indice ”i”
while y(i)>=0 %la primul ciclu y(1)=0, deci adevarat
i=i+1; %indexare indice i
t=t+deltaT;
x(i)=v*cosd(alfa)*t; %cosd are argumentul de intrare in grd
y(i)=v*sind(alfa)*t-9.81/2*t^2; %sind are argumentul de intrare in grd
end
%functia max gaseste valoarea maxima a vectorului y
disp(['inaltimea maxima= ',num2str(max(y)),' [m]'])
%x(end) inseamna ultima valoare din vectorul x
disp(['distanta maxima= ',num2str(x(end)),' [m]'])
plot(x,y) %functia plot creează un grafic 2-D de tip linie

Aplicație numerică: viteza de lansare 20m/s, unghiul de lansare 30grade.


inaltimea maxima=5.0968 [m]
distanta maxima=35.312 [m]
Informatica aplicată 2 - MATLAB 7

Exemplul 3: Să se scrie un fișier script cu numele celsToFahr care să transforme temperaturile în


grade Celsius introduse de la tastatură în grade Fahrenheit.
%Scriptul celsToFahr pentru transformarea gradelor Celsius in Fahrenheit
%Formula de transformare: F=32+9/5*C

raspuns=input('Continuati? (da/nu): ','s');


while strcmp(raspuns,'da')==1
C=input('Temperatura in grade Celsius= ');
F=32+9/5*C;
disp(['Temparatura in grade Fahrenheit= ',num2str(F)]);
raspuns=input('Continuati? (da/nu): ','s');
end

Exemplul 4: Validarea intrărilor folosind bucla while. Validarea intrărilor (input-ului) este procesul
de verificare a datelor care sunt introduse într-un program ca să fim siguri că sunt corecte înainte de
a fi folosite în calcule. Dacă un user introduce date greșite, programul va returna răspunsuri eronate
sau erori logice care sunt cel mai greu de depanat. Calculatorul nu poate să facă diferența între datele
corecte și cele incorecte. Ce s-ar întâmpla dacă la orele lucrate într-o săptămână, operatorul în loc de
50 de ore ar introduce 500 de ore? Rezultatul ar fi aberant. Același lucru se poate întâmpla și cu
salariul orar. Cum prevenim o astfel de greșeală? Simplu! Utilizăm bucle while.
Să se scrie un script salariulBrutSapt care să calculeze salariul brut săptămânal al angajaților.
Informatica aplicată 2 - MATLAB 8

%Script-ul afiseaza salariul brut saptamanal pentru orele lucrate


%intr-o saptamana

%Se introduc numele si prenumele angajatului


nume=input('Introdu numele angajatului: ','s');
prenume=input('Introdu prenumele angajatului: ','s');
%Introducem numarul orelor lucrate intr-o saptamana
ore=input('Introdu numarul orelor lucrate: ');
%Ne asiguram ca userul nu introduce o valoare absurda
while ore>60
disp('Eroare! Nu pot fi mai mult de 60 de ore!');
ore=input('Introdu orele corecte: ');
end
%Introducem salariul orar
salOrar=input('Introdu salariul orar: ');
%Ne asiguram ca userul nu introduce o valoare absurda
while salOrar>70
disp('Eroare! Salariul orar nu poate fi mai mare de 70 lei!');
salOrar=input('Introdu salariul orar corect:');
end
%Calculam salariul brut
salariu=ore*salOrar;
%Afiseaza salariul
disp(['Sal. brut/sapt. al lui ',nume,' ',prenume,' este: ',num2str(salariu)]);

Se pot scrie instrucțiuni while în corpul unei alte instrucțiuni while (while imbricat):
Exemplul 5: Să se scrie un fișier script numit generareMatriceVar2 pentru generarea unei
matrice M cu m linii și n coloane având valorile elementelor dată de relația M(i,j)=1/(i+j-1)
Informatica aplicată 2 - MATLAB 9

%Generarea unei matrice m x n cu elementele calc. cu rel. M(i,j)=1/(i+j-1)

m=input('numarul de linii = ');


n=input('numarul de coloane = ');
M=zeros(m,n); %functia zeros genereaza o matrice m x n cu elemente = 0
i=1; %se initializeaza indicele ”i” cu valoarea 1
while i<=m %se repeta de m ori de 1 la m
j=1; %se initializeaza indicele ”j” cu valoarea 1
while j<=n %se repeta de m x n ori
M(i,j)=1/(i+j-1);
j=j+1; %se indexeaza indicele ”j”
end
i=i+1; %se indexeaza indicele ”i”
end
disp('Matricea generata este:');
disp(M)

Observație: este mai dificilă gestionarea indicilor în cazul folosirii ciclului while decât în cazul
ciclului for.

Bibliografie
1. ***, Fundamente de Matlab, telecom.etti.tuiasi.ro/
2. Iulian Lupea, Curs Matlab
3. Nicoleta Breaz ș.a., Modelarea matematică prin Matlab
4. ***, MATLAB User’s Guide, The Mathworks Inc., SUA

S-ar putea să vă placă și