Programare Competitivă

Instrucțiunea if - luarea deciziilor în C++

Până acum, am învățat cum să folosim variabile, cum să facem calcule și cum să verificăm condiții folosind operatori de comparație și logici.
Următorul pas important în programare este să învățăm cum ia calculatorul decizii.

În viața de zi cu zi, luăm decizii tot timpul:

  • dacă plouă, luăm umbrela;
  • dacă este târziu, ne grăbim;
  • dacă avem temele făcute, putem ieși afară.

În programare, calculatorul face exact același lucru, dar folosind instrucțiunea if.


Ce înseamnă if?

Cuvântul if se traduce prin „dacă”.

Ideea de bază este următoarea:

Dacă o condiție este adevărată, atunci calculatorul execută anumite instrucțiuni.

Dacă acea condiție nu este adevărată, instrucțiunile respective nu se execută.


Forma generală a instrucțiunii if

if (conditie) {
    instructiuni;
}

Unde:

  • conditie este o expresie care poate avea valoarea true sau false;
  • instrucțiunile dintre acolade { } se execută doar dacă condiția este adevărată.

Primul exemplu explicat pas cu pas

int varsta = 12;

if (varsta >= 10) {
    cout << "Poti participa la concurs.";
}
Output:
Poti participa la concurs.

Ce face calculatorul:

  1. verifică dacă varsta >= 10;
  2. dacă rezultatul este true, afișează mesajul;
  3. dacă rezultatul este false, nu afișează nimic și trece mai departe.

Ce se întâmplă dacă condiția este falsă?

int varsta = 8;

if (varsta >= 10) {
    cout << "Poti participa la concurs.";
}
Output:

În acest caz:

  • condiția este falsă;
  • instrucțiunea din interiorul lui if nu se execută;
  • programul continuă fără să afișeze nimic.

Instrucțiunea if - else

De multe ori vrem să spunem ce se întâmplă în ambele situații:

  • dacă o condiție este adevărată;
  • dacă o condiție este falsă.

Pentru acest lucru folosim else.

if (conditie) {
    instructiuni_adevarat;
} else {
    instructiuni_fals;
}

Exemplu cu if - else

int nota = 7;

if (nota >= 5) {
    cout << "Promovat";
} else {
    cout << "Respins";
}
Output:
Promovat

Explicație:

  • dacă nota este cel puțin 5 → „Promovat”;
  • altfel → „Respins”.

Operatorii folosiți în condiții

În interiorul condițiilor putem folosi operatori de comparație:

  • == egal
  • != diferit
  • < mai mic
  • > mai mare
  • <= mai mic sau egal
  • >= mai mare sau egal

Exemplu:

int x = 10;

if (x != 0) {
    cout << "Numarul este diferit de zero.";
}
Output:
Numarul este diferit de zero.
Fun fact

Programul nu știe să evalueze direct operațiile <= sau >=.

Pentru a calcula aceste condiții, el neagă operația opusă:

  • a <= b înseamnă !(a > b)
  • a >= b înseamnă !(a < b)

Condiții compuse (operatori logici)

Putem verifica mai multe condiții în același timp.

Operatorul && (și)

int varsta = 12;
bool arePermisiune = true;

if (varsta >= 10 && arePermisiune) {
    cout << "Poti intra.";
}
Output:
Poti intra.

Ambele condiții trebuie să fie adevărate.

Kind reminder - tabelul de adevăr pentru operatorul logic &&
&& 1 0
1 1 0
0 0 0

Operatorul || (sau)

bool esteWeekend = true;
bool esteVacanta = false;

if (esteWeekend || esteVacanta) {
    cout << "Ai timp liber.";
}
Output:
Ai timp liber.

Este suficient ca una dintre condiții să fie adevărată.

Kind reminder - tabelul de adevăr pentru operatorul logic ||
|| 1 0
1 1 1
0 1 0

Operatorul ! (nu)

bool ploua = false;

if (!ploua) {
    cout << "Putem iesi afara.";
}
Output:
Putem iesi afara.

!ploua înseamnă „nu plouă”.


Atenție la acolade { }

Acoladele { } sunt obligatorii atunci când avem mai multe instrucțiuni care trebuie executate în cazul în care condiția din if este adevărată.

Dacă nu folosim acoladele, doar prima instrucțiune de după if / else va fi executată condiționat.

Exemplu

if (x > 0) 
    cout << "Numar pozitiv";
else
    cout << "Numar egal cu 0 sau negativ";

În acest caz, după if și else se află o singură instrucțiune.

Din punct de vedere al limbajului C++, acoladele nu sunt obligatorii atunci când există o singură instrucțiune.

Totuși, este recomandat să folosim acoladele chiar și în această situație, deoarece:

  • codul devine mai ușor de citit;
  • evităm greșeli atunci când adăugăm ulterior alte instrucțiuni;
  • învățăm de la început un stil corect și sigur de programare.

Greșeli frecvente

1. Confuzia dintre = și ==

if (x = 5)   // GRESIT

Corect:

if (x == 5)

Această greșeală este foarte întâlnită la începători, deoarece nu înțeleg diferența dintre = și ==.

  • = reprezintă atribuire, adică atribuie unei variabile o valoare.
  • == reprezintă egalitate, adică verifică dacă două valori sunt egale și returnează true sau false, în funcție de caz.

Hint: Într-o condiție if nu se folosește niciodată =, deoarece if verifică o condiție, nu face atribuiri.

Explicație mai avansată

În C++, starea de false este reprezentată de valoarea 0.

Deoarece știm că true este opusul lui false, rezultă că true poate fi reprezentat de orice valoare diferită de 0.

Drept urmare, dacă scriem un program de tipul:

int a = 17; 
if (a)
cout << "Condiție adevărată";
else
cout << "Condiție falsă";
Output:
Condiție adevărată

Deoarece a este diferit de 0, condiția este adevărată.

Acum că am lămurit acest lucru, haideți să aflăm ce se întâmplă dacă scriem if (a = 3) în loc de if (a == 3).

Programul verifică ce se află în paranteze și execută operația respectivă. Deoarece este folosit =, variabila a primește valoarea 3. Apoi, pentru că instrucțiunea if are nevoie de un rezultat de tip true sau false, este verificată valoarea obținută, care este echivalentă cu if (3).

Deoarece 3 este diferit de 0, condiția este adevărată, iar programul execută instrucțiunile din interiorul lui if.

Cu alte cuvinte, dacă scriem if (a = 3) în loc de if (a == 3), instrucțiunile din if vor fi executate mereu, iar variabila a va avea valoarea 3.


2. Punct și virgulă după if

if (x > 0);  // GRESIT
{
    cout << "Pozitiv";
}

După instrucțiunea if nu punem niciodată ;.

Această greșeală este foarte periculoasă, deoarece este greu de depistat și poate strica întreaga logică a programului.


Exemple practice

Număr par sau impar

int x = 7;

if (x % 2 == 0) {
    cout << "Numar par";
} else {
    cout << "Numar impar";
}
Output:
Numar impar

Verificare notă citită de la tastatură

int nota;
cin >> nota;

if (nota >= 5) {
    cout << "Admis";
} else {
    cout << "Respins";
}
Input:
4
Output:
Respins

Ce să reții

  • Instrucțiunea if este folosită pentru a lua decizii.
  • Condiția trebuie să fie true sau false.
  • Codul dintre { } se execută doar dacă condiția este adevărată.
  • else este opțională și se execută atunci când condiția este falsă.
  • if este una dintre cele mai importante instrucțiuni din programare.
  • Acum că ai învățat instrucțiunea if, nu va trece nicio zi fără să o folosești =D

Probleme

pbinfoParitate

pbinfoMax2

pbinfoNota

pbinfoConcurs1

pbinfoBacterie