You are on page 1of 5

PROGRAMAREA CALCULATOARELOR

ȘI LIMBAJE DE PROGRAMARE

CURS 5

1.13 Execuţia unui program


Reamintim etapele de execuţie a unui program.
• Prima etapă este compilarea programului. In această etapă programul este verificat
pentru erori sintactice. Dacă programul nu conţine erori sintactice compilatorul
generează un program obiect traducând fiecare instrucţiune a programului într-o serie
de instrucţiuni elementare ale calculatorului. Fiecare fişier sursă este compilat separat.
Din fiecare fişier sursă rezultă un fişier obiect.
• Etapa a doua este editarea legăturilor. In această etapă sunt ataşate programului funcţiile
din biblioteci. Atunci când compilatorul întâlneşte un apel de funcţie (de exemplu sin,
cos, etc.), sau o operaţie intrare/ieşire, el generează doar o secvenţă de apel la funcţie.
Funcţiile respective sunt precompilate în biblioteci speciale şi programul editor de
legături ataşează aceste funcţii programului obiect. Editorul de legături generează un
program executabil din toate fişierele obiect. El este un fişier cu extensia exe.
• In etapa a treia programul excutabil este încărcat în memorie şi executat.

1.14 Operatorul sizeof


Operatorul sizeof se aplică asupra unei expresii sau asupra unui tip şi are ca rezultat numărul
de octeţi de memorie utilizaţi. Există două forme ale acestui operator
sizeof (tip)
sizeof (expresie)
De exemplu, expresia
sizeof(int)
are ca rezultat valoarea 4, expresia
sizeof (char)
are valoarea 1, etc.
In cazul unui tablou rezultatul este numărul total de octeţi ocupat de tablou. Fie instrucţiunea
double a[5];
Expresia
sizeof(a)
are valoarea 40 iar expresia
sizeof(a) / sizeof(a[0])
dă numărul elementelor tabloului a.
In cazul cand operandul este o expresie, operatorul sizeof dă numărul de octeţi ocupat de
rezultatul expresiei. Fie de exemplu instrucţiunile
int x;
double m;
Expresia
sizeof(x + m)
are valoarea 8, deoarece tipul expresiei este double.
Exemplu. Vom scrie un program care să afişeze numărul de octeţi utilizaţi pentru memorarea
tipurilor fundamentale. Vrem ca rezultatele să fie afişate pe ecran astfel:
Numarul de octeti utilizati
int : ....
char : ....
float : ....
double : ….

1
PROGRAMAREA CALCULATOARELOR
ȘI LIMBAJE DE PROGRAMARE

vectorul float a[10] : ….


expresia a[0]+b : ....
Pentru a afişa datele deplasate la dreapta cu un număr de spaţii vom scrie un caracter tab, ‘\t’.
Programul este următorul :

// dimensiunea tipurilor standard


# include <iostream>
using namespace std;
int main()
{
float a[10], b;
cout << “Numarul de octeti utilizati:” << endl;
// scrie dimensiunea tipurilor standard
cout << ”\tint: “ << sizeof(int) << endl;
cout << “\tchar: “ << sizeof(char) << endl;
cout << “\tfloat: “ << sizeof(float) << endl;
cout << “\tdouble: “ << sizeof(double) << endl;
// scrie dimensiunea unui vector
cout << “\tvectorul float a[10]: “ << sizeof(a) << endl;
// scrie dimensiunea rezultatului unei expresii
cout << “\texpresia a[0]+b: ” << sizeof(a[0]+ b) << ‘\n’;
}

Rezultatul rulării programului este prezentat mai jos.

Menţionăm că este echivalent dacă în instrucţiunea cout utilizăm caracterul ‘\n’, sau endl, sau
şirul de caractere “\n”. Şirului de caractere “\tint: “ duce la scrierea caracterului ‘\t’ şi a şirului
”int: “. Instrucţiunea
cout << ”\tint: “ << sizeof(int) << endl;
putea fi scrisă ca
cout << ‘\t’ << ”int: “ << sizeof(int) << endl;

1.15 Operatorii ++ şi - -
Operatorul ++ incrementează o variabilă întreagă cu valoarea unu, operatorul - - decrementează
o variabilă întreagă cu unu. Aceşti operatori pot fi :
• prefix
++x, --x
• postfix
x++, x- -
Expresiile ++x şi x++ reprezintă instrucţiunea
x=x+1
iar expresiile - -x şi x- - reprezintă instrucţiunea

2
PROGRAMAREA CALCULATOARELOR
ȘI LIMBAJE DE PROGRAMARE

x=x–1

Cazul operatorilor prefix, ++x, --x

O expresie de forma
f(++x);
este scrierea prescurtată a expresiilor:
x = x + 1;
f(x);
In acelaşi fel, expresia
f(--x);
reprezintă scrierea prescurtată a expresiilor:
x = x – 1;
f(x);
Modul de execuţie a expresiei este următorul:
1. se incrementează sau decrementează valoarea variabilei x cu unu,
2. valoarea incrementată sau decrementată se utilizează mai departe în calcule.
Exemplu. Fie declaraţia de variabile
int i = 1, x;
Instrucţiunea
x = ++i;
reprezintă scrierea prescurtată a secvenţei de instrucţiuni
i = i + 1;
x = i;
După execuţia instrucţiunii x = ++i variabilele au valorile i = 2 şi x = 2.
Exemplu. Fie declaraţia de variabile
int j = 3, k;
Instrucţiunea
k = --j;
reprezintă scrierea prescurtată a secvenţei de instrucţiuni
j = j – 1;
k = j;
După execuţia instrucţiunii variabilele au valorile j = 2 şi k = 2.
Exemplu. Fie secventa de instrucţiuni
int i = 1;
cout << “i = “ << i << endl;
cout << “i = “ << ++i << endl;
cout << “i = “ << i << endl;
Valorile afişate vor fi
i=1
i=2
i=2
deoarece a doua instructiune cout este echivalentă cu instrucţiunile
cout << “i = “;
i = i + 1;
cout << i << endl;
Exemplu. Fie următoarele declaraţii.
double a[4] = {1.2, -5, 8, 3};
double r;
int i = 1, k = 1;

3
PROGRAMAREA CALCULATOARELOR
ȘI LIMBAJE DE PROGRAMARE

Secvenţa de instrucţiuni
i = i +1;
r = a[i];
se poate scrie
r = a[++i];
Expresia ++i este evaluată la 2, iar r primeşte valoarea a[2] = 8.
Secvenţa de instrucţiuni
k = k – 1;
r = a[k];
se poate scrie
r = a[--k];
Expresia --k este evaluată la 0 iar r primeşte valoarea a[0] = 1.2

Cazul operatorilor postfix, x++, x--

O expresia de forma
f(x++);
reprezintă scrierea prescurtată a expresiilor
f(x);
x = x + 1;
In acelaşi mod, expresia
f(x--);
reprezintă scrierea prescurtată a expresiilor:
f(x);
x = x – 1;
Modul de execuţie a expresiei este următorul :
1. se utilizează în calcule valoarea variabilei x (neincrementate sau nedecrementate),
2. se incrementează / decrementează apoi variabila x.
Exemplu. Fie cele două secvenţe de instrucţiuni de mai jos :
int a, b;
b = 3;
a = b++;
Expresia
a = b++;
corespunde secvenţei de instrucţiuni :
a = b;
b = b + 1;
In consecinţă, expresia b++ are valoarea 3 (valoarea neincrementată a variabilei) şi apoi se
incrementează b. Avem rezultatul
a=3
b=4
Exemplu. Fie instructiunile :
int j = 1;
cout << “j = “ << j << endl;
cout << “j = “ << j++ << endl;
cout << “j = “ << j << endl;
Valorile afişate vor fi :
j=1
j=1
j=2

4
PROGRAMAREA CALCULATOARELOR
ȘI LIMBAJE DE PROGRAMARE

deoarece a doua instrucţiune cout este echivalentă cu instrucţiunile :


cout << “j = “ << j;
j = j + 1;
cout << endl;
Exemplu. Fie secvenţa de instrucţiuni de mai jos :
int i;
double x[4] = {2.4e1, 14.4, -3.1, 0};
double d;
i = 1;
d = x[i++];
Instrucţiunea
d = x[i++];
corespunde secvenţei de instrucţiuni :
d = x[i];
i = i + 1;
Expresia i++ are valoarea 1 şi apoi se incrementează i. Avem deci
d = 14.4
şi
i=2
Exemplu. Fie acum secvenţa de instrucţiuni următoare :
int j;
double x[4] = {2.4e1, 14.4, -3.1, 0};
double d;
j = 1;
d = x[++j];
Instrucţiunea
d = x[++j];
corespunde secvenţei de instrucţiuni :
j = j + 1;
d = x[j];
In consecinţă expresia ++j are valoarea 2 şi avem
d = -3.1
şi
j=2

You might also like