Sunteți pe pagina 1din 18

Limbaje de programare

inginereti
Tema 6
C++: implementarea
structurilor de control,
tablouri

IMPLEMENTAREA STRUCTURILOR DE CONTROL


Ordinea n care se execut instruciunile unui program
definete aa-numita structur de control a programului.
Limbajele moderne sunt alctuite pe principiile programrii
structurate.
Orice algoritm poate fi realizat prin combinarea a trei structuri
fundamentale:
structura secvenial;
structura alternativ (de decizie, de selecie);
structura repetitiv (ciclic).

IMPLEMENTAREA STRUCTURII SECVENIALE


Structura secvenial este o niruire de secvene de prelucrare (instruciuni),
plasate una dup alta, n ordinea n care se dorete execuia acestora.
Implementarea structurii secveniale se realizeaz cu ajutorul instruciunilor:
Instruciunea vid
Sintaxa: ;
Instruciunea expresie
Sintaxa:
expresie;
sau:
apel_funcie;
Instruciunea compus (instruciunea bloc)
Sintaxa:
{
declaratii;
instr1;
instr2;
....
}

IMPLEMENTAREA STRUCTURII SECVENIALE


Exemple:

1.

2.

int a;
......
int j;
;
for (;;)
{
....
}

int b, a=9;
double c;
b=a+9;
cout<<a;
c=sqrt(a);
clrcsr();

IMPLEMENTAREA STRUCTURII DE DECIZIE


(ALTERNATIVE, DE SELECIE)
Instruciunea if:
Sintaxa:
if (expresie)
instruciune1;
[ else
instruciune2; ]
Observaii:
Instruciune1 i instruciune2 pot fi instruciuni compuse (blocuri), sau
chiar alte instruciuni if (if-uri imbricate).
Deoarece ramura else a instruciunii if este opional, n cazul n care
aceasta este omis din secvenele if-else imbricate, se produce o
ambiguitate. De obicei, ramura else se asociaz ultimei instruciuni if.
Pentru claritatea programelor surs se recomand alinierea instruciunilor
prin utilizarea tabulatorului orizontal.
n cazul n care instruciunile din cadrul if-else sunt simple, se poate
folosi operatorul condiional.

IMPLEMENTAREA STRUCTURII DE DECIZIE


(ALTERNATIVE, DE SELECIE)
Aplicaii
1. S se citeasc de la tastatur un numr real. Daca acesta se afl n intervalul
[-1000, 1000], s se afiseze 1, dac nu, s se afiseze -1.
2. S se calculeze valoarea funciei f(x), tiind c x este un numr real introdus
de la tastatur:

6 x 20

f ( x)

x ( , 7]

x 30

x ( 7,0]

x (0, )

3. Se citete un caracter reprezentnd un operator aritmetic binar simplu.


n funcie de caracterul citit, se afieaz numele operaiei pe care acesta o
poate realiza.

IMPLEMENTAREA STRUCTURII DE DECIZIE


(ALTERNATIVE, DE SELECIE)
Instruciunea switch permite tratarea situaiilor cnd este necesar o
decizie multipl.
Reprezentare prin schema logic

Reprezentare prin pseudocod:

test_expresie

instruciune1
break
instruciune2
break

instruciune_n

Dac expresie=expr_const_1
instruciune1;
[ieire;]
Altfel dac expresie=expr_const_2
instruciune2;
[ieire;]
Altfel dac expresie=expr_const_n-1
instruciune_n-1;
[ieire;]
Altfel instruciune_n;

IMPLEMENTAREA STRUCTURII DE DECIZIE


(ALTERNATIVE, DE SELECIE)
Sintaxa:
switch (expresie)
{
case expresie_const_1:

instructiune_1;
[break;]
case expresie_const_2:
instructiune_2;
[break;]
..................................
case expresie_const_n-1: instructiune_n-1;
[break;]
[ default:
instructiune_n; ]
}
Expresiile expresie, expresie_const_1, expresie_const_2, etc., trebuie s fie
ntregi. Ele pot fi i de tip char, dar o dat de tip char este convertit automat
n tipul int.
(aplicatie)

IMPLEMENTAREA STRUCTURILOR REPETITIVE


(CICLICE)
Implementarea structurilor ciclice cu test iniial
Instruciunea while
Sintaxa:
while (expresie)
instructiune;
Instruciunea for
Reprezentare prin schema logic

Reprezentare n pseudocod:

evaluare expresie1 (particular iniializare contor)

expresie2
1
instruciune

evaluare expresie3 (particular


incrementare contor)

evaluare expresie1
CT TIMP expresie2 REPET
NCEPUT
instruciune
evaluare expresie3
SFRIT

Sintaxa:
for (expresie1; expresie2; expresie3)
instructiune;

IMPLEMENTAREA STRUCTURILOR REPETITIVE


(CICLICE)
Implementarea structurilor ciclice cu test final
Instruciunea do-while
Sintaxa:
do
instructiune;
while(expresie);
Aplicaii
1. Se citete un caracter reprezentnd un operator aritmetic binar simplu. n
funcie de caracterul citit, se afieaz numele operaiei pe care acesta o
poate realiza. Procesul se reia i se oprete cnd caracterul introdus este @.
2. Se citete cte un caracter, pn la ntlnirea caracterului @. Pentru fiecare
caracter citit, s se afieze un mesaj care s indice dac s-a citit o liter
mare, o liter mic, o cifr sau un alt caracter. S se afieze cte litere mari
au fost introduse, cte litere mici, cte cifre i cte alte caractere .

IMPLEMENTAREA STRUCTURILOR REPETITIVE


(CICLICE)
S se calculeze suma i produsul primelor n numere naturale, n fiind introdus
de la tastatur.
cout<<"n=";
int n;
cin>>n;
int S=0, P=1, k=1;
while (k <= n)
{
S+=k;
P*=k;
k++;
}
cout<<"P="<<P<<"\tS="<<S<<'\n';

cout<<"n=";
int n;
cin>>n;
int S=0, P=1, k=1;
do
{
S+=k;
P*=k;
k++;
} while (k <= n);
cout<<"P="<<P<<"\tS="<<S<<'\n';

int S=0, P=1, k;


for (k=1; k<=n; k++)
{
S+=k;
P*=k;
}
cout<<"P="<<P<<"\tS=";
cout<<S<<'\n';

FACILITI DE NTRERUPERE A UNEI SECVENE

Instruciunea break
Fr a se mai testa valoarea expresiei (condiia) care determin repetarea
corpului instruciunii ciclice, se continu execuia cu instructiunea care
urmeaz instructiunii ciclice.
Instruciunea continue
ntlnirea instruciunii continue determin ignorarea instruciunilor care o
urmeaz n corpul instruciunii ciclice i reluarea execuiei cu testarea valorii
expresiei care determin repetarea sau nu a corpului ciclului.

FACILITI DE NTRERUPERE A UNEI SECVENE


do{
while (expresie1){
instructiune1;
instructiune2;
if (expresie2)
break;
else
continue;
instructiune3;
}

instructiune1;
instructiune2;
if (expresie2)
break;
else
continue;
instructiune3;
} while (expresie1);

for (expr1; expr2; expr3)){


instructiune1;
instructiune2;
if (expresie2)
break;
else
continue;
instructiune3;
}

DECLARAREA TABOURILOR
Numim tablou o colecie (grup, mulime ordonat) de date, de acelai tip,
situate ntr-o zon de memorie continu (elementele tabloului se afl la adrese
succesive).
Tablourile sunt variabile compuse (structurate), deoarece grupeaz mai
multe elemente.
Variabilele tablou au nume, iar tipul tabloului este dat de tipul elementelor
sale. Elementele tabloului pot fi referite prin numele tabloului i indicii
(numere ntregi) care reprezint poziia elementului n cadrul tabloului.
n funcie de numrul indicilor utilizai pentru a referi elementele tabloului,
putem ntlni tablouri unidimensionale (vectorii) sau multidimensionale
(matricile sunt tablouri bidimensionale).
Ca i variabilele simple, variabilele tablou trebuie declarate nainte de
utilizare.

DECLARAREA TABOURILOR
Modul de declarare:
tip nume_tablou[dim_1][dim_2][dim_n];
unde: tip reprezint tipul elementelor tabloului; dim_1,dim_2,...,dim_n sunt
numere ntregi sau expresii constante ntregi (a cror valoare este evaluat la
compilare) care reprezint limitele superioare ale indicilor tabloului.
Exemple:
int vect[20];
// declararea tabloului vect, de maximum 20 de elemente, de tipul int.
double p,q,tab[10];

/*declararea variabilelor simple p, q i a vectorului tab, de maximum


10 elemente, tip double */

#define MAX
10
char tabc[MAX];
double matrice[2][3];

/*declararea tabloului tabc, de maximum MAX (10) elemente


de tip char*/
// declararea tabloului matrice (bidimensional),
// maximum 2 linii i maximum 3 coloane, tip double

INIIALIZAREA TABOURILOR
Iniializarea valorilor elementelor unui tablou se poate face prin:
-Declararea direct
-Declararea prin intermediul unei expresii
-Citirea de la tastatur
-Declararea implicit
Atenie: indicii se incrementeaz pornind de la valoarea 0.
Exemple:
int vector[6];
vector[0]=100;
vector[1]=101;
vector[2]=102;
vector[3]=103;
vector[4]=104;
vector[5]=105;

INIIALIZAREA TABOURILOR
int vector[6]={100,101,102,103,104,105};
double x=9.8;
double a[5]={1.2, 3.5, x, x-1, 7.5};
double alpha[5], beta[5], gama[5];
int i=2;
alpha[2*i-1] = 5.78;
alpha[0]=2*beta[i]+3.5;
gama[i]=aplha[i]+beta[i];
double a[5];
int i;
for (i=0; i<5; i++)
{
cout<<a["<<i<<]=;
cin>>a[i];
}

INIIALIZAREA TABOURILOR
double q[3][2];
int mat[4][3] = {{10, -50, 3},{32, 20, 1},{-1, 1, -2},{7, -8, 19} };
{int A[10][10];
int nr_lin, nr_col;
cout<<"Nr. linii:";
cin>>nr_lin;
cout<<"Nr. coloane:";
cin>>nr_col;
int i, j;
for (i=0; i<nr_lin; i++)
for (j=0; j<nr_col; j++)
{
cout<<"A["<<i<<","<<j<<"]=";
cin>>A[i][j];
}

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