Structura alternativă

Bază~12 min11 pași

De ce contează?

La semafor alegi un singur drum: dacă e verde, mergi; dacă e roșu, aștepți. Nu poți face ambele. Exact asta face structura alternativă: evaluează o condiție și execută una din două ramuri — niciodată pe amândouă în același timp.

Forma simplă: if

Execută un bloc doar dacă condiția e true:

if (conditie) {
    // executat doar cand conditia e adevarata
}

Exemplu:

int nota;
cin >> nota;
if (nota >= 5) {
    cout << "Promovat" << endl;
}
// daca nota < 5, nu se afiseaza nimic

Forma completă: if-else

Execută un bloc sau celălalt:

if (conditie) {
    // executat cand conditia e adevarata
} else {
    // executat cand conditia e falsa
}
int n;
cin >> n;
if (n % 2 == 0) {
    cout << n << " este par" << endl;
} else {
    cout << n << " este impar" << endl;
}

Forma înlănțuită: if-else if-else

Verifică mai multe condiții în ordine — se execută primul bloc cu condiție adevărată:

#include <iostream>
using namespace std;

int main() {
    int nota;
    cin >> nota;

    if (nota == 10) {
        cout << "Perfect!" << endl;
    } else if (nota >= 9) {
        cout << "Foarte bine" << endl;
    } else if (nota >= 7) {
        cout << "Bine" << endl;
    } else if (nota >= 5) {
        cout << "Suficient" << endl;
    } else {
        cout << "Insuficient" << endl;
    }
    return 0;
}
Observația-cheie

La if-else if-else, condițiile se evaluează de sus în jos și execuția se oprește la primul true. Ordinea contează: pune condițiile mai restrictive primele. Dacă pui nota >= 5 înainte de nota >= 9, o notă de 9 intră în ramura „suficient" și nu ajunge niciodată la „foarte bine".

if-uri imbricate

Un if în interiorul altui if:

int a, b;
cin >> a >> b;

if (a > 0) {
    if (b > 0) {
        cout << "Ambele pozitive" << endl;
    } else {
        cout << "Doar a pozitiv" << endl;
    }
} else {
    cout << "a nu e pozitiv" << endl;
}
Indiciu

Dacă ajungi la 4–5 niveluri de if imbricate, codul devine greu de citit și de depanat. De cele mai multe ori poți combina condițiile cu && sau || și reduce imbricarea la 1–2 niveluri.

Complexitate

if/else costă O(1) — evaluează condiția o singură dată.

Greșeli frecvente

Greșeala 1: Scrii = în loc de == în condiție. if (x = 5) atribuie 5 lui x (nu compară!) și condiția e mereu true. Compilatorul poate avertiza, dar nu refuză compilarea.

Greșeala 2: Omiți { } când ai mai multe instrucțiuni după if. Fără acolade, if (cond) instr1; instr2;instr2 se execută indiferent de condiție. Pune mereu acolade când corpul are mai mult de o instrucțiune.

Greșeala 3: Pui condițiile în ordinea greșită la else if. Dacă ai if (x > 0) ... else if (x > 5), ramura cu x > 5 nu e atinsă niciodată — orice număr mai mare ca 5 intră deja în x > 0. Pune condițiile mai specifice (restrictive) primele.

Întrebarea 1 / 3

Ce afișează codul: int x=4; if(x%2==0) cout<<"par"; else cout<<"impar";