Sunteți pe pagina 1din 8

Pclp 2 Laborator 6

Instruciunea if
Scopul lucrrii. Instruciunea if

Consideraii teoretice

Instruciunea if permite ramificarea fluxului normal. Putem pune o ntrebare i n funcie de
condiiile existente putem realiza o aciune sau alta.

Structura IF-THEN-ELSE

n C++ instruciunea if poate fi folosit n dou variante: forma IF-THEN-ELSE sau forma IF-
THEN. O vom analiza mai nti pe prima.
Sintaxa formei IF-THEN-ELSE este
if(expresie)
Instruciunea 1A
else
Instruciunea 1B



De notat c instruciunea if folosete doar cuvintele rezervate if i else, chiar dac structura
se numete IF-THEN-ELSE.

Exemple

if(oreLucrate <= 40)
plata = sumaPeOra * oreLucrate;
else
plata = sumaPeOra * (40.0 + (oreLucrate 40.0) * 1.5);
cout << plata;

n limbaj natural, aceast instruciune spune urmtorul lucru: Dac numrul de ore lucrate este mai
mic sau egal dect 40, atunci calculeaz suma obinuit de plat i apoi treci la instruciunea de
tiprire. Dac numrul de ore lucrare este mai mare dect 40, atunci calculeaz suma normal i
suma suplimentar , apoi treci la instruciunea de tiprire.

Blocuri

Pentru a evita mprirea la zero ntr-o expresie, s presupunem c atunci cnd
numitorul este egal cu 0 facem dou lucruri: tiprim un mesaj de eroare i ncrcm
valoarea 9999 n variabila rezultat. Trebuie, aadar, s realizm dou instruciuni pe
aceeai ramur, ns sintaxa instruciunii if ne limiteaz la una singur.
S ne amintim c orice compilator C++ trateaz blocul
{
...
}
ca o singur instruciune. Folosind o pereche de acolade pentru a ncadra secvena de instruciuni,
instruciunile vor deveni un singur bloc.
Exemplu
Putem folosi blocuri de instruciuni pe ambele ramuri ale unui IF-THEN-ELSE.

Dup acolada care nchide blocul nu se pune niciodat semnul ;
Forma IF-THEN

Uneori dorim s realizm o aciune cnd se ndeplinete o condiie, dar s nu se ntmple nimic atunci
cnd condiia este fals. Putem lsa ramura else vid.
if(a <= b)
c = 20;
else ;
Mai simplu, putem s nu scriem deloc ramura else. Ajungem, astfel, la forma IF-THEN:
if(Expresie)
Instruciune
Putem rescrie instruciunea din exemplul anterior astfel:


if(a <= b)
c = 20;



Instruciuni if imbricate

Nu exist restricii asupra tipului de instruciuni pe care le poate conine o ramur a unui if. Prin
urmare, o ramur a unui if poate conine un alt if. Cnd folosim o astfel de construcie, spunem c
am creat o structur de if imbricat.


n general, orice problem care implic multi-ramificare poate fi codat prin instruciuni if
imbricate.
Pentru a afia numele unei zile din sptmn putem folosi o serie de instruciuni if
neimbricate.









Acest cod poate fi rescris cu instruciuni if imbricate.




Este mult mai eficient aceast variant pentru c implic mai puine comparaii. Structura care
implementeaz ramificarea multipl se numete IF-THEN-ELSE-IF. Putem realinia structura de mai
sus pentru a evita deplasarea continu spre dreapta datorit alinierilor convenite.

Folosirea greit a lui else

La folosirea instruciunilor if imbricate pot aprea confuzii n legtur cu perechile if-
else: crui if i aparine un else?
S presupunem c dac nota unui student este mai mic dect 5 dorim s
tiprim Respins, dac nota lui este ntre 5 i 6 s tiprim Admis, iar dac nota este
mai mare dect 6 s nu tiprim nimic. Putem coda aceast problem astfel:

Cum tim crui if i aparine un else? O regul din C++ spune c, n absena acoladelor,
un else este asociat ntotdeauna instruciunii if cea mai apropiat care nu are nc un
else drept pereche. Noi obinuim s aliniem codul astfel nct s reflectm aceast
mperechere.
Ne propunem s rescriem codul de mai sus n aa fel nct instruciunea else s fie asociat
primului if.


Aceast versiune nu rezolv problema aa cum dorim noi pentru c simpla aliniere a instruciunilor
nu este suficient. Conform regulii, ultimul else va fi mperecheat cu al doilea if. Pentru o soluie
corect, plasm cel de-al doilea if ntr-un bloc de instruciuni.


Exercitii
1. Se introduce de la tastatura un numr ntreg x. S se scrie un program C++. Scriei
un program care calculeaz i afieaz modulul numrului x.
Soluie

<

=
0 ,
0 ,
x dac x
x dac x
x

2. Se introduce de la tastatur un numr ntreg x. Scrii un program care testeaz dac
x este un numr par.
Soluie : numrul x este par dac este divizibil cu 2(adica restul mpririi lui x la 2 este 0)

Folosii instruciunea if else.

3 Se dau 3 numere a, b,c, . Sa se verifice daca aceste numere pot fi laturile unui triunghi .
Dac da programul se va termina cu succes i va afia semiperimetrul i aria triunghiului.
Dac nu, programul va returna un cod de eroare specific erorii aprute.

Condiiile ca a,b,c s constituie un triunghi sunt
a. a> 0,b>0, c>0 (n caz contrar, vom returna codul de eroare 1)
b. a+b>c, a+c>b, b+c>a (n caz contrar, vom returna codul de eroare 2)

( ) ( ) c p b p a p p aria = ) (
p este semiperimetrul

Adaptai programul efectuat pentru calcul ariei unui triunghi din laboratorul 4 noilor cerine.
S se utilizeze pentru a ndeplini condiiile de mai sus instruciunea if

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