Sunteți pe pagina 1din 5

Structura alternativa

Structura alternativ apare n practic n dou variante i anume:

Structura alternativ: n acest caz se va executa doar unul din dou blocuri de instruciuni n funcie de valoarea de
adevr a unei expresii logice
Structura alternativ multipl: n aceast situaie se va executa un bloc de instruciuni din mai multe variante posibile.

Structura alternative (Instructiunea IF)


Auzim n viata de zi cu zi afirmaii de genul:
DAC am promovat la toate materiile ATUNCI
ma voi duce in tabara,
ALTFEL
stau sa invat.
SFRIT DAC
Se remarc aici trei cuvinte ce au un rol deosebit: DAC, ATUNCI, ALTFEL. Propozitia are trei componente i anume:

o conditie, transcris prin am promovat la toate materiile, conditie pe care o vom nota cu C;
o aciune transcris prin mesajul m voi duce n tabr, notata cu B1, aciune asociata cu cuvntul ATUNCI, adic se
execut dac i numai dac am promovat la toate materiile;
o aciune transcris prin mesajul stau s nv, notat cu B2, aciune asociat cu cuvntul ALTFEL, adic se execut
dac i numai dac NU am promovat la toate materiile

Structura alternativ este implementat n limbajul C++ de instruciunea IF. n continuare vom prezenta
modul de reprezentare a acestei structuri n limbaj pseudocod, n schem logic i n limbajul de programare
C++. Modul de execuie este identic pentru oricare din cele trei reprezentri. Sintetiznd cu notaiile de mai
sus structura alternativ se poate reprezenta astfel:

Pot exista i cazuri particulare de utilizare a acestei structuri, atunci cand unul dintre cele doua blocuri de
instruciuni lipseste.
Cazul 1. Daca lipseste B2 atunci structura se reprezinta astfel:
Cazul 2. Daca lipseste B1 atunci structura se reprezinta astfel:

Pot exista i situaii n care structurile alternative sunt incluse unele in altele. In acest caz spunem ca
instruciunilie if sunt imbricate. Exista o regula de asociere a cuvntului else de if:

n situatia instructiunilor if imbricate, si atunci cand pentru


gruparea instruciunilor nu se folosesc acolade cuvantul else se
asociaz primului cuvant if aflat la stanga lui.(asemanator cu asocierea
inchiderii corecte a grupurilor de paranteze din matematica).

n exemplul urmtor este sugerat cum sunt imbricate 3 instructiuni if. Pentru a le putea identifica uor ele
sunt scrise cu culoari diferite (negru, albastru si portocaliu).
Dac n aceasta schem grupm instruciunile cu acolade se poate schimba fundamental structura
programului:

Se observ c primul cuvnt else este asociat cu cel de-al doilea if, acest lucru fiind determinat de gruparea
ntre acolade a instructiunii if (c3), reprezentate pe desen cu portocaliu

Aplicaii
1. Se citesc dou numere ntregi a i b. S se determine valoarea maxim dintre ele.
2. S se determine valoarea maxima dintre trei numere memorate n variabilele a, b i c.
3. S se scrie un program care s rezolve ecuaia de gradul I: ax+b=0 , valorile lui a i b se citesc de la
tastatur i sunt valori reale. Se vor lua n discuie toate cazurile.
4. S se scrie un program care s rezolve ecuaia de gradul II: ax2+bx+c=0, valorile lui a, b, c se citesc de la
tastatur i sunt valori reale. Se vor lua n discuie toate cazurile.

Structura alternativa multipla


Instruciunea switch n C++
Sa se rezolve urmatoarea problema problem: S se scrie programul care afieaz
numele anotimpului corespunztor unui numr citit de la tastatur (adic, afieaz "Primvar",
dac numrul introdus este 1, "Var", dac numrul introdus este 2, "Toamn", dac numrul
este 3, "Iarn", dac numrul este 4, i avertisment pentru orice alt valoare introdus).

if( nr==1) cout << primavara;


else
if ( nr==2) cout << vara;
else
if( nr==3) cout << toamna;
else
if( nr==4) cout << iarna;
else cout << ati introdus un numar gresit;
Abordarea problemei n aceast manier este extrem de dificil i ineficient. Iat deci motivul
includerii n setul de instruciuni a limbajului C++ a instruciunii switch.
Instruciunea switch este util atunci cnd este necesar s se aleag din mai mult de
dou alternative. Ea permite realizarea structurii alternative multiple. Aceasta este o generalizare
care poate fi realizat prin structuri alternative simple imbricate. Utilizarea instruciunii "switch"
face programul mai clar dect dac se utilizeaz varianta cu mai multe structuri alternative
simple.
Forma general a instruciunii switch

switch(expresie)
{
case c1: secventa_instructiuni_1; break;
case c2: secventa_instructiuni_2; break;
........................................
case cn: secventa_instructiuni_n; break;
[default: secventa_instructiuni_n+1];
}
unde:
expresie are semnificaia de expresie de tip ntreg;
ci sunt constante de tip ntreg;
secventa_ instruciuni_i: reprezint o secven de instruciuni.

Principiul de execuie

- se evalueaz expresia;
- se compar apoi pe rnd valoarea expresiei din parantez cu valorile constantelor c1, c2,
... , ci. Dac ea coincide cu constanta ci, atunci se execut secvena de instruciuni i. n
cazul n care, valoarea expresiei nu coincide cu nici una din constantele c1, c2, ... , cn,
atunci se execut secvena de instruciuni n+1, de pe ramura default. Dup execuia
secvenei de instruciuni i se trece la instruciunea urmtoare instruciunii switch n
program.

Observatii importante!
Aternativa default este opional. In lipsa ei, dac valoarea expresiei nu coincide cu nici una din
constantele c1, c2, ..., cn, atunci instruciunea switch nu are nici un efect, i se trece la
urmtoarea instruciune din program ( cea care este plasat dup instruciunea switch).
Constantele c1, c2, ... cn trebuie s fie distincte.
Construcia break reprezint o instruciune. Ea termin fiecare secven de instruciuni i,
provocnd saltul la instruciunea urmtoare instruciunii switch, sau cum se mai spune realizeaz
ieirea din instruciunea switch.

Instruciunea break nu este obligatorie. n cazul cnd ea este absent, se trece n secven, adic
dup irul de instruciuni respectiv, se trece la irul urmtor din instruciunea switch.
Astfel, dac avem instuciunea switch de forma:
switch (expresie)
{
case c1: secventa_instructiuni_1;
case c2: secventa_instructiuni_2;
}
atunci ea se execut n felul urmtor:
- dac valoarea expresiei este egal cu c1, atunci se execut secvena de instruciuni 1 i apoi
secvena de instruciuni 2
- dac valoarea expresiei este egal cu c2, atunci se execut secvena de instuciuni 2;
- dac valoarea expresiei difer de valorile c1 i c2, atuci instruciunea switch de mai sus nu este
efectiv, ajungndu-se direct la prima instruciune de dup ea.

Instruciunea de mai sus poate fi realizat folosind instruciunea if ca mai jos:


if (expresie = = c1)
secventa_instuctiuni_1;
else
if (expresie = = c2)
secventa_instructiuni_2;

Aplicatie: Scriei un program care determin perimetrul i aria unui triunghi. Exist 4 situaii
posibile. Un triunghi poate fi:
1. isoscel
2. echilateral
3. dreptunghic
4. oarecare.
In funcie de cifra introdus de la tastatur (1, 2, 3 sau 4) se cere s se citeasc pentru fiecare tip
de triunghi datele necesare, astfel nct s se poat calcula perimetrul i aria triunghiului.

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