De ce contează?
La intrarea într-un parc: „dacă ai bilet, intri; altfel, mergi la casă". Decizia se ia pe baza unei condiții, iar în funcție de răspuns urmezi un drum sau altul. Structura alternativă e exact această bifurcație din program.
Ce este structura alternativă
O structură alternativă alege între două (sau mai multe) drumuri, în funcție de o condiție care e adevărată sau falsă:
if (conditie) {
// se executa daca este adevarata
} else {
// se executa daca este falsa
}Condiția folosește operatori de comparație: == (egal), != (diferit), <, >,
<=, >=. Le poți combina cu && (și), || (sau), ! (negație).
Atenție la == vs =: == compară, = atribuie. if (x == 5) întreabă „este
x egal cu 5?". if (x = 5) pune 5 în x și e mereu adevărat — bug clasic.
Algoritm pas cu pas: par sau impar
Un număr e par dacă restul împărțirii la 2 este 0:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
if (n % 2 == 0) {
cout << "par\n";
} else {
cout << "impar\n";
}
return 0;
}Pentru n = 6: 6 % 2 == 0 e adevărat → afișează par. Pentru n = 7: fals → impar.
Mai multe cazuri: else if
Când ai cazuri care se exclud reciproc, înlănțuie-le. Clasificăm un număr:
#include <iostream>
using namespace std;
int main() {
int x;
cin >> x;
if (x < 0) {
cout << "negativ\n";
} else if (x == 0) {
cout << "zero\n";
} else {
cout << "pozitiv\n";
}
return 0;
}Cu else if, de îndată ce o condiție e adevărată, restul se sar. Trei if-uri
independente ar verifica toate condițiile inutil — și ar putea afișa două rezultate
dacă logica nu e perfect exclusivă.
Maximul a două numere
int a, b;
cin >> a >> b;
int maxim;
if (a > b) {
maxim = a;
} else {
maxim = b;
}
cout << maxim << "\n";Pentru a = 3, b = 8: condiția 3 > 8 e falsă → maxim = 8.
Complexitate
Un if/else se evaluează în O(1) — testează condiția și alege o ramură, cost
constant. Costul real vine din ce pui pe ramuri, nu din decizia însăși.
Greșeli reale cu structura alternativă:
=în loc de==:if (x = 5)atribuie și e mereu adevărat. Compilatorul nu dă eroare — doar un avertisment, ușor de ratat.- Acolade lipsă cu două instrucțiuni:
if (cond) a = 1; b = 2;—b = 2rulează mereu. Pune{ }când ai mai mult de o linie. - Cazuri neexclusive: folosești
if-uri separate unde trebuiaelse ifși nimerești în două ramuri. - Comparații cu
double:if (x == 0.3)poate fi fals din cauza rotunjirilor; compară cu o toleranță mică.
De reținut
if (conditie) { ... } else { ... }alege un drum după o condiție adevărată/falsă.==compară,=atribuie — confuzia lor e un bug mereu adevărat.- Pentru cazuri care se exclud, folosește
else if; pune acolade când ai >1 instrucțiune.