Didaxis
lecție · Informatică

Atribuirea

Evaluarea părții drepte și actualizarea variabilei.

Se face în:
Clasa a VII-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 3 · rezumatul lecției

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?

  1. După prima instrucțiune: .
  2. A doua instrucțiune calculează partea dreaptă, , și o păstrează în : , iar rămâne 2.
  3. 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.

Desen la lecția „Atribuirea”
2în detaliustratul 2 din 3 · pentru clasă și Bacalaureat

Î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.

3pentru admiterestratul 3 din 3 · pentru examene

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 + 1 leagă permanent pe x de y.
    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 adulți

Pentru părinți

Copilul exersează urmărirea unei valori schimbate.

  1. Scrieți pe două bilețele și .
  2. Aplicați „ primește ” și notați noile valori.
  3. Încercați să le schimbați între ele folosind un al treilea bilețel.
  4. Comparați rezultatele.

Întrebați-l: „Unde păstrăm valoarea veche înainte de a o înlocui?”

în contul tăuPremium

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

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.