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:
conditieeste o expresie care poate avea valoareatruesaufalse;- 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:
- verifică dacă
varsta >= 10; - dacă rezultatul este
true, afișează mesajul; - 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
ifnu 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:
PromovatExplicaț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) // GRESITCorect:
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ătruesaufalse, î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 deif (a == 3), instrucțiunile dinifvor fi executate mereu, iar variabilaava avea valoarea3.
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 imparVerificare notă citită de la tastatură
int nota;
cin >> nota;
if (nota >= 5) {
cout << "Admis";
} else {
cout << "Respins";
}Input:
4Output:
RespinsCe să reții
- Instrucțiunea
ifeste folosită pentru a lua decizii. - Condiția trebuie să fie
truesaufalse. - Codul dintre
{ }se execută doar dacă condiția este adevărată. elseeste opțională și se execută atunci când condiția este falsă.ifeste 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