Instrucţiunile de selecţie

În C++ există două instrucţiuni pentru a condiţiona executarea unor instrucţiuni de îndeplinirea unei condiţii. Anume, instrucţiunile if şi switch.

### **Instrucţiunea if**

Sintaxa generală a acestei instrucţiuni este:

```
if(<condiţie>) <instrucţiune A>;

             [else <instrucţiune B>;]

```

Condiţia este o expresie care se evaluează. Dacă rezultatul evaluării este true, atunci se execută <instrucţiune A>. În caz contrar este executată <instrucţiune B>. Să precizăm că ramura else este opţională. În exemplul următor vom determina afişarea unui mesaj corespunzător, dacă valoarea unei variabile este pozitivă.

```
if(n>=0) cout<<”Numar pozitiv”;

```

După cum se observă, ramura else lipseşte aici, acest lucru însemnând că în cazul în care valoarea lui n este negativă nu se va executa nicio intrucţiune.  Dacă am dori executarea mai multor instrucţiuni, condiţionate de valoarea expresiei, atunci ar trebui să le grupăm cu ajutorul acoladelor, ca în exemplu:

```
if(n>=0)

{

cout<<”Ati introdus numarul “<<n;

cout<<”Este numar pozitiv”;

}

Exemplul anterior poate fi dezvoltat, prin includerea ramurii else, astfel:

if(n>=0) cout<<”Numar pozitiv”;

else cout<<”Numar negativ”;

```

Desigur, în cazul în care variabila n are o valoare negativă, mesajul afişat va fi “Număr negativ”.

### **Instrucţiunea switch**

Problema se poate complica, dacă am dori să includem în exemplul precedent şi posibilitatea de a afişa “Numar nul” în situaţia corespunzătoare. Lucrul poate fi, totuşi, uşor de făcut, astfel:

```
if(n>=0)

if(n>0)

  cout<<”Este numar pozitiv”;

 else cout<<”Este numar nul”;

else cout<<”Este numar negativ”;

```

Desigur, putem avea situaţii mult mai complexe, în care să fie necesară abordarea mai multor cazuri pentru a decide  continuarea programului. Pentru astfel de situaţii există instrucţiunea switch. Forma ei generală este:

```
swith(expresie 0)

{

case expresie 1: instructiune 1; break;

case expresie 2: instructiune 2; break;

............................................

case expresie n: instructiune n; break;

[default: instructiune n+1;]

}

```

Expresie 1, 2, …,n  pot fi constante, variabile sau expresii de acelaşi tip de date.

Execuţia acestei instrucţiuni se desfaşoară după următoarea schemă: se evaluează expresia 0, apoi se evaluează rând pe rând expresiile 1, 2 … n, până când este determinată una a cărei valoare este egală cu a sa. În acest caz se trece la executarea instrucţiuniii respective, care, poate fi simplă sau compusă. În cazul în care expresia nu este egala cu niciuna dintre cele n expresii atunci se efectueaza instructiunile care urmeaza după default, dacă este prezentă, iar dacă nu, se termina de efectuat instructiunea switch si se trece la instrucţiunea următoare din program.

Să analizăm următorul exemplu:

```
switch(c)

{

case '+': cout<<a+b; break;

case '-': cout<<a-b; break;

case '*': cout<<a*b; break;

case '/': cout<<a/b; break;

default: cout<<"Operator gresit";

}

```

Presupunând că variabilele a, b, c au fost citite corect, secvenţa de program decide ce operator aritmetic a fost citit în variabila c şi execută operaţia corespunzătoare, pentru variabilele a şi b.  Secvenţa conţine şi clauza default, astfel că dacă se citeşte orice alt caracter, în afară de +,-,\*,/ va determina afişarea mesajului “operator gresit”.