Sunteți pe pagina 1din 5

Cercul de informatică Lecția 9

IX. Structura alternativă generalizată

1. Prezentare generală
În unele cazuri în funcție de valoarea unei expresii pot exista mai multe alternative de
continuare. În acest caz fie alegem să implementăm structuri alternative imbricate, fie alegem
structura alternativă imbricată. Fie următorul exemplu: să se scrie un program care afişează numele
anotimpului corespunzător unui număr citit de la tastatură (adică, afişează "Primăvară", dacă
numărul introdus este 1, "Vară", dacă numărul introdus este 2, "Toamnă", dacă numărul este 3,
"Iarnă", dacă numărul este 4, şi avertisment pentru orice altă valoare introdusă).
În funcție de valoarea citită avem cinci alternative de continuare: dacă se citește valoarea 1
se va afișa "Primăvară", dacă se citește valoarea 2 se va afișa un alt mesaj, de asemenea alte mesaje
vor fi afișate pentru 3, 4 sau orice alt număr. În acest caz e avantajos să folosim structura alternativă
generalizată.
Forma generală a structurii:
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 semnificaţia de expresie de tip întreg sau caracter;


 c1, c2 … cn sunt constante de același tip cu tipul expresiei;
 secventa_ instrucţiuni_i: reprezintă o secvenţă de instrucţiuni.

Principiul de execuţie
 se evaluează expresia;
 se compară apoi pe rând valoarea expresiei din paranteză cu valorile constantelor c1, c2, ... ,
ci. Dacă ea coincide cu constanta ci, atunci se execută secvenţa de instrucţiuni i. în cazul în
care, valoarea expresiei nu coincide cu nici una din constantele c1, c2, ... , cn, atunci se
execută secvenţa de instrucţiuni n+1, de pe ramura default.
1
Cercul de informatică Lecția 9
 după execuţia secvenţei de instrucţiuni i se trece la instrucţiunea următoare instrucţiunii
switch în program.

Observatii importante!
 Aternativa default este opţională. în lipsa ei, dacă valoarea expresiei nu coincide cu nici una
din constantele c1, c2, ..., cn, atunci instrucţiunea switch nu are nici un efect, şi se trece la
următoarea instrucţiune din program ( cea care este plasată după instrucţiunea switch).
 Constantele c1, c2, ... cn trebuie să fie distincte.
 Construcţia break reprezintă o instrucţiune. Ea termină fiecare secvenţă de instrucţiuni i,
provocând saltul la instrucţiunea următoare instrucţiunii switch, sau cum se mai spune
realizează ieşirea din instrucţiunea switch.

2. Aplicații rezolvate
2.1. Anotimpuri
Gigel a învățat la școală despre anotimpuri. Acum el vrea să scrie un program care afişează numele
anotimpului corespunzător unui număr citit de la tastatură (adică, afişează "Primăvară", dacă
numărul introdus este 1, "Vară", dacă numărul introdus este 2, "Toamnă", dacă numărul este 3,
"Iarnă", dacă numărul este 4, şi avertisment pentru orice altă valoare introdusă). Ajutați-l pe Gigel
să scrie programul.
Date de intrare: de la tastatură se citește un număr întreg, cu semnificația din enunț.
Date de ieșire: pe monitor se va afișa Primăvară", dacă numărul introdus este 1, "Vară", dacă
numărul introdus este 2, "Toamnă", dacă numărul este 3, "Iarnă", dacă numărul este 4, şi "Nu există
anotimp" pentru orice altă valoare introdusă.

Explicație: - vom citi o valoarea de la tastatură


- folosind o structură alternativă generalizată (instrucțiunea switch) testăm valoarea variabilei citite.
- dacă valoarea citită are valoarea 1 vom afișa Primăvară", "Vară", dacă numărul introdus este 2,
"Toamnă", dacă numărul este 3, "Iarnă", dacă numărul este 4, şi "Nu există anotimp" pentru orice
altă valoare introdusă.

Implementarea în C/C++:

2
Cercul de informatică Lecția 9

#include <iostream>

using namespace std;

int n;

int main()
{
cout << "Introduceti numarul:";
cin>>n;//citim numarul
switch(n)//testam valoarea numarului
{
case 1: cout<<"Primavara"; break;
//daca valoarea este egala cu 1 afisam "Primavara"
case 2: cout<<"Vara"; break;
//daca valoarea este egala cu 2 afisam "Vara"
case 3: cout<<"Toamna"; break;
//daca valoarea este egala cu 3 afisam "Toamna"
case 4: cout<<"Iarna"; break;
//daca valoarea este egala cu 4 afisam "Iarna"
default: cout<<"Nu exista anotimp";break;
//daca nu e nicio valoare afisam mesajul
}
return 0;
}

2.2. Operator
Gigel a învățat cei cinci operatori matematici în C/C++. El vrea să scrie un program care citește 2
variabile întregi x și y și unul din operatorii studiați op și în funcție de valoarea acestui operator
afișează numele operației și rezultatul expresiei x op y. De exemplu: dacă se citesc valorile x=17 și y
=3 și op = ‘+’ se va afișa “Adunare” și rezultatul 20 (deoarece 17 + 3 =20); dacă se citesc valorile
x=17 și y =3 și op = ‘-’ se va afișa “Scadere” și rezultatul 14 (deoarece 17 - 3 =14); dacă se citesc
valorile x=17 și y =3 și op = ‘*’ se va afișa “Inmultire” și rezultatul 51 (deoarece 17 * 3 =51); dacă
se citesc valorile x=17 și y =3 și op = ‘/’ se va afișa “Impartire” și rezultatul 5 (deoarece 17 / 3 =5);

3
Cercul de informatică Lecția 9
dacă se citesc valorile x=17 și y =3 și op = ‘%’ se va afișa “Modulo” și rezultatul 2 (deoarece 17 %
3 =2); pentru orice altă valoare a variabilei op se va afișa mesajul “Nu exista astfel de operatie”.
Date de intrare: de la tastatură se citesc două valori întregi x și y și o variabilă de tip caracter op.
Date de ieșire: pe monitor se va afișa un mesaj, reprezentând numele operației care se execută cu
variabilele x și y și rezultatul expresiei x op y sau mesajul “Nu exista astfel de operatie” dacă
valoarea lui op nu corespunde niciunei operații.

Explicație:
- vom folosi 2 variabile întregi x și y și o variabilă de tip caracter op;
- se citesc aceste variabile;
- se testează valoarea variabilei op. Dacă valoarea ei este egală cu ‘+’ se va afișa
mesajul “Adunare” și rezultatul expresiei x+y. Dacă valoarea variabilei op este ‘-’ se
va afișa mesajul “Scadere” și rezultatul expresiei x-y. . Dacă valoarea variabilei op
este ‘*’ se va afișa mesajul “Inmultire” și rezultatul expresiei x*y. . Dacă valoarea
variabilei op este ‘/’ se va afișa mesajul “Impartire” și rezultatul expresiei x/y. . Dacă
valoarea variabilei op este ‘%’ se va afișa mesajul “Modulo” și rezultatul expresiei
x%y. Pentru orice altă valoare a lui op se va afișa mesajul “Nu exista astfel de
operatie”.

Implementarea în C/C++:
#include <iostream>
using namespace std;
int x,y;
char op;//variabila de tip caracter
int main()
{
cout << "x=";cin>>x;//citim primul numar
cout << "y=";…………………//citim al doilea numar
cout<<"Operatorul:";cin>>op;//citim operatorul
switch(op)//testam valoarea operatorului
{
case '+': cout<<"Adunare:"<<x+y; break;
//daca valoarea este '+' afisam "Adunare" si rezultatul adunarii

4
Cercul de informatică Lecția 9

case '-': cout<<"Scadere:"<<……………………; break;


//daca valoarea este '-' afisam "Scadere" si rezultatul scaderii
case '*': cout<<"…………………………….:"<<x*y; break;
//daca valoarea este '*' afisam "Inmultire" si rezultatul
case ……:cout<<"……………………"<<………………………; break;
//daca valoarea este '/' afisam "Impartire" si rezultatul
case '%': ………………………………………………………………………………..;
//daca valoarea este '%' afisam "Modulo" si rezultatul
default: ………………………………………………………………;
//daca nu e nicio valoare afisam mesajul
}
return 0;
}

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