Bazele programării în C++

Structuri repetitive în C++: for, while, do while

Învață structurile repetitive for, while și do while în C++. Urmărește suma pas cu pas, testează cazurile de margine și evită buclele infinite.

O structură repetitivă execută același bloc de instrucțiuni de mai multe ori. În loc să scrii zece afișări aproape identice, descrii regula de repetare. Condiția de continuare și schimbarea valorilor trebuie să conducă, la momentul potrivit, la oprire.

Parcurge mai întâi structura de decizie. În această lecție vei compara for, while și do while și vei calcula o sumă.

For: un număr cunoscut de pași

Programul următor citește n, cu 0 <= n <= 1000, și afișează suma numerelor de la 1 la n.

#include <iostream>

int main() {
    int n = 0;
    std::cin >> n;
    long long suma = 0;
    for (int i = 1; i <= n; ++i) {
        suma = suma + i;
    }
    std::cout << suma << '\n';
    return 0;
}

Pentru n = 4, rezultatul este 10. Inițializarea int i = 1 se execută o singură dată. Înaintea fiecărei repetări se verifică i <= n. Dacă este adevărată, se execută corpul, apoi ++i mărește contorul cu unu. Urmează o nouă verificare.

Urmărirea pentru n = 4 este: după adăugarea lui 1, suma este 1; după 2, devine 3; după 3, devine 6; după 4, devine 10. Contorul ajunge la 5, condiția este falsă și bucla se încheie.

Pentru n = 0, condiția 1 <= 0 este falsă de la început. Corpul nu se execută deloc și suma rămâne 0. Acesta este un test de margine util.

Pentru n egal cu 4, suma evoluează 0, 1, 3, 6, 10. După ultima incrementare i este 5, iar condiția 5 mai mic sau egal cu 4 este falsă.Bucla for, urmărită instrucțiune cu instrucțiune pentru n = 4.O singură rulare · 21 secunde

While: verifici înainte de fiecare pas

#include <iostream>

int main() {
    int n = 0;
    std::cin >> n;
    int i = 1;
    long long suma = 0;
    while (i <= n) {
        suma += i;
        ++i;
    }
    std::cout << suma << '\n';
    return 0;
}

Pentru aceeași intrare, acest program produce aceeași sumă. Inițializarea și modificarea contorului sunt scrise separat. suma += i este forma scurtă folosită aici pentru suma = suma + i.

Dacă uiți ++i, iar condiția era adevărată, contorul rămâne neschimbat și bucla nu mai progresează spre oprire. La fiecare buclă, identifică explicit ce valoare se schimbă și de ce condiția va deveni falsă.

Pentru n egal cu 0 și i egal cu 1, condiția buclei while este falsă de la început. Corpul nu se execută, suma rămâne 0.Cazul n = 0 arată de ce while poate sări complet peste corp.O singură rulare · 6 secunde

Do while: corpul se execută cel puțin o dată

#include <iostream>

int main() {
    int i = 1;
    do {
        std::cout << i << '\n';
        ++i;
    } while (i <= 3);
    return 0;
}

Programul afișează 1, 2, 3 pe linii separate. Verificarea este după corp. Dacă i ar începe de la 5, corpul s-ar executa tot o dată, ar afișa 5, apoi condiția ar opri repetarea. Observă punctul și virgula de după while (i <= 3);: el face parte din această structură.

Alege forma care descrie mai clar problema. for este convenabil pentru un contor cu pași cunoscuți; while pentru repetare până la îndeplinirea unei condiții; do while când prima execuție este obligatorie.

Cu i inițial egal cu 5, do while afișează 5 și crește i la 6 înainte să verifice condiția i mai mic sau egal cu 3. Corpul se execută o dată.Aceeași ordine de instrucțiuni, cu i pornind de la 5.O singură rulare · 7 secunde

Erori de limită și acumulare

În primul program, înlocuirea lui i <= n cu i < n ar omite termenul n. Schimbarea punctului de pornire poate introduce sau elimina un termen. Testele cu n = 0, 1 și 2 fac aceste erori mai ușor de observat decât un test mare.

Inițializează suma înaintea buclei, nu în interiorul ei. Altfel, la fiecare pas ai pierde acumularea anterioară. Pentru un produs, valoarea inițială este în mod obișnuit 1, nu 0, iar limitele trebuie alese astfel încât rezultatul să încapă în tip.

Nu pune ; după antetul unui for sau while obișnuit: poți crea accidental o buclă cu corp gol. Pentru primele probleme evită să modifici același contor în mai multe locuri.

Cât lucru face programul

La suma de la 1 la n, corpul se execută de n ori pentru n natural. Numărul de pași crește proporțional cu n, ceea ce notăm O(n). Sunt folosite doar câteva variabile, indiferent de n, deci memoria suplimentară este O(1).

Există și formula n * (n + 1) / 2, dar scopul exemplului este să înțelegi repetarea. În probleme ulterioare vei compara soluțiile și vei alege în funcție de limite.

Exersează

  1. Ce sume obții pentru n = 0, 1 și 5?
  2. Modifică primul program pentru suma numerelor pare de la 1 la n.
  3. Afișează numerele de la n la 1, în ordine descrescătoare.
  4. De ce un produs inițializat cu zero rămâne zero?

Răspunsuri: 0, 1, 15; poți porni contorul de la 2 și folosi pasul i += 2; pentru numărarea descrescătoare pornești de la n, verifici i >= 1 și folosești --i; orice număr înmulțit cu zero produce zero.

Continuă cu sume, produse și numărări. Revino la cuprinsul de bază când ai nevoie să recapitulezi citirea, condițiile sau expresiile.

Un pas mai departe

Se încarcă progresul…

Exersează cu o problemă →