Pe scurt
Atribuirea pune o valoare nouă într-o variabilă. Într-un algoritm, poți spune „scor primește 5”. De atunci, scorul are valoarea 5, până când o altă instrucțiune îl schimbă. Nu este o afirmație că două lucruri sunt egale pentru totdeauna; este un pas care modifică starea algoritmului.
Partea din dreapta se calculează înainte de schimbarea variabilei din stânga. Dacă scorul este 5 și execuți „scor primește scor + 2”, întâi faci , apoi păstrezi 7 sub numele „scor”. Dacă repeți pasul, pornești de la 7 și obții 9. Urmărirea este: 5, apoi 7, apoi 9.
Poți folosi și altă variabilă. Ai două borcane cu câte 3 și 4 bile, notate și . Dacă scrii „ primește ”, devine 7, dar rămâne 4. Dacă vrei să păstrezi valoarea inițială a lui , trebuie să o copiezi mai întâi într-o a treia variabilă. Altfel, noua valoare o înlocuiește pe cea veche.
Ordinea atribuirilor poate schimba rezultatul. „ primește ”, apoi „ primește ” nu schimbă între ele valorile inițiale: după prima instrucțiune, ambele au deja valoarea veche a lui . Un tabel cu valorile de după fiecare pas te ajută să vezi exact ce s-a pierdut. Înainte de a citi valoarea unei variabile, verifică dacă i-ai dat una.
Exemplu rezolvat — urmărirea a trei atribuiri. Se dau instrucțiunile „ primește 2”, „ primește ” și „ primește ”. Care sunt valorile finale?
- După prima instrucțiune: .
- A doua instrucțiune calculează partea dreaptă, , și o păstrează în : , iar rămâne 2.
- A treia instrucțiune calculează și o păstrează în : , iar rămâne 3.
Valorile finale sunt și . Observă că nu s-a modificat când s-a schimbat : a fost calculat o singură dată, cu valoarea pe care o avea în acel moment. Instrucțiunea „ primește ” nu leagă pe de pentru tot restul programului.
În detaliu
Atribuirea are forma variabila = expresie;. Se evaluează expresia din dreapta cu valorile curente ale variabilelor, rezultatul este convertit la tipul variabilei din stânga (dacă conversia este permisă), apoi se memorează în variabilă. Valoarea veche a variabilei din stânga se pierde. Operatorul = atribuie, iar == compară. Atribuirea poate fi înlănțuită: p = q = 5; dă lui q valoarea 5, apoi lui p valoarea lui q. Operatorii compuși +=, -=, *=, /=, %= combină o operație cu atribuirea: x += 3 înseamnă x = x + 3.
Exemplul 1 — interschimbarea cu variabilă temporară.
#include <iostream>
using namespace std;
int main() {
int a = 3, b = 4;
int temporar = a;
a = b;
b = temporar;
cout << a << " " << b;
return 0;
}
După temporar = a avem ; după a = b avem ; după b = temporar obținem . Ieșirea este 4 3. Variabila temporară păstrează valoarea care altfel s-ar fi pierdut la a doua atribuire.
Exemplul 2 — conversia la atribuire. Tipul variabilei din stânga decide rezultatul: int a = 7 / 2; dă 3, pentru că împărțirea de întregi este întreagă. double b = 7 / 2; dă tot 3, fiindcă împărțirea se face înainte de conversie. Abia double c = 7 / 2.0; dă 3,5. Atribuirea unui real într-un întreg elimină partea zecimală, fără rotunjire: după int k = 3.9; valoarea lui k este 3.
int a = 7 / 2;
double b = 7 / 2;
double c = 7 / 2.0;
cout << a << ' ' << b << ' ' << c;
Secvența afișează 3 3 3.5.
Exemplul 3 — atribuiri înlănțuite și compuse. După p = q = 5; ambele variabile au valoarea 5. Apoi p += 2; dă , iar q *= 3; dă . Se afișează 7 15. Fiecare atribuire compusă folosește valoarea variabilei din momentul executării ei, nu valoarea inițială.
Atribuirea ca expresie. În C++ atribuirea are ea însăși o valoare, cea care a fost memorată. De aceea a = (b = 4) + 1; memorează 4 în b, apoi calculează și îl memorează în a: după instrucțiune și . Această proprietate permite lanțul p = q = 5, dar fragmentele care o folosesc în condiții sunt greu de citit și produc des greșeli.
Exemplul 4 — operatori compuși pe întregi. Împărțirea compusă /= rămâne împărțire întreagă când variabila este de tip int. Pentru int n = 10; secvența n /= 4; n += 1; n *= n; dă pe rând (câtul lui 10 la 4), și . Pentru int m = 17; secvența m %= 5; m -= 1; dă (restul lui 17 la 5), apoi . Contorizarea se scrie k = k + 1: pornind de la 0 și executată de trei ori, instrucțiunea dă pe rând 1, 2, 3.
Exemplul 5 — interschimbarea fără variabilă temporară. Aceeași operație se poate face cu trei atribuiri aritmetice, dacă suma încape în tipul întreg.
int a = 3, b = 4;
a = a + b;
b = a - b;
a = a - b;
cout << a << ' ' << b;
Perechile sunt , apoi după prima atribuire, după a doua și după a treia. Se afișează 4 3. A doua atribuire folosește noul și vechiul , adică , vechea valoare a lui . Metoda este fragilă: pentru valori apropiate de limita lui int, suma depășește domeniul și rezultatul este greșit, de aceea varianta cu temporar rămâne cea sigură.
Exemplul 6 — atribuirea repetată într-un ciclu. Atribuirea s = s + i * i; din interiorul unui ciclu acumulează sume de pătrate.
int s = 0;
for (int i = 1; i <= 4; i++)
s = s + i * i;
cout << s;
La fiecare iterație partea dreaptă folosește suma de până atunci: devine 1, apoi , apoi , apoi . Se afișează 30. Dacă ai scrie s = i * i;, fiecare iterație ar înlocui suma cu un singur pătrat și ai obține .
Atribuire sau comparație. În if (a = 0) se atribuie 0 lui a, iar valoarea expresiei, 0, este tratată ca fals; condiția nu compară nimic și schimbă valoarea lui a. Comparația se scrie a == 0.
Pentru admitere
Urmărește atribuirile în ordine, inclusiv cele care folosesc aceeași variabilă pe ambele părți. Pentru x=2; y=x+1; x=y+1; rezultă y=3 și x=4. Nu reevalua retroactiv pe y după ce x s-a schimbat. Într-un fragment cu atribuiri compuse, scrie fiecare instrucțiune în forma extinsă (x *= 2 devine x = x * 2) și notează valorile în tabel. Când tipurile diferă, aplică conversia la momentul atribuirii: partea zecimală se pierde la memorarea într-un int. Operatorul %= păstrează restul, iar /= pe întregi păstrează câtul: pornind de la 10, n /= 4 dă 2, nu 2,5. Dacă o instrucțiune din subiect are două atribuiri pe aceeași linie, a = b = 7;, execută-le de la dreapta la stânga și notează valoarea fiecărei variabile după fiecare pas.
Exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?
int x = 2, y;
y = x + 1;
x = y + 1;
y = x * y;
cout << x << ' ' << y;
- a)
4 3 - b)
4 12 - c)
3 12 - d)
12 4
Răspunsul corect este b). După y = x + 1 avem . După x = y + 1 avem . Ultima atribuire folosește valorile curente, și , și dă , în timp ce rămâne 4. Se afișează 4 12. Varianta a) uită ultima atribuire, iar varianta d) inversează ordinea afișării.
Al doilea exemplu în formatul examenului. Ce se afișează în urma executării secvenței de mai jos?
int a = 5, b = 2;
a = a - b;
b = a + b;
a = b - a;
cout << a << ' ' << b;
- a)
5 2 - b)
2 5 - c)
3 5 - d)
2 3
Răspunsul corect este b). După a = a - b avem și . După b = a + b avem . După a = b - a avem . Se afișează 2 5. Varianta c) se oprește după a doua atribuire, iar varianta a) arată valorile inițiale, ca și cum nicio atribuire nu ar modifica nimic.
Greșeli frecvente
- Greșit:
x = y + 1leagă permanent pexdey.Corect: instrucțiunea calculează valoarea o singură dată, la executare. - Greșit:
double b = 7 / 2;memorează 3,5.Corect: împărțirea întreagă dă 3, iar conversia la real dă 3. - Greșit: atribuirea schimbă și valoarea din dreapta.Corect: se modifică numai variabila din stânga.
Pentru părinți
Copilul exersează urmărirea unei valori schimbate.
- Scrieți pe două bilețele și .
- Aplicați „ primește ” și notați noile valori.
- Încercați să le schimbați între ele folosind un al treilea bilețel.
- Comparați rezultatele.
Întrebați-l: „Unde păstrăm valoarea veche înainte de a o înlocui?”
Testează-te pe această lecție
Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.
Înainte și după
Surse și referințe
Redactare proprie, conform programei:
- OMEN 3393/2017, anexa 2, Informatică și TIC, pp. 11–12; isj.tm.edu.ro
- UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3 și 6; aplicabilitatea 2027: OMEC 5211/2026, art. 3 alin. (10); edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro
- OMECTS 4800/2010, anexa 2, Informatică, p. 5–6; edu.ro
Documente consultate
- OMEN 3393/2017, anexa 2, Informatică și TIC, clasa a VII-a, p. 12; UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
- Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
- Programa școlară de informatică, clasa a IX-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
- Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3 și 6; edu.ro
- Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro
Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a IX-a, matematică-informatică (OMEC 6930/2025, anexa 42); rocnee.eu
