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.
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.
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.
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.
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!).
Reține
if alege o ramură, while repetă cât timp condiția e adevărată, iar for (inițializare; condiție; pas) este un while scris compact. Urmărește variabilele pas cu pas: cu i pornind de la 1, i < 4 face 3 pași, iar i <= 4 face 4.
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.