Sunteți pe pagina 1din 5

clasa a IX-a A, E

IX. Structura alternativ generalizat

1. Prezentare general
n unele cazuri n funcie de valoarea unei expresii pot exista mai multe alternative de
continuare. n acest caz fie alegem s implementm structuri alternative imbricate, fie alegem
structura alternativ imbricat. Fie urmtorul exemplu: s se scrie un program 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).
n funcie de valoarea citit avem cinci alternative de continuare: dac se citete valoarea
1 se va afia "Primvar", dac se citete valoarea 2 se va afia un alt mesaj, de asemenea alte
mesaje vor fi afiate pentru 3, 4 sau orice alt numr. 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 semnificaia de expresie de tip ntreg sau caracter;

c1, c2 cn sunt constante de acelai tip cu tipul expresiei;

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

1
clasa a IX-a A, E
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. n 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.

2. Aplicaii rezolvate
2.1. Anotimpuri
Gigel a nvat la coal despre anotimpuri. Acum el vrea s scrie un program 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). Ajutai-l
pe Gigel s scrie programul.
Date de intrare: de la tastatur se citete un numr ntreg, cu semnificaia din enun.
Date de ieire: pe monitor se va afia Primvar", dac numrul introdus este 1, "Var", dac
numrul introdus este 2, "Toamn", dac numrul este 3, "Iarn", dac numrul este 4, i "Nu
exist anotimp" pentru orice alt valoare introdus.

Explicaie: - vom citi o valoarea de la tastatur


- folosind o structur alternativ generalizat (instruciunea switch) testm valoarea variabilei
citite.
- dac valoarea citit are valoarea 1 vom afia Primvar", "Var", dac numrul introdus este 2,
"Toamn", dac numrul este 3, "Iarn", dac numrul este 4, i "Nu exist anotimp" pentru
orice

2
clasa a IX-a A, E
alt valoare introdus.
Implementarea n C/C++:

#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 nvat cei cinci operatori matematici n C/C++. El vrea s scrie un program care
citete 2 variabile ntregi x i y i unul din operatorii studiai op i n funcie de valoarea acestui
operator afieaz numele operaiei i rezultatul expresiei x op y. De exemplu: dac se citesc
valorile x=17 i y =3 i op = + se va afia Adunare i rezultatul 20 (deoarece 17 + 3 =20);
dac se citesc valorile x=17 i y =3 i op = - se va afia Scadere i rezultatul 14 (deoarece
17 - 3 =14); dac se citesc valorile x=17 i y =3 i op = * se va afia Inmultire i rezultatul

3
clasa a IX-a A, E
51 (deoarece 17 * 3 =51); dac se citesc valorile x=17 i y =3 i op = / se va afia Impartire
i rezultatul 5 (deoarece 17 / 3 =5);
dac se citesc valorile x=17 i y =3 i op = % se va afia Modulo i rezultatul 2 (deoarece
17 % 3 =2); pentru orice alt valoare a variabilei op se va afia 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 ieire: pe monitor se va afia un mesaj, reprezentnd numele operaiei 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 operaii.

Explicaie:
- 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 afia
mesajul Adunare i rezultatul expresiei x+y. Dac valoarea variabilei op este -
se va afia mesajul Scadere i rezultatul expresiei x-y. . Dac valoarea
variabilei op este * se va afia mesajul Inmultire i rezultatul expresiei x*y. .
Dac valoarea variabilei op este / se va afia mesajul Impartire i rezultatul
expresiei x/y. . Dac valoarea variabilei op este % se va afia mesajul
Modulo i rezultatul expresiei x%y. Pentru orice alt valoare a lui op se va
afia mesajul Nu exista astfel de operatie.

Implementarea n C/C++:

4
clasa a IX-a A, E
#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" sirezultatul adunarii
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