1. OPERATORI
Datele (constante sau variabile) legate prin operatori (simboluri pentru operaţii), formează
expresii. Operatorii care pot fi aplicaţi datelor (operanzilor) depind de tipul operanzilor,
datorită faptului că tipul unei date constă într-o mulţime de valori pentru care s-a adoptat un
anumit mod de reprezentare în memoria calculatorului şi o mulţime de operatori care pot fi
aplicaţi acestor valori. În funcţie de numărul operanzilor necesari, operatorii pot fi:
2. EXPRESII
3. CONVERSII DE TIP
1
REFERAT DE LABORATOR Nr.3
1. Urmăriţi execuţia următorului program care ilustrează utilizarea operatorului cast: (tip).
Acest operator unar apare în construcţii numite "cast" și convertește tipul operandului său la
tipul dintre paranteze.
#include <iostream>
using namespace std;
int main()
{
int a=5, b=3;
float x;
cout<<"x=a/b, unde a=5, b=3 variabile intregi\n";
x=a/b;
//a si b fiind variabile intregi, rezultatul operatiei de impartire va fi
//de asemenea unul intreg (numar fara virgula zecimala). Acest rezultat
//intreg va fi apoi convertit in numar real si atribuit variabilei x de
//tip float. Prin urmare, chiar daca variabila x este de tip real,
//rezultatul impartirii dintre a si b va fi un rezultat intreg.
cout<<"x = "<<x<<"\n\n";
cout<<"x=a/b, unde tipul lui a a fost fortat la float\n";
x=(float)a/b;
//in acest caz, tipul operandului a va fi convertit la tipul float
//(real), prin intermediul operatorului cast. Apoi, in cazul operatiei de
//impartire, avand un operator de tip float si unul de tip int, se va
//converti automat tipul operandului b la float, iar rezultatul
//impartirii va fi de tip float (real)
cout<<"x = "<<x;
}
2
REFERAT DE LABORATOR Nr.3
Ambii operatori pot fi folosiţi în formã prefixată, înaintea operandului, (++a, respectiv --a) sau
postfixată, după operand (a++, respectiv a--).
Utilizarea acestor operatori în expresii, în formă prefixată sau postfixată, determină evaluarea
acestora în moduri diferite, astfel:
y=++x este echivalent cu: x=x+1; y=x;
y=x++ este echivalent cu: y=x; x=x+1;
y=--x este echivalent cu: x=x-1; y=x;
y=x-- este echivalent cu: y=x; x=x-1;
#include <iostream>
using namespace std;
int main()
{
int a,b;
a=10;
cout<<" a= "<<a;
cout<<" ; a++= "<<a++<<" ; a= "<<a<<'\n';
//se afiseaza mai intai valoarea lui a (10), apoi deoarece operatorul de
//incrementare este in forma postfixata, se va utiliza mai intai in
//expresie a-ul cu vechea valoare (se va afisa valoarea variabilei a,
//10), urmand ca abia dupa aceasta sa fie incrementata. Cand afisam din
//nou valoarea variabilei a, observam ca valoarea acesteia este
//incrementata (11)
a=10;
cout<<" a= "<<a;
cout<<" ; ++a= "<<++a<<" ; a= "<<a<<"\n\n";
//se afiseaza mai intai valoarea lui a (10), apoi deoarece operatorul de
//incrementare este in forma prefixata, se va incremanta mai intai
//valoarea variabilei a, si abia apoi se va utiliza in expresie (se va
//afisa valoarea variabilei a incrementata, 11), Cand afisam din nou
//valoarea variabilei a, observam ca valoarea acesteia este de asemenea
//incrementata (11)
a=10;
cout<<" a= "<<a;
b=a++;
cout<<" ; b=a++ : "<<b<<'\n';
a=10;
cout<<" a= "<<a;
b=++a;
cout<<" ; b=++a : "<<b<<'\n';
}
3
REFERAT DE LABORATOR Nr.3
Rezultatele afișate pe ecran vor fi: 1 pentru o expresie adevărată, respectiv 0 pentru una falsă.
#include <iostream>
using namespace std;
int main()
{
int a=5, b=10;
cout<<" a= "<<a<<" ; b= "<<b<<"\n\n";
cout<<" a<b : "<<(a<b)<<'\n';
cout<<" a>b : "<<(a>b)<<'\n';
cout<<" a!=b : "<<(a!=b)<<'\n';
cout<<" a==b : "<<(a==b)<<'\n';
}
4. Să se scrie un program care citeşte un număr real şi afişează 1 dacă numărul citit aparţine
unui interval ale carui limite sunt introduse tot de la tastatura, sau 0 în caz contrar.
#include <iostream>
using namespace std;
int main()
{
double lmin, lmax, nr;
cout<<"Numar=";
cin>>nr;
cout<<"Limita inferioara a intervalului:";
cin>>lmin;
cout<<"Limita superioara a intervalului:";
cin>>lmax;
cout<<(nr>=lmin && nr<=lmax);
}
4
REFERAT DE LABORATOR Nr.3
5. Să se citească de la tastatură un număr real. Daca acesta se află în intervalul [-100, 100], să
se afiseze 1, dacă nu, să se afiseze -1. Se va folosi operatorul condiţional.
Se evaluează expresie1. Dacă aceasta are o valoare diferită de zero, atunci tipul şi valoarea
întregii expresii vor fi aceleaşi cu tipul şi valoarea expresie2. Altfel (dacă expresie1 are
valoarea zero), tipul şi valoarea întregii expresii vor fi aceleaşi cu tipul şi valoarea
expresie3. Deci operatorul condiţional este folosit pentru a atribui întregii expresii tipul şi
valoarea expresie2 sau a expresie3, în funcţie de o anumită condiţie. Acest lucru este
echivalent cu:
Dacă expresie1 diferită de zero
Atunci evaluează expresie2
Altfel evaluează expresie3
#include <iostream>
using namespace std;
int main()
{
double nr;
cout<<"Astept numar:";
cin>>nr;
int afis = (nr>= -100 && nr <= 100 ? 1 : -1);
//variabilei afis i se atribuie valoarea expresiei in care se foloseste
//operatorul ?:
cout<<afis;
}
5
REFERAT DE LABORATOR Nr.3
10. Scrieţi un program care separă cifrele numerelor intregi de trei cifre şi le afişează cu câte
trei spaţii între ele. De exemplu, dacă numărul este 671, programul ar trebui să afişeze: 6 7 1
11. Fiind date declaraţiile int a=2, b=2, c=1, e=4; determinaţi și afișaţi valoarea
următoarelor expresii:
a++ / ++c * --e
--b * c++ -a
-b - --c
e / --a * b++ /c++
e / --a * b++ / c++