Sunteți pe pagina 1din 7

50

Instruciunea switch
Instruciunile de ciclare prezentate, while, do i for sunt folosite pentru
realizarea blocurilor de instruciuni a cror execuie ncepe cu prima linie i este
controlat de ctre programator. Instruciunea switch este folosit tot pentru a
construi un bloc de instruciuni dar punctul de unde ncepe execuia depinde de
valoarea unei expresii avnd valori ntregi.
Sintaxa instruciunii este:

switch (expresie)
{
case constanta_1 : instruciuni
case constanta_2 : instruciuni
...
default : instruciuni;
}

Fiecare dintre punctele de unde poate ncepe execuia blocului este


etichetat printr-o constant avnd valoare ntreag. Dac expresia de testat
corespunde uneia dintre constante, execuia blocului ncepe din punctul indicat
de aceasta.
Cazul default este facultativ.

Exemplu :
#include <iostream>
#include <ctype.h>
#include <math.h>
using namespace std;

void main()
{
char rasp, varianta;
double x;
rasp = 'd';
while (tolower(rasp) == 'd')
{
cout << "x = "; cin >> x;
cout << "Ce doriti sa calculati : (s - sin, c - cos, t -
tan) : ";
51

cin >> varianta;


switch (varianta) {
case 's' :
cout << "sin = " << sin(3.14159 * x / 180.) << endl;
break;
case 'c' :
cout << "cos = " << cos(3.14159 * x / 180.) << endl;
break;
case 't' :
cout << "tan = " << sin(3.14159 * x / 180.)/
cos(3.14159 * x / 180.) << endl;
break;
default:
cout << "Caracter incorect!";
}
cout << "Mai continuati? (d/n) : ";
cin >> rasp;
}
}

Ca i n cazul ciclurilor, instruciunea break provoac o ieire imediat din


blocul realizat folosind switch. Dac nu ar fi prezent, dup nceperea executrii
instruciunilor ramurii pe care s-a intrat, se vor executa secvenial instruciunile
ramurilor urmtoare, pn la ntlnirea unui break sau pn la sfritul
instruciunii switch.

switch (v) {

case v1 : bloc instructiuni 1

case v2 : bloc instructiuni 2

case v3 : bloc instructiuni 3


blocuri de instruciuni
case v4 : bloc instructiuni 4 fr break

case v5 : bloc instructiuni 5

default : bloc instructiuni 6


52

Capitolul 3. Programarea aplicaiilor complexe

Aspecte generale
Pentru calcule elementare, n programe se folosesc tipuri de date simple
i codul se poate scrie n funcia principal, main().
Scrierea programelor de mai mari dimensiuni necesit structuri de date i
de cod adecvate, care s le confere claritate i s le fac uor de depanat. Pe
de alt parte, s-a constatat n timp c fr tehnici de programare care s permit
recuperarea ntr-o nou aplicaie a unor secvene ct mai consistente de cod din
aplicaii deja realizate, productivitatea unui programator rmne modest. Un
exemplu tipic de recuperare reuit a codului este realizarea aplicaiilor Windows
folosind generatoare de aplicaii de tipul Visual C++. Acestea permit realizarea
interfeei aplicaiei scriind foarte puine linii de cod, elementele interfeei
pstrndu-i intacte caracteristicile funcionale i estetice.

Subprograme

Scrierea aplicaiilor complexe, avnd dimensiuni mari (zeci sau chiar sute
de mii de linii de cod!) poate pune probleme deosebite. tiina programrii
calculatoarelor ofer ns soluii de structurare att a codului ct i a datelor unor
astfel de aplicaii.
n ceea ce privete codul, divizarea sa n secvene de dimensiuni reduse,
uor de realizat i mai ales de depanat, se realizeaz prin folosirea
subprogramelor.
Un subprogram este un modul de program separat de programul principal
(apelant) i legat de acesta printr-un proces de transfer - revenire.
53

Modul apelant
Subprogram

n ultimul exemplu prezentat s-au folosit funcii fr a le defini (sin, cos sau
tolower). Aceste funcii, i multe altele, sunt puse la dispoziie de realizatorii
compilatorului folosit. Pentru utilizarea lor a fost totui necesar includerea unor
fiiere care conin n principal declaraii de funcii.

#include <iostream>
#include <ctype.h>
#include <math.h>

n limbajul C i n limbajele derivate din acesta se folosesc subprograme


de tip funcie. Practic codul unui program este realizat prin alturarea unui
numr de funcii. ntre funciile unui program exist o funcie principal, de unde
ncepe execuia programului. n C sau C++ aceasta poart numele main().
O funcie are :
 un antet,
 declaraii de variabile locale i
 instruciuni. Ultima instruciune din funcie este return dac funcia
nu returneaz o valoare sau return v, dac funcia returneaz
valoarea v.
Definirea unei funcii respect sintaxa :

tip_val_retur nume(declaraii parametri formali) antet


{
declaraii i instruciuni
}
54

Corpul unei funcii poate s lipseasc :

double prelucrez(double a, double b)


{}; // nc prelucrarea nu este scris, aplicaia este n dezvoltare.

O funcie din a crei declaraie lipsete tipul valorii returnate (tip_val_retur),


returneaz prin convenie o valoare de tip int.

Exemplu fundamental:
#include <iostream>
using namespace std;

double suma(double a[], int n);

void main()
{
double x[] = {1., 34., -234., 43., -12};
cout << "Suma val. din sirul x este : " << suma(x, 5) << endl;
}

double suma(double a[], int n)


{
double s = 0.;
int i;
for (i = 0; i < n; i++)
s = s + a[i];
return s;
}

Programul cuprinde dou funcii: funcia main() i funcia suma().


Deoarece funcia main() nu returneaz o valoare, tipul ei este void. Funcia
suma() returneaz o valoare n dubl precizie (ultima instruciune executat este
return s) i din acest motiv este declarat de tip double. Antetul ei este:

double suma(double a[ ], int n)

n timpul compilrii, pentru a putea verifica dac apelul funcie suma() s-a
realizat corect, compilatorul are nevoie de tipul acesteia, de numrul i de tipul
parametrilor transmii acesteia. Din acest motiv, la nceputul programului s-a
inclus prototipul funciei suma():
55

double suma(double a[ ], int n);

sau double suma(double [ ], int);

Pentru scrierea prototipului unei funcii, antetului acesteia i se adug un


caracter ";". Denumirile parametrilor formali pot s lipseasc.
Antetul funciei suma() conine doi parametri formali: (double a [ ], int n).
n momentul apelului, dup numele funciei trebuie indicai parametrii efectivi. n
exemplul dat, pentru apelul funciei s-a scris suma(x, 5) , deci parametrii efectivi
sunt x (ir de valori double) i 5 (constant int).
Valoarea expresiei de pe a doua poziie, corespunztoare variabilei ntregi
n este transmis subprogramului. n cazul primului parametru, un ir,
subprogramul primete adresa acestuia. n cazul parametrilor de tip ir,
subprogramul poate modifica valorile elementelor irului. n cazul variabilei
simple n, subprogramul primete valoarea parametrului efectiv. Se spune c
transmiterea parametrului n se realizeaz prin valoare. Dac pentru apelul
funciei s-ar fi scris suma(x, p), variabila p fiind de tip ntreg i egal cu 5,
rezultatul ar fi fost evident acelai. Modificarea n subprogram a variabilei n
corespunzatoare variabilei p nu ar afecta valoarea variabilei p din programul
apelant.
Astfel definit, o funcie poate s nu returneze nici o valoare sau poate
returna o valoare (int, long, double, ...). n primul caz tipul funciei va fi void iar n
al doilea caz va coincide cu tipul expresiei returnate.

Referine

Tipul referin definit n C++ permite utilizarea a dou nume diferite


pentru aceeai celul de memorie. Pentru declararea unei variabile de tip
referin se folosete structura tip&. Exemple:
double a;
double& rf = a; // rf si a se refera la aceeasi locatie de mem.
rf = 34.0; // identic cu a = 34.0;
56

Tipul referin utilizat ca n exemplul dat nu prezint interes. De regul


acest tip este folosit la definirea unor funcii care trebuie s returneze mai mult
dect o valoare.
Exemplu:

#include <iostream>
using namespace std;

void schimb(int &, int &);

void main()
{
int a = 1, b = 7;
cout << "La inceput a = " << a << " si b = " << b << endl;
schimb(a, b);
cout << "Dupa schimb() a = " << a << " si b = " << b << endl;
}

void schimb(int& x, int& y)


{
int aux;
aux = x; x = y; y = aux;
return;
}

Practic, n cazul n care o funcie trebuie s returneze mai mult dect o


valoare, o soluie corect este utilizarea n lista de parametri formali a unui
numr de variabile crora n funcie le corespund referine. Astfel se ocolete
mecanismul normal de transmitere a valorilor parametrilor efectivi (transmitere
prin valoare).
Not: Un alt mod de ocolire a mecanismului transmiterii prin valoare a
parametrilor efectivi este utilizarea irurilor (tablourilor) de valori, aa cum s-a
artat deja.

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