Expresii aritmetice simple

Bază~12 min11 pași

De ce contează?

Calculatorul de buzunar face 7 ÷ 2 = 3,5 fără să clipești. Calculatorul din concurs face 7 / 2 = 3 și aruncă restul — pentru că îi spui că lucrezi cu numere întregi. Același simbol, alt sens, altă valoare. Tipul datelor nu e un detaliu tehnic: schimbă concret rezultatul calculului.

Operatorii aritmetici de bază

OperatorOperațieExempluRezultat
+Adunare5 + 38
-Scădere5 - 32
*Înmulțire5 * 315
/Împărțire7 / 23 (întreg!)
%Rest (modulo)7 % 21
Observația-cheie

/ între doi întregi dă câtul întreg — restul se pierde. 7 / 2 = 3, nu 3.5. Operatorul % dă tocmai acel rest: 7 % 2 = 1. Reține: % funcționează DOAR pe tipuri întregi — 7.0 % 2 e eroare de compilare.

Împărțire întreagă vs reală

#include <iostream>
using namespace std;

int main() {
    int a = 7, b = 2;

    cout << a / b << endl;          // 3 -- impartire intreaga
    cout << (double)a / b << endl;  // 3.5 -- cast la double
    cout << a / (double)b << endl;  // 3.5 -- acelasi lucru
    cout << 7.0 / 2 << endl;       // 3.5 -- literal real

    // Restul impartirii
    cout << a % b << endl;   // 1
    cout << 13 % 4 << endl;  // 1 (13 = 4*3 + 1)
    cout << 20 % 5 << endl;  // 0 (20 se divide exact)
    return 0;
}

Ordinea operațiilor

C++ respectă prioritatea matematică obișnuită:

  1. Expresiile din paranteze () — prima dată
  2. *, /, % — stânga la dreapta
  3. +, - — stânga la dreapta
int r1 = 2 + 3 * 4;     // 14 (nu 20): 3*4=12, apoi 2+12
int r2 = (2 + 3) * 4;   // 20: (2+3)=5, apoi 5*4
int r3 = 10 - 3 - 2;    // 5: (10-3)=7, apoi 7-2
int r4 = 10 / 2 / 5;    // 1: (10/2)=5, apoi 5/5

Operatori de incrementare

int x = 5;
x++;   // x devine 6 (echivalent cu x = x + 1)
x--;   // x devine 5 (echivalent cu x = x - 1)
x += 3; // x devine 8 (echivalent cu x = x + 3)
x *= 2; // x devine 16 (echivalent cu x = x * 2)

Modulo — cel mai util operator la concursuri

Modulo apare în zeci de probleme, adesea acolo unde nu te aștepți:

// Verifica paritatea
if (n % 2 == 0) cout << "par";

// Extrage ultima cifra a unui numar
int ultimaCifra = n % 10;  // ex: 1234 % 10 = 4

// Indice circular (wrap-around intr-un vector)
int urmator = (i + 1) % n;  // dupa ultima pozitie, revine la 0
Indiciu

n % 10 extrage ultima cifră, n / 10 o taie. Repetând aceste două operații, poți procesa toate cifrele unui număr de la dreapta la stânga — vei folosi asta des în capitolele următoare.

Greșeli frecvente

Greșeala 1: Calculezi media cu împărțire întreagă. (a + b) / 2 când a și b sunt int trunchiază rezultatul. Dacă vrei zecimale, scrie (a + b) / 2.0.

Greșeala 2: Uiți parantezele și te bazezi pe prioritate. a + b * c(a + b) * c. Dacă nu ești sigur, pune paranteze — nu costă nimic și elimină ambiguitatea.

Greșeala 3: Verifici imparitatea cu n % 2 == 1, dar n poate fi negativ. În C++, -3 % 2 e -1, nu 1. Condiția corectă pentru impar este n % 2 != 0.

Întrebarea 1 / 3

Ce afișează: cout << 7 / 2;