Programele C++, pe lângă secvențe liniare de instrucțiuni, pot să repete anumite instrucțiuni, cât și să facă decizii, bifurcând execuția programului. În acest articol voi prezenta cum se folosesc instrucțiunile alternative if și switch.

Instrucțiunea if

Instrucțiunea if este folosită pentru a executa o anumită secvență de instrucțiuni dacă și numai dacă condiția dată este adevărată.

Sintaxă if

if (conditie)
    instructiune / block de instructiuni
else
    instructiune / block de instructiuni

Semantică if

Întâi se evaluează expresia conditie. Dacă aceasta este true, se execută instrucțiunile de mai jos (de pe prima ramură). Dacă expresia se evaluează la false, se execută instrucțiunile de pe ramura else. Ramura else este opțională. Dacă aceasta nu există, iar expresia este falsă, atunci pur și simplu se trece mai departe. Exemplu:

if (x == 618)
    cout << "Valoarea lui x este 618.\n";

Dacă în cazul în care valoarea lui x nu este 618 vrem să se afișeze un mesaj corespunzător, vom scrie:

if (x == 618)
    cout << "Valoarea lui x este 618.\n";
else
    cout << "Valoarea lui x nu este 618.\n";

Iată două exemple unde se folosește instrucțiunea if:

if (x == 0 || x == 1)
    cout << x << " nu este nici prim, nici compus.\n";
else
    cout << x << " este prim sau compus.\n";

if (n < 10)
    cout << n << " are 1 cifra.\n";
else if (n < 100)
    cout << n << " are 2 cifre.\n";
else if (n < 1000)
    cout << n << " are 3 cifre.\n";
else
    cout << n << " are un numar necunoscut de cifre.\n";

Atenție! Fie codul de mai jos:

if (a == b)
    if (a == c)
        cout << "a = b = c";
else
    cout << "a != c";

În ciuda indentării sugestive, în cazul în care a != b, rezultatul nu va fi cel așteptat. Compilatorul crede că ramura else este pentru al doilea if, așa că nu se va afișa nimic. Pentru a evita situațiile de genul acesta, în cazul în care pe prima ramură a unui if se află alt if, recomand încadrarea acestei ramure între acolade, pentru a fi clar al cui if este else-ul. Deci, secvența de mai sus trebuie modificată astfel:

if (a == b) {
    if (a == c)
        cout << "a = b = c";
}
else
    cout << "a != c";

Instrucțiunea switch

Instrucțiunea switch are rolul de a parcurge un șir de constante și de a verifica dacă valoarea unei expresii este egală cu una dintre aceste constante.

Sintaxă switch

switch (expresie) {
  case constanta1:
    instructiuni1;
    break;
  case constanta2:
    instructiuni2;
    break;
  ...
  case constantaN:
    instructiuniN;
    break;
  default:
    instructiuniDefault;
}

Semantică switch

Se evaluează dacă expresie este egală cu constanta1. Dacă da, se execută instructiuni1 și se iese din switch (prin instrucțiunea break). Dacă nu, se continuă testele cu constanta2 etc. Dacă expresie nu este egală nici cu constantaN, atunci se execută instructiuniDefault și se iese din switch. Cazul default este opțional. Dacă la cazul k lipsește instrucțiunea break, iar expresie este egală cu constantaK, se vor executa toate instrucțiunile din switch de la caseK în jos, până la întâlnirea primului break. Nu contează dacă ultimul caz conține break sau nu, pentru că oricum se află la finalul switch-ului.

Atenție! Dacă la două cazuri declarați câte o variabilă locală, iar acestea au același nume, trebuie să încadrați instrucțiunile de la cele două cazuri între acolade, căci altfel variabila se va considera redeclarată și programul nu se va compila.

Acesta este unul dintre marele dezavantaje ale instrucțiunii switch. Foarte rar folosesc switch în locul if-ului. Iată două exemple ce folosesc instrucțiunea switch:

switch (killedBySignal) {
  case 8:
    cout << "Floating point error.\n";
    break;
  case 11:
    cout << "Segmentation fault.\n";
    break;
  default:
    cout << "Cod necunoscut.\n";
}

switch (zi) {
  case 1:
  case 2:
  case 3:
  case 4:
  case 5:
    cout << "Zi lucratoare\n";
    break;
  default:
    cout << "Zi nelucratoare\n";
}

Următorul tutorial C++ este Instrucțiunile repetitive în C++: for, while, do while. Dacă ai vreo problemă în înțelegerea structurilor alternative if și switch, lasă un comentariu și te voi ajuta :)

Îți place conținutul acestui site?

Dacă vrei să mă susții în întreținerea server-ului și în a scrie mai multe articole de calitate pe acest blog, mă poți ajuta printr-o mică donație!

PayPal