Sunteți pe pagina 1din 6

Programare si limbaje I

Anul I, AR+ITT

Curs 6a. Instrucţiuni de control condițional


6.1 Instrucţiuni de control condiţional

Instrucţiunile de control condiţional permit selectarea blocului de instrucţiuni care urmează să fie executat, în
momentul rulării, în funcţie de o anumită condiţie (instrucţiunea if cu clauzele ei, else şi endif) sau prin selectarea
dintr-o mulţime de opţiuni posibile (instrucţiunea switch cu clauzele case şi otherwise).

6.1.1 Instrucţiunea if-end

Instrucţiunea if este folosită pentru luarea unei decizii, de obicei într-un fişier script, în conjuncţie cu o expresie cu
rol de condiţie. Corespunde structurii decizionale din programarea structurată.

Sintaxă:
if expresie
instrucţiuni
end

Descriere:
În momentul execuţiei instrucţiunii if, se evaluează expresie şi dacă rezultatul are valoarea logică 1 (true) sau o
valoare diferită de zero, se execută una sau mai multe instrucţiuni.
expresie poate consta în variabile, constante, expresii mai mici unite prin operatori logici sau relaţionali sau
chiar apeluri de funcţii logice sau cu rezultat numeric.

Exemple de expresii:
a>0
(a==b) && (b==c)
(a<=x) && (x<=b)
isprime(a)
isscalar(a)

În cazul în care expresia de tip condiţie nu este evaluată la un scalar (adică este un tablou), toate elementele
tabloului respectiv trebuie să îndeplinească acea condiţie, pentru ca expresia să fie adevărată.

Exemplul 1: să se calculeze media la verificare la Programare pe semestrul I, ştiind că nota finală are următoarele
componente: nota la proba scrisă, cu o pondere de 50%, nota la proba de laborator, cu o pondere de 25%, nota la
dosarul cu probleme, cu o pondere de 25% si eventualul bonus la nota finală. Ca şi condiţii, toate cele trei
componente ale notei trebuie să fie mai mari sau egale cu 5 şi toate eventualele absenţe să fie recuperate.
Exemplul se va verifica pe mai multe seturi de valori de intrare.

Script 1. Fişierul C6script1.m


nota_scris = 5;
nota_lab = 5.5;
nota_dosar = 10;
absente_lab = 0;
bonus = 1.5;
if (nota_scris >= 5) && (nota_lab >= 5) && (nota_dosar >= 5) && (absente_lab == 0)
disp('Media de promovare: ')
media = 0.5 * nota_scris + 0.25 * nota_lab + 0.25 * nota_dosar + bonus;
disp(media);
end

Instrucţiunile if pot fi imbricate (suprapuse sau incluse unele în altele), în acest caz fiecare if trebuie împerecheat
cu o instrucţiune end.

1|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 6. Instrucţiuni de control condiţional
6.1.2 Instrucţiunea if-else-end

Instrucţiunea if-else furnizează o alternativă, în cazul în care expresie nu este adevărată.


Sintaxă:
if expresie
instrucţiuni1
else instrucţiuni2
end

Descriere:
În momentul execuţiei instrucţiunii if-else, se evaluează expresie şi dacă rezultatul are valoarea logică 1 (true)
sau o valoare diferită de zero, se execută una sau mai multe comenzi notate prin instrucţiuni1, iar în caz
contrar, dacă rezultatul are valoarea logică 0 (false), se execută instrucţiunile instrucţiuni2.

Exemplul 2: Se reiau cerinţele de la exemplul 1, cu specificarea că în cazul în care studentul nu întruneşte


condiţiile de promovare, se va afişa mesajul: “Student nepromovat!”. Se va calcula şi afişa atât media rezultată
după aplicarea formulei, cât şi nota finală, rotunjită la cel mai apropiat întreg. Fişierul script creat se va denumi
promovati_if_else.m.

Script 2. Fişierul C6script2.m


% Script calcul nota examen, exemplificare if-else
nume = input('Numele: ', 's');
prenume = input('Prenumele: ', 's');
nota_scris = input('Nota la proba scrisa: ');
nota_lab = input('Nota la laborator: ');
nota_dosar = input('Nota pe dosarul cu probleme: ');
absente_lab = input('Numar absente: ');
bonus = input('Puncte bonus: ');
if (nota_scris >= 5) && (nota_lab >= 5) && (nota_dosar >= 5) && (absente_lab == 0)
media = 0.5 * nota_scris + 0.25 * nota_lab + 0.25 * nota_dosar + bonus;
disp(['Media: ', num2str(media)]);
disp(['Nota de promovare: ', num2str(round(media))]);
else
disp('Student nepromovat!');
end

Mai jos sunt redate două exemple de posibile cazuri de rulare ale script-ului.

Cazul 1:
Numele: Ionescu
Prenumele: Filimon
Nota la proba scrisa: 9.5
Nota la laborator: 8
Nota pe dosarul cu probleme: 6
Numar absente: 0
Puncte bonus: 0.5
Media: 8.75
Nota de promovare: 9
Cazul 2:
Numele: Fodor
Prenumele: Elisabeta
Nota la proba scrisa: 6.5
Nota la laborator: 3
Nota pe dosarul cu probleme: 7
Numar absente: 2
Puncte bonus: 0
Student nepromovat!

Dezavantaje: în script-ul de mai sus, trebuie introduse la început toate datele, pentru ca MATLAB să ia o decizie
(studentul este promovat, caz în care i se calculează media şi nota finală, sau studentul este nepromovat). De
asemenea, dacă punctajul obţinut este mai mare de 10, datorită notelor mari şi a prezenţei bonusului, nota de
promovare nu se limitează la 10.

2|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 6. Instrucţiuni de control condiţional
Exemplul 3: Se reiau cerinţele de la exemplul 1, cu specificarea că în cazul în care studentul nu întruneşte
condiţiile de promovare, se va afişa mesajul: “Student nepromovat!” şi se va menţiona motivul nepromovării. Se
vor analiza toate cazurile de nepromovare, iar în situaţia în care un criteriu de promovare nu este îndeplinit (una
din note este sub 5 sau numărul de absenţe este mai mare decât zero), se va renunţa la introducerea
următoarelor date. În cazul în care, datorită cumulării bonusului, media devine mai mare decât 10, nota finală se
va limita la 10.

Script 3. Fişierul C6script3.m


% Script calcul nota examen, exemplificare if-else, v.2
nume = input('Numele: ', 's');
prenume = input('Prenumele: ', 's');
nota_scris = input('Nota la proba scrisa: ');
if nota_scris < 5
disp('Student nepromovat! Motiv: nota la proba scrisa mai mica de 5.');
else
nota_lab = input('Nota la laborator: ');
if nota_lab < 5
disp('Student nepromovat! Motiv: nota la laborator mai mica de 5.');
else
nota_dosar = input('Nota pe dosarul cu probleme: ');
if nota_dosar < 5
disp('Student nepromovat! Motiv: nota la dosar mai mica de 5.');
else
absente_lab = input('Numar absente: ');
if absente_lab > 0
disp('Student nepromovat! Motiv: absente nerecuperate.');
else
bonus = input('Puncte bonus: ');
media = 0.5 * nota_scris + 0.25 * nota_lab + 0.25 * ...
nota_dosar + bonus;
disp(['Media: ', num2str(media)]);
if media > 10
media = 10;
end
disp(['Nota de promovare: ', num2str(round(media))]);
end
end
end
end

La rularea script-ului pot fi obţinute următoarele rezultate:

Cazul 1:
Numele: Socol
Prenumele: Vivi
Nota la proba scrisa: 10
Nota la laborator: 9.5
Nota pe dosarul cu probleme: 9.75
Numar absente: 0
Puncte bonus: 2
Media: 11.8125
Nota de promovare: 10
Cazul 2:
Numele: Curcan
Prenumele: Vasile
Nota la proba scrisa: 3
Student nepromovat! Motiv: nota la proba scrisa mai mica de 5.
Cazul 3:
Numele: Scorobete
Prenumele: Alexandru
Nota la proba scrisa: 10
Nota la laborator: 10
Nota pe dosarul cu probleme: 10
Numar absente: 3
Student nepromovat! Motiv: absente nerecuperate.

3|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 6. Instrucţiuni de control condiţional
6.1.3 Instrucţiunea if-elseif-end

Uneori în cazul utilizării instrucţiunii if, este necesară impunerea unei condiţii suplimentare. Acest lucru poate fi
realizat cu ajutorul cuvântului cheie elseif.

Sintaxă:
if expresie1
instructiuni1
elseif expresie2
instructiuni2
end

Descriere:
În momentul execuţiei instrucţiunii if-elseif, se evaluează expresie1 şi dacă rezultatul are valoarea logică 1
(true) sau o valoare diferită de zero, se execută una sau mai multe comenzi notate prin instrucţiuni1. În caz
contrar, dacă rezultatul are valoarea logică 0 (false), se evaluează expresie2 şi dacă rezultatul are valoarea
true sau diferit de zero, se execută comenzile instrucţiuni2.
Exemplul 4: Se reiau cerinţele de la exemplul 1, cu specificarea că în cazul în care studentul nu întruneşte
condiţiile de promovare, se va afişa mesajul: “Student nepromovat!” şi se va menţiona motivul nepromovării. În
cazul în care, datorită cumulării bonusului, media devine mai mare decât 10, aceasta se va limita la 10. Se va folosi
forma instrucţiunii condiţionale if-elseif-end.

Script 4. Fişierul C6script4.m


% Script calcul nota examen, exemplificare elseif
nume = input('Numele: ', 's');
prenume = input('Prenumele: ', 's');
nota_scris = input('Nota la proba scrisa: ');
nota_lab = input('Nota la laborator: ');
nota_dosar = input('Nota pe dosarul cu probleme: ');
absente_lab = input('Numar absente: ');
bonus = input('Puncte bonus: ');
if nota_scris < 5
disp('Student nepromovat! Motiv: nota la proba scrisa mai mica de 5.');
elseif nota_lab < 5
disp('Student nepromovat! Motiv: nota la laborator mai mica de 5.');
elseif nota_dosar < 5
disp('Student nepromovat! Motiv: nota la dosar mai mica de 5.');
elseif absente_lab > 0
disp('Student nepromovat! Motiv: absente nerecuperate.');
else
disp('Nota de promovare: ');
media = 0.5 * nota_scris + 0.25 * nota_lab + 0.25 * nota_dosar + bonus;
if media > 10
media = 10;
end
disp(media);
end

6.1.4 Instrucţiunea de selecţie multiplă switch-case-otherwise-end

Instrucţiunea de selecţie multiplă switch execută un bloc de instrucţiuni prin selecţia dintr-o mulţime de
alternative, denumite cazuri (case) în funcţie de valoarea unei expresii, denumite selector.

Sintaxă:
switch expr_selector
case expr_case
instrucţiune, ..., instrucţiune
case {expr_case 1, expr_case 2, expr_case 3, ...}
instrucţiune, ..., instrucţiune
otherwise
instrucţiune, ..., instrucţiune
end

4|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 6. Instrucţiuni de control condiţional

Descriere:
Instrucţiunea switch-case-otherwise-end reprezintă un mod de execuţie condiţionată a codului. Fiecare
alternativă (case) conţine: instrucţiunea case, una sau mai multe expresii şi una sau mai multe instrucţiuni. Se vor
executa instrucţiunile de pe ramura case unde expresia selector coincide cu cel puţin una din expresiile case
specificate. Dacă nici una din expresiile case nu coincide cu expresia selector, se vor executa instrucţiunile
specificate după clauza otherwise.

Observaţie:
Spre deosebire de limbajul C, MATLAB execută doar prima ramură case care se potriveşte cu valoarea expresiei
selector. Din această cauză, instrucţiunea break nu este necesară aici.

Exemplul 5: Se citeşte de la tastatură o cifră între 1 şi 7, reprezentând o zi din săptămână. Să se afişeze numele
zilei, în funcţie de cifra citită de la tastatură.

Script 5. Fişierul C6script5.m


% zile din saptamana
zi = input('Introduceti ziua: ');
switch zi
case 1
mesaj = 'luni';
case 2
mesaj = 'marti';
case 3
mesaj = 'miercuri';
case 4
mesaj = 'joi';
case 5
mesaj = 'vineri';
case 6
mesaj = 'sambata';
case 7
mesaj = 'duminica';
otherwise
mesaj = 'zi inexistenta!';
end
disp('Ziua este:');
disp(mesaj);

Exerciţiu propus:

1. Se citesc de la tastatură valorile a, b, şi h, reprezentând capetele unui interval [a, b], respectiv pasul de
parcurgere. Să se reprezinte graficul funcţiei g(x), dată prin următoarea expresie:
2 x + 1, daca x  −5
 x − 5, daca − 5  x  4

g ( x) =  x + 1 .
 x( x − 3) , daca 4  x  8

x + 6, daca x  8
Rezolvare:
a = input('a = ');
b = input('b = ');
h = input('h = ');
x = a:h:b;
y1 = 2*x(x<-5)+1;
y2 = x((-5<=x)&(x<4))-5;
x3 = x((4<=x)&(x<8));
y3 = (x3+1)./(x3.*(x3-3));
y4 = x(x>=8)+6;
y = [y1 y2 y3 y4];
[x' y']
plot(x,y)

5|Page
Conf.dr.ing. Ovidiu-Aurelian Deteşan – Programare si limbaje I Curs 6. Instrucţiuni de control condiţional
Rezultate:
a = -7
b = 10
h = 0.1
ans =
-7.0000 -13.0000
-6.9000 -12.8000
-6.8000 -12.6000
-6.7000 -12.4000
-6.6000 -12.2000
...
9.6000 15.6000
9.7000 15.7000
9.8000 15.8000
9.9000 15.9000
10.0000 16.0000
Rezultatele intermediare au fost omise în mod intenţionat, din economie de spaţiu.

Fig. 6.1 Graficul funcţiei g(x)

6|Page

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