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 IFTHEN. 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 ifelse: 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 x, dac x 0 x = x, dac x < 0 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)

aria = p ( p a ) ( p b ) ( p c ) 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