Sari la conținut
LECȚIA 6.1 · INFORMATICĂ

Structurile if/else și while

Decizii și repetiții: cum gândim condițiile și cum urmărim execuția pas cu pas.

Conținut verificat

Structura alternativă if/else

Structura alternativa if/else
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    if (n % 2 == 0)
        cout << "par";
    else
        cout << "impar";
    return 0;
}

Atenție: In Pascal nu se pune punct si virgula inaintea lui else. Ar inchide instructiunea if si compilatorul nu ar mai sti de cine tine else.

se trimit programului la citire

Condiția din paranteze se evaluează la adevărat sau fals. Pentru mai multe instrucțiuni pe ramură, folosește acolade.

Atenție: egalitatea se testează cu ==; = singur e atribuire și strică logica.

Structura repetitivă while

Structura repetitiva while
#include <iostream>
using namespace std;

int main() {
    int i = 1, s = 0;
    while (i <= 4) {
        s = s + i;
        i = i + 1;
    }
    cout << s;
    return 0;
}

Atenție: Contorul trebuie crescut in interiorul buclei. Daca se uita, conditia ramane mereu adevarata si programul nu se mai opreste.

se trimit programului la citire

Urmărim execuția: s devine 1, apoi 3, apoi 6, apoi 10; la i = 5 condiția pică. Se afișează 10.

for: aceeași idee, compactă

Aceeasi suma, cu for
#include <iostream>
using namespace std;

int main() {
    int s = 0;
    for (int i = 1; i <= 4; i++)
        s += i;
    cout << s;
    return 0;
}

Atenție: Aceeasi suma ca la while, dar for aduna initializarea, conditia si pasul intr-un singur rand. In Python, range(1, 5) merge de la 1 la 4, capatul din dreapta nefiind inclus.

se trimit programului la citire

Echivalent cu while-ul de mai sus: inițializare; condiție; pas.

Exemplu rezolvat

Ce afișează?

Factorialul, iterativ
#include <iostream>
using namespace std;

int main() {
    int n = 3, p = 1;
    while (n > 0) {
        p = p * n;
        n--;
    }
    cout << p;
    return 0;
}

Atenție: Produsul porneste de la 1, nu de la 0. Cu 0 rezultatul ar ramane 0 oricate inmultiri s-ar face.

se trimit programului la citire

Urmărim: pentru n=3, p devine 3; pentru n=2, p devine 6; pentru n=1, p rămâne 6; la n=0 bucla se oprește. Se afișează 6 (adică 3!).

Greșeli frecvente

  1. while (i = 5) în loc de ==: atribuirea face condiția mereu adevărată (5 e nenul), buclă infinită.
  2. Uitarea pasului (i++) în while: buclă infinită.
  3. Off-by-one: i < 4 face 3 pași, i <= 4 face 4; numără-i pe hârtie.