Sunteți pe pagina 1din 7

Lec\ia 2.

Tipuri de date =i structuri de control


2.1. Obiectivul lec\iei

utilizarea tipurilor fundamentale de date ]n VC++2008;


implementarea structurilor de control fundamentale ]n VC++2008.

2.2. Resurse necesare

mediului integrat Visual C++2008;


capitolul 1 din curs (ENCPC_1.pdf), sec\iunile 1.1 (Date =i informa\ii) =i 1.4 (Proiectarea
programelor).

2.3. Generarea proiectului


Se genereaz[ un proiect VC++2008 cu o form[ ce con\ine dou[ butoane, Test =i Sterge =i o fereastr[
text cu numele textBox1 (vezi Lec\ia 1).
}n aceast[ lec\ie vom modifica, pentru fiecare exemplu, codul func\iei btnTest_Click().
Codul func\iei btnSterge_Click() r[m`ne nemodificat fa\[ de Lec\ia 1.

2.4. Tipuri fundamentale de date ]n C++


Datele sunt manevrate ]n program prin intermediul variabilelor.
Pricipalul atribut al unei variabile este tipul variabilei.
Acest atribut precizeaz[ valorile de care le poate lua variabila precum =i opera\iile permise cu aceste
valori.
Limbajul C++ ofer[ urm[toarele tipuri fundamentale:
Dimensiune
Tip
(octe\i)
Tipuri ]ntregi

Domeniu

char

[128 , 127]

short

[32.768 , 32.767]

int

[2.147.483.648 , 2.147.483.647]

long

[2.147.483.648 , 2.147.483.647]

long long

[9.223.372.036.854.775.808 , 9.223.372.036.854.775.807]

true =i false

float

3.41038 (7 cifre semnificative)

double

1.710308 (15 cifre semnificative)

Tipuri logice
bool
Tipuri reale

Tabelul 2.1. Tipuri fundamentale de date.


Toate tipurile ]ntregi sunt implicit cu semn (signed). Ele pot fi declarate ]ns[ =i f[r[ semn (unsigned).
De exemplu, tipul unsigned char are domeniul de valori [0 , 255].
Pentru a putea fi folosite ]ntr-un program, variabilele trebuie declarate.
O declara\ie de variabile precizez[ atributele acelei variabile (numele =i tipul).
L2.1

Lec\ia 1. Tipuri de date =i structuri de control


2.4.1. Exemplul 1. Utilizarea tipurilor de date fundamentale
Vom declara c`teva variabile, le vom atribui ni=te valori =i vom afi=a valorile ]n fereastra text
textBox1.
}n acest scop, se modific[ func\ia btnTest_Click() astfel:
/**********************************************************************************
Buton Test
Tipuri fundamentale de date
**********************************************************************************/
private: System::Void btnTest_Click(System::Object^ sender, System::EventArgs^ e)
{
// Variabile locale
char c;
// Variabila de tip caracter
short n,i;
// Variabile de tip intreg pe 16 biti
bool f;
// Variabila logica
float x;
// Variabila reala in simpla precizie
double y, d;
// Variabile reale in dubla precizie
c
n
i
x
y
d
f

=
=
=
=
=
=
=

'A';
10;
3;
(float)1/7;
1.0/7;
x - y;
true;

// Afisarea valorilor in fereastra text


textBox1->AppendText("c=" + c + "\r\n");
textBox1->AppendText("n=" + n + "\r\n");
textBox1->AppendText("i=" + i + "\r\n");
textBox1->AppendText("x=" + x + "\r\n");
textBox1->AppendText("y=" + y + "\r\n");
textBox1->AppendText("d=" + d + "\r\n");
textBox1->AppendText("f=" + f + "\r\n");
}//end btnTest_Click

Se execut[ programul =i se apas[ butonul Test.


}n fereastra text apare:
c=65
n=10
i=3
x=0.1428571
y=0.142857142857143
d=6.38621194815059E-09
f=True

O observa\ie asupra instruc\iunii x = (float)1/7;: expresia (float)1 for\eaz[ conversia


constantei 1 ]n num[r real simpl[ precizie (opera\ie numit[ casting).
Dac[ se modific[ instruc\iunea ]n x = 1/7;, compilatorul evalueaz[ expresia din membrul drept ]n
aritmetica numerelor ]ntregi, rezultatul fiind 0 (cu semnifica\ia: c`tul ]mp[r\irii ]ntregi a lui 1 la 7, vezi
Exemplul 2).
}n locul utiliz[rii casting-ului se poate scrie constanta 1 ca num[r real: 1.0 (vezi y = 1.0/7;).

L2.2

Lec\ia 1. Tipuri de date =i structuri de control


2.4.2. Operatori
Operator

Descriere

Operatori aritmetici
*

}nmul\ire

}mp[r\ire

C[tul ]mp[r\irii ]ntregi

Adunare

Sc[dere

Operatori de deplasare
<<

Deplasare la st`nga

>>

Deplasare la dreapta

Operatori de atribuire
=

Atribuire simpl[

*=

}nmul\e=te valoarea primului operand cu valoarea celui de-al doilea, rezultat ]n primul operand

/=

}mparte valoarea primului operand la valoarea celui de-al doilea, rezultat ]n primul operand

%=

Calculeaz[ c`tul ]mp[r\irii ]ntregi ]ntre primul =i al doilea operand, rezultat ]n primul operand

+=

Adun[ valoarea primului operand cu valoarea celui de-al doilea, rezultat ]n primul operand

Scade valoarea celui de-al doilea operand din valoarea primului opreand, rezultat ]n primul operand

<<=

Deplaseaz[ la st`nga valoarea primului operand cu un num[r de bi\i specificat de al doilea operand

>>=

Deplaseaz[ la dreapta valoarea primului operand cu un num[r de bi\i specificat de al doilea operand

&=

+I logic ]ntre valoarea primului operand =i valoarea celui de-al doilea operand

^=

+AU logic ]ntre valoarea primului operand =i valoarea celui de-al doilea operand

|=

+AU exclusiv logic ]ntre valoarea primului operand =i valoarea celui de-al doilea operand

Operatori rela\ionali
<

Mai mic

>

Mai mare

<=

Mai mic sau egal

>=

Mai mare sau egal

==

Egal

!=

Diferit

Operatori logici
&

SI pe bi\i (]ntre valori numerice)

SAU exclusivpe bi\i (]ntre valori numerice)

SAU pe bi\i (]ntre valori numerice)

&&
||

SI logic
SAU logic

Tabelul 2.2. Operatori.

L2.3

Lec\ia 1. Tipuri de date =i structuri de control


2.4.3. Exemplul 2. Utilizarea operatorilor
Se modific[ func\ia btnTest_Click() astfel:
/**********************************************************************************
Buton Test
Utilizarea operatorilor
**********************************************************************************/
private: System::Void btnTest_Click(System::Object^ sender, System::EventArgs^ e)
{
int a = 3,
b = 6,
c = 10,
d = 0xAAAA,
m = 0x5555;
bool f;
a
b
c
d
f

+= b;
%= a;
>>= 1;
|= m;
= (a < b);

//
//
//
//
//

a
b
c
d
f

devine 9
ramane 6
devine 5
devine 0xFFFF
este False

// Afisarea valorilor in fereastra text


textBox1->AppendText("a=" + a + "\r\n");
textBox1->AppendText("b=" + b + "\r\n");
textBox1->AppendText("c=" + c + "\r\n");
textBox1->AppendText("d=" + d + "\r\n");
textBox1->AppendText("m=" + m + "\r\n");
textBox1->AppendText("f=" + f + "\r\n");
}//end btnTest_Click

Rezultatul execu\iei programului este:


a=9
b=6
c=5
d=65535
m=21845
f=False

Pentru afi=area valorilor lui d =i m ]n hexazecimal, se modific[ func\ia astfel:


textBox1->AppendText("d=0x" + d.ToString("X4") + "\r\n");
textBox1->AppendText("m=0x" + m.ToString("X4") + "\r\n");

Rezultatul execu\iei programului este acum:


a=9
b=6
c=5
d=0xFFFF
m=0x5555
f=False

2.5. Domeniul de vizibilitate al unei variabile. Variabile locale =i variabile globale


O variabil[ declarat[ ]n corpul unei func\ii se nume=te variabila local[. Ea poate fi utilizat[ numai ]n
func\ia ]n care a fost declarat[.
De exemplu, s[ modific[m func\ia btnSterge_Click() din Exemplul 2 astfel:
/**********************************************************************************
Buton Sterge
Sterge fereastra text
**********************************************************************************/
private: System::Void btnSterge_Click(System::Object^ sender, System::EventArgs^ e)
{
textBox1->Text = "";
a = 0;
}//end btnSterge_Click

}ncerc[m astfel s[ folosim variabila a, definit[ ]n func\ia btnTest_Click().


L2.4

Lec\ia 1. Tipuri de date =i structuri de control


La compilarea programului ]ns[, ]n fereastra Output apare:
....
1>c:\work\vc++2008\work\tutorial\lectia2\Form1.h(152) : error C2065: 'a' : undeclared identifier
....

Pentru a putea folosi o variabil[ ]n orice func\ie a programului, ea trebuie s[ fie declarat[ global.
2.5.1. Exemplul 3. Utilizarea variabilelor globale
Se identific[, ]n fereastra code din Form1.h, sec\iunea:
/// <summary>
/// Required designer variable.
/// </summary>

=i se adaug[ declara\ia de variabile:


// Variabile globale
int a, b;

Se identific[ sec\iunea:
//
//TODO: Add the constructor code here
//

=i se adaug[ ini\ializarea variabilelor globale:


// Initializare variabile globale
a = 7;
b = 3;

Se modific[ func\ia btnTest_Click() astfel:


/**********************************************************************************
Buton Test
Utilizarea variabilelor globale
**********************************************************************************/
private: System::Void btnTest_Click(System::Object^ sender, System::EventArgs^ e)
{
int c, r;
c = a / b;
r = a % b;
// Afisarea rezultatelor
textBox1->AppendText("a="
textBox1->AppendText("b="
textBox1->AppendText("c="
textBox1->AppendText("r="
}//end btnTest_Click

// c este catul impartirii lui a cu b


// r este restul impartirii lui a cu b
+
+
+
+

a
b
c
r

+
+
+
+

"\r\n");
"\r\n");
"\r\n");
"\r\n");

Se modific[m func\ia btnSterge_Click() astfel:


/**********************************************************************************
Buton Sterge
Sterge fereastra text si incrementeaza variabila globala 'a'
**********************************************************************************/
private: System::Void btnSterge_Click(System::Object^ sender, System::EventArgs^ e)
{
textBox1->Text = "";
// Modificam variabila globala 'a'
a++;
}//end btnSterge_Click

// Operatia de incrementare: a = a + 1

Se compileaz[ =i se execut[ programul. La fiecare ap[sare succesiv[ a butoanelor Test =i Sterge, sunt
afi=ate c`tul =i restul ]mp[r\irii lui cu b, iar a cre=te cu o unitate.

L2.5

Lec\ia 1. Tipuri de date =i structuri de control

2.6. Implementarea structurilor de control fundamentale


O structur[ de control precizeaz[ ordinea ]n care se execut[ pa=ii unui algoritm.
Orice algoritm poate fi realizat cu numai trei structuri de control numite fundamentale:
secven\a,
decizia,
itera\ia.
Secven\a (numit[ =i instruc\iune compus[) const[ dintr-o succesiune de instruc\iuni cuprinse ]ntre
paranteze acolade ({ }).
Exemplu de instruc\iune compus[:
{
a = 1;
b = 2;
c = a + b;
}

Decizia permite execu\ia condi\ionat[ a unei instruc\iuni.


Ea are dou[ forme: decizia simpl[ =i decizia cu alternativ[.
Exemplu (decizie simpl[):
if(m > 0)
a = b + c;

Exemplu (decizie cu alternativ[):


if(m != 0)
{
a = b + c;
b++;
}
else
a = b - c;

Itera\ia este structura de control ce permite execu\ia repetat[ (iterativ[) a unei instruc\iuni numit[
corpul ciclului.
Exist[ trei tipuri de itera\ii:
cu test ini\ial,
cu test final,
cu contor.
Itera\ia cu test ini\ial permite execu\ia corpului ciclului c`t timp este ]ndeplinit[ o anumit[ condi\ie.
Sintaxa itera\iei cu test ini\ial este:
while(expresie) instructiune;

]n care expresie este o expresie cu valori de tip logic iar instructiune este corpul ciclului (o
instruc\iune care poate fi =i o instruc\iune compus[).
Itera\ia cu test final permite execu\ia corpului ciclului p`n[ c`nd este ]ndeplinit[ o anumit[ condi\ie.
Sintaxa itera\iei cu test final este:
do instructiune while(conditie);

L2.6

Lec\ia 1. Tipuri de date =i structuri de control


Itera\ia cu contor permite execu\ia corpului ciclului pentru toate valorile unei variabile (numit[
contor) dintr-un interval dat.
Sintaxa itera\iei cu contor este:
for(expresie1; expresie2; expresie3) instructiune;

]n care:

expresie1 este numit[ expresie de ini\ializare;


expresie2 este numit[ expresie condi\ie (expresie cu valori de tip logic);
expresie3 este numit[ expresie de ciclare;

2.6.1. Exemplul 4. Utilizarea instruc\iunii for


P[str[m variabilele globale a =i b din Exemplul 3 =i modific[m func\iile celor dou[ butoane astfel:
/**********************************************************************************
Buton Test
Utilizarea instructiunii for
**********************************************************************************/
private: System::Void btnTest_Click(System::Object^ sender, System::EventArgs^ e)
{
int i;
b = 1;
for(i = 0; i < a; i++)
{
textBox1->AppendText("Linia " + b + "\r\n");
b++;
}//end for
}//end btnTest_Click
/**********************************************************************************
Buton Sterge
Sterge fereastra text
**********************************************************************************/
private: System::Void btnSterge_Click(System::Object^ sender, System::EventArgs^ e)
{
textBox1->Text = "";
}//end btnSterge_Click

Se compileaz[ =i se execut[ programul.


La ap[sarea butonului Test, ]n fereastra text apare:
Linia
Linia
Linia
Linia
Linia
Linia
Linia

1
2
3
4
5
6
7

L2.7