Structura alternativă 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.
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
#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.
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ă
#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.
Echivalent cu while-ul de mai sus: inițializare; condiție; pas.
Exemplu rezolvat
Ce afișează?
#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.
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
while (i = 5)în loc de==: atribuirea face condiția mereu adevărată (5 e nenul), buclă infinită.- Uitarea pasului (
i++) în while: buclă infinită. - Off-by-one:
i < 4face 3 pași,i <= 4face 4; numără-i pe hârtie.