Pamoka 4

Ciklai ir kartojimas

~35 min · 1 žingsnis · 4 / 6 pamokų
Ką pastatysi
Kartojimas — trečias blokas

Kompiuteriai puikiai kartoja tą patį veiksmą tūkstančius kartų be klaidų. Kartojimo (ciklo) principas yra trečias ir paskutinis struktūrinio programavimo blokas. Su trimis blokais — eilės tvarka, pasirinkimu ir kartojimu — gali sukurti bet kokią programą.


while ciklas

while kartoja bloką tol, kol sąlyga teisinga:

#include <stdio.h>

int main(void) {
    int i = 1;
    while (i <= 5) {
        printf("%d\n", i);
        i = i + 1;   // svarbu! kitaip ciklas niekada nesibaigs
    }
    return 0;
}

Išvestis: skaičiai nuo 1 iki 5. Trys dalys:

  1. Pradinė reikšmėint i = 1;
  2. Sąlygai <= 5 (tikrinama prieš kiekvieną kartojimą)
  3. Pakeitimasi = i + 1; (kitaip sąlyga niekada netaps klaidinga)

Begalinis ciklas. Jei pamirši i = i + 1, sąlyga visada liks teisinga ir programa „pakibs". Stabdyk su Ctrl+C.


for ciklas

for sujungia tris dalis į vieną eilutę — patogu, kai žinai, kiek kartų kartoti:

for (int i = 1; i <= 5; i++) {
    printf("%d\n", i);
}

Skliaustuose: pradinė reikšmė; sąlyga; pakeitimas. i++ yra trumpinys vietoj i = i + 1.

Šis for daro tą patį, ką ankstesnis while — tik kompaktiškiau.


Pavyzdys: suma

Suskaičiuokim skaičių nuo 1 iki 100 sumą:

int suma = 0;
for (int i = 1; i <= 100; i++) {
    suma = suma + i;
}
printf("Suma: %d\n", suma);   // 5050

Pastebėk, kaip ciklas ir kintamasis suma dirba kartu: kiekvienas kartojimas prideda po vieną skaičių.


break ir continue

  • break — nedelsiant nutraukia ciklą.
  • continue — praleidžia likusią kartojimo dalį ir pereina prie kito.
for (int i = 1; i <= 10; i++) {
    if (i == 5) break;        // sustok ties 5
    if (i % 2 == 0) continue; // praleisk lyginius
    printf("%d\n", i);         // spausdina 1, 3
}

Trikčių sprendimas

Programa pakimba — begalinis ciklas. Patikrink, ar sąlyga kada nors taps klaidinga. Stabdyk su Ctrl+C.

Ciklas kartoja vienu kartu per mažai ar daug — atidžiai patikrink sąlygą: < ar <=?

Skaitiklis nesikeičiawhile cikle pamiršai i++ ar i = i + 1.


Projektas CLion

Šios pamokos kodą įdėk į savo CLion projektą StructuredC. Žingsnis žemiau rodo pilną main.c turinį po pakeitimo — gali kopijuoti tiesiogiai į CLion ir paspausti žalią ▶ mygtuką.


Apibendrinimas

Išmokai kartoti veiksmus su while ir for, valdyti ciklą su break ir continue. Dabar žinai visus tris struktūrinio programavimo blokus.

Kitoje pamokoje sutvarkysi kodą į funkcijas — daugkartinio naudojimo blokus.

main.c modify

Pakeisk main.c — skaičių suma su ciklu

#include <stdio.h>

int main(void) {
    int n;
    printf("Iki kurio skaiciaus sumuoti? ");
    scanf("%d", &n);

    int suma = 0;
    for (int i = 1; i <= n; i++) {
        suma = suma + i;
    }

    printf("Suma nuo 1 iki %d yra %d.\n", n, suma);
    return 0;
}

Pakeisk visą main.c turinį šiuo kodu. Programa sudės skaičius nuo 1 iki tavo įvesto n.

Ką šis kodas daro:

  • for (int i = 1; i <= n; i++) — ciklas: pradinė reikšmė, sąlyga ir žingsnis vienoje eilutėje.
  • suma = suma + i; — kiekvieną kartojimą prideda dabartinį i.
  • Po ciklo suma turi visų skaičių sumą.

Svarbu: suma turi būti 0 prieš ciklą — kitaip kauptum nuo atsitiktinės reikšmės.