Instrucțiunea for
Instrucțiunea for este una dintre cele mai
folosite structuri din programare. Ea apare foarte des atunci
când vrem să lucrăm cu numere,
intervale sau pași clari.
Deși while și do while ne permit
deja să repetăm instrucțiuni, for vine cu un
avantaj important: > toate informațiile despre
repetare sunt scrise într-un singur loc.
De ce avem nevoie de
for?
Să ne gândim la o situație simplă:
- vrem să afișăm numerele de la 1 la 10;
- știm exact de unde începem;
- știm exact unde ne oprim;
- știm că avansăm cu +1.
Într-o astfel de situație, for este alegerea
naturală.
Forma generală a
instrucțiunii for
for (initializare; conditie; modificare) {
instructiuni;
}Această linie spune tot ce trebuie:
- initializare - de unde pornim;
- conditie - cât timp continuăm;
- modificare - cum trecem la pasul următor.
Un exemplu foarte simplu
int i;
for (i = 1; i <= 5; i++) {
cout << i << endl;
}Ce se întâmplă aici:
ipornește de la 1;- se verifică dacă
i <= 5; - se afișează valoarea;
icrește cu 1;- pașii se repetă.
Cum ar arăta
același lucru cu while
int i = 1;
while (i <= 5) {
cout << i << endl;
i++;
}Observăm că:
- trebuie să scriem mai mult cod;
- există riscul să uităm
i++; - logica este împărțită în mai multe locuri.
Diferența dintre
for și while
for |
while |
|---|---|
| Ideal când știm numărul de pași | Ideal când nu știm exact câți pași |
| Totul este într-o singură linie | Logica este împărțită |
| Mai ușor de citit | Mai flexibil |
| Foarte folosit la numărări | Foarte folosit la condiții |
Exemple utile cu
for
Afișarea numerelor pare între 1 și 10
int i;
for (i = 2; i <= 10; i = i + 2) {
cout << i << " ";
}Output:
2 4 6 8 10Afișarea numerelor de la 10 la 1
int i;
for (i = 10; i >= 1; i--) {
cout << i << " ";
}Output:
10 9 8 7 6 5 4 3 2 1Afișarea unui mesaj de mai multe ori
int i;
for (i = 1; i <= 3; i++) {
cout << "Invat C++!" << endl;
}Output:
Invat C++!
Invat C++!
Invat C++!Calcularea sumei numerelor de la 1 la n
int n, i;
cin >> n;
int suma = 0;
for (i = 1; i <= n; i++) {
suma = suma + i;
}
cout << suma;Input:
10Output:
55Calcularea produsului numerelor de la 1 la n
int n, i;
cin >> n;
int produs = 1;
for (i = 1; i <= n; i++) {
produs = produs * i;
}
cout << produs;Input:
5Output:
120Încearcă și tu
Completează codul de mai jos astfel încât, în urma executării
datelor de intrare din Input, să se afiseze datele
din Output.
Input:
20Output:
20 10 5 2 1Atenție la acolade
{ }
La fel ca și în cazul instrucțiunilor if și
while, dacă avem mai mult de o instrucțiune în
interiorul buclei, acoladele sunt
obligatorii.
int suma = 0, i;
for (i = 1; i <= 5; i++) {
cout << i << " ";
suma = suma + i;
}
cout << endl << suma;Output:
1 2 3 4 5
15Greșeli frecvente
1. Buclă infinită
int i;
for (i = 1; i <= 5; i--) // GREȘITValoarea lui i scade, iar condiția rămâne mereu
adevărată.
int i;
for (i = 1; i <= 5; i++) {
if (i % 2 == 1)
i--; // GREȘIT
}Valoarea lui i va rămane blocată cu valoarea
1
2. Condiție greșită
int i;
for (i = 1; i == 5; i++) // GREȘITBucla nu se execută niciodată.
Când alegem for?
Alege for atunci când:
- numeri;
- știi exact numărul de pași;
- parcurgi intervale;
- faci calcule repetitive;
- pui accent pe repetiție și nu pe condiție;
- ai un pas constant;
Ce să reții
forare trei componente: inițializare, condiție, pas.- Este ideal când știm exact câte repetări facem.
- Suma se inițializează cu
0, produsul cu1. - Atenție la buclele infinite (pasul greșit).
- Acoladele sunt obligatorii dacă avem mai multe instrucțiuni în buclă.