Invatare Atomica

Expresii aritmetice si logice

Progres lectie:
0%
🎯

Obiectivul lectiei

Vei invata sa scrii si sa evaluezi expresii corecte: operatori aritmetici, relationali si logici, plus regula de aur a precedentei. Este una dintre cele mai frecvente teme la examen.

Dupa aceasta lectie vei putea:

  • Sa aplici operatorii aritmetici (+, -, *, /, //, %, **) si sa distingi impartirea reala de cea intreaga
  • Sa evaluezi expresii respectand precedenta si asociativitatea operatorilor
  • Sa folosesti operatorii relationali (<, >, ==, !=, <=, >=) care produc valori booleene
  • Sa combini conditii cu operatorii logici (and, or, not) si sa intelegi evaluarea pe scurtcircuit
  • Sa scrii aceleasi expresii si in C++ (sectiune intensiv) si sa rezolvi exercitii tip examen

Incearca singur!

Provocare:

Fara calculator, cat face 2 + 3 * 4? Apoi cat face (2 + 3) * 4? Scrie ambele rezultate si explica de ce sunt diferite.

💡 Ai nevoie de un indiciu?

Inmultirea are prioritate mai mare decat adunarea, deci se face prima. Parantezele schimba ordinea: ce este in paranteza se calculeaza intotdeauna primul.

Verifica: 2 + 3 * 4 = 2 + 12 = 14, iar (2 + 3) * 4 = 5 * 4 = 20.

1

1. Operatori aritmetici

Operatorii aritmetici combina numere si produc tot un numar. Atentie la cele doua feluri de impartire din Python:

OperatorDescriereExempluRezultat
+Adunare5 + 38
-Scadere5 - 32
*Inmultire5 * 315
/Impartire reala7 / 23.5
//Impartire intreaga (catul)7 // 23
%Rest (modulo)7 % 31
**Ridicare la putere2 ** 38

Sa le vedem ruland efectiv in Python:

print(7 / 2)    # impartire reala
print(7 // 2)   # impartire intreaga (catul)
print(7 % 3)    # restul impartirii
print(2 ** 3)   # 2 la puterea 3
Rezultat (rulat real):
3.5
3
1
8

Idee cheie: perechea // si % este motorul multor algoritmi de prelucrare a cifrelor (vei prelucra cifrele unui numar in lectiile urmatoare): n % 10 da ultima cifra, iar n // 10 elimina ultima cifra.

2

2. Precedenta si asociativitatea operatorilor

Cand o expresie are mai multi operatori, ordinea de evaluare este (de la prioritate maxima la minima):

  1. ( ) — parantezele (prioritate maxima)
  2. ** — ridicarea la putere
  3. * / // % — inmultire, impartiri, rest
  4. + - — adunare, scadere

La prioritati egale evaluarea merge de la stanga la dreapta. Exceptie: ** este asociativ la dreapta.

print(2 + 3 * 4)     # * inainte de +
print((2 + 3) * 4)   # parantezele schimba ordinea
print(2 ** 3 ** 2)    # ** asociativ la dreapta: 2 ** (3 ** 2)
Rezultat (rulat real):
14
20
512

2 ** 3 ** 2 da 512 pentru ca se evalueaza ca 2 ** (3 ** 2) = 2 ** 9 = 512, NU (2 ** 3) ** 2 = 64. Cand ai dubii, foloseste paranteze — clarifica intentia.

3

3. Operatori relationali (de comparatie)

Operatorii relationali compara doua valori si produc un boolean: True sau False.

OperatorDescriereExempluRezultat
==Egal5 == 5True
!=Diferit5 != 3True
<Mai mic3 < 5True
>Mai mare5 > 3True
<=Mai mic sau egal5 <= 5True
>=Mai mare sau egal5 >= 6False
print(5 == 5)
print(5 != 3)
print(3 < 5)
print(5 >= 6)
print(1 <= 5 <= 10)   # Python permite comparatii inlantuite
Rezultat (rulat real):
True
True
True
False
True

Capcana clasica: nu confunda = (atribuire, da o valoare unei variabile) cu == (comparatie, verifica egalitatea).

4

4. Operatori logici

Operatorii logici combina valori booleene. In Python se scriu in cuvinte: and, or, not.

OperatorDescriereExempluRezultat
andSI logic (adevarat doar daca ambele sunt True)True and FalseFalse
orSAU logic (adevarat daca cel putin unul e True)True or FalseTrue
notNegatie (inverseaza valoarea)not TrueFalse
x = 5
y = 3
print(x > y and x % y == 2)   # 5>3 True, 5%3==2 True -> True
print(x == y or x > y)         # 5==3 False, 5>3 True -> True
print(not (x > y))             # not True -> False
Rezultat (rulat real):
True
True
False

Evaluare pe scurtcircuit: la and, daca primul operand este False, al doilea nici nu se mai evalueaza (rezultatul e deja False). La or, daca primul este True, al doilea se ignora. Acest comportament permite, de exemplu, b != 0 and a % b == 0 — verifici intai ca b nu e zero, evitand impartirea la zero.

5

5. Exercitiu rezolvat pas cu pas

Sa evaluam o expresie tip examen, aplicand precedenta:

a = 10
b = 3
rezultat = a % b + a // b * 2
print(rezultat)

Rezolvare pas cu pas (//, % si * au prioritate peste +):

  1. a % b = 10 % 3 = 1
  2. a // b = 10 // 3 = 3
  3. 3 * 2 = 6 (inmultirea inainte de adunare)
  4. 1 + 6 = 7
Rezultat (rulat real):
7
6

6. Aceleasi expresii in C++ (EXCLUSIV INTENSIV)

Aceasta sectiune este doar pentru specializarea intensiv informatica. La intensiv inveti acelasi material si in C++. Operatorii sunt foarte asemanatori, dar exista doua diferente importante fata de Python:

  • Impartirea: in C++ nu exista //. Daca ambii operanzi sunt int, operatorul / face impartire intreaga (7 / 2 da 3). Pentru rezultat real, cel putin un operand trebuie sa fie real (7.0 / 2).
  • Operatorii logici se scriu cu simboluri: && (si), || (sau), ! (negatie).
  • Booleenii se afiseaza implicit ca 1 / 0; cu boolalpha apar ca true / false.
// Operatori in C++ (intensiv)
#include <iostream>
using namespace std;

int main() {
    cout << 7 / 2 << endl;          // impartire intreaga: 3
    cout << 7 % 3 << endl;          // rest: 1
    cout << boolalpha << (5 == 5) << endl;  // true

    int x = 5, y = 3;
    cout << ((x > y) && (x % y == 2)) << endl;  // true
    cout << (!(x > y)) << endl;                  // false
    return 0;
}
Rezultat (compilat cu g++ -std=c++17 si rulat real):
3
1
true
true
false

Exercitii practice

Exercitiul 1 (Nivel minim) - Evalueaza expresia

Fie a = 15, b = 4. Calculeaza pas cu pas valoarea expresiei a % b + a // b * 2 si verifica rezultatul ruland in Python. (Indiciu: 15 % 4 = 3, 15 // 4 = 3.)

Exercitiul 2 (Nivel standard) - Expresie logica

Fie x = 8, y = 3. Stabileste daca expresia x > y and x % y == 2 este True sau False. Justifica fiecare comparatie. (Indiciu: 8 % 3 = 2.)

Exercitiul 3 (Nivel performanta) - Inverseaza un numar de doua cifre

Pentru n = 47, scrie o expresie care obtine numarul rasturnat (74), folosind doar % si //. Scrie codul:

n = 47
invers = n % 10 * 10 + n // 10
print(invers)   # ce afiseaza?

Explica de ce n % 10 da ultima cifra si n // 10 da prima cifra.

Exercitiul 4 (Nivel performanta) - Mini-simulare examen

Fie a = 27. Ce afiseaza urmatorul cod si de ce?

a = 27
print(a % 10 + a // 10)

(Indiciu: este suma cifrelor unui numar de doua cifre.)

Ce ai invatat astazi

  • Operatorii aritmetici (+, -, *, /, //, %, **) si diferenta / vs //
  • Precedenta si asociativitatea (** este asociativ la dreapta)
  • Operatorii relationali produc valori booleene (==, !=, <, >, <=, >=)
  • Operatorii logici (and, or, not) si evaluarea pe scurtcircuit
  • Echivalentul in C++ la intensiv (/, &&, ||, !, boolalpha)

Urmatoarea lectie

Continua cu lectia urmatoare pentru a aprofunda cunostintele.

Continua →