switch

Schema logica instructiunea switch

  Instrucțiunea switch este o structură alternativă multiplă. O vom folosi când vrem să condiționăm valoarea unei expresii pe mai multe cazuri specifice.

Sintaxă

switch (<exp>) {
  case <val_1>:<instr_1> break;
  case <val_2>:<instr_2> break;
  ...
  case <val_n>:<instr_n> break;
  [default:<instr_default>]
}
    Unde:
  • <exp> este expresia pe care o condiționăm;
  • <val_k> este o valoare al unuia dintre cazuri;
  • <instr_k> reprezintă instrucțiuinile care se vor executa când cazul este favorabil;
  • default este cazul care se va executa când niciun alt caz nu este favorabil (nu este obligatoriu să existe, de aceea este pus între [ ]).

Instrucțiunea break; pusă la finalul fiecărui caz va face ca programul să iasă din structură după executarea unui caz favorabil, fără a verifica și cazurile următoare.

Efect

  1. se evaluează expresia (<exp>);
  2. se compară valoarea expresiei cu valorile cazurilor (<val_1>, <val_2>, <val_k> etc.);
  3. dacă există o valoare (<val_k>) egală cu cea a expresiei se execută instrucțiunile corespunzătoare (<instr_k>) și se iese din structură;
  4. dacă expresia diferă de toate valorile cazurilor, se execută instrucțiunile de pe ramura default (dacă există) și se trece mai departe în program.

Implementare

Enunț: Se citesc două numere de la tastatură, care reprezintă anul și luna. Afișați numărul de zile din luna respectivă (pentru luna februarie se va ține cont de an dacă este bisect sau nu).

int an, luna;
cin>>an>>luna;
switch (luna){
  case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout<<31; break;
  case 4: case 6: case 9: case 11: cout<<30; break;
  case 2: an%4 ? cout<<28 : cout<<29; break;
}
2012 2
29
1337 8
31

  Vom condiționa afișarea zilelor în funcție de lună, astfel că expresia din switch va fi valoarea variabilei luna. Pentru lunile cu același număr de zile, vom reuni cazurile și le vom scrie succesiv, separate prin :.
  La luna februarie vom folosi operatorul ternar pentru a afișa numărul de zile în funcție de tipul anului (bisect/nebisect).