Vezérlőpult
C4. A for ciklus · Vezérlési szerkezetek

C blokk · Vezérlési szerkezetek · 4. tananyag

Előírt lépésszámú ismétlés: a for

Az A8 három alapszerkezetéből kettő már a miénk: a szekvencia és a szelekció (C1–C3). Ma jön a harmadik, az iteráció: amit eddig 100 sorban másolgattál volna, azt a gép ismétli meg helyetted — pontosan annyiszor, ahányszor mondod.

2 tanórafor · ciklusváltozóakkumulátor-minta

Tanulási célok

1A harmadik alapszerkezet: az iteráció

Írd ki a számokat 1-től 10-ig! Eddig ezt csak így tudtad volna:

Console.WriteLine(1);
Console.WriteLine(2);
// … még 8 sor másolás …

10-ig még megy. És 1000-ig? A ciklus (iteráció) pontosan erre való: egy kódrészletet többször futtat le. A for ráadásul számol is közben:

for (int i = 1; i <= 10; i++)
{
    Console.WriteLine(i);
}

Négy sor — és ha 1000-ig kell, csak egyetlen számot írsz át. Ez a programozás egyik legnagyobb találmánya: a gép ismétel, nem te.

2A for anatómiája

for (int i = 0; i < 10; i++)
{
    // ciklustörzs — ez ismétlődik
}

A fejben három rész, pontosvesszőkkel elválasztva:

RészPéldaMikor fut?
inicializálásint i = 0egyszer, legelőször
feltételi < 10minden kör ELŐTT — ha hamis, vége
léptetési++minden kör UTÁN
hamis kilépés: a program a } után folytatódik int i = 0 1× — legelőször i < 10 ? minden kör előtt igaz a törzs lefut i++ minden kör után újra a feltétel

Fontos: a feltétel belépési feltétel — ha már az elején hamis (for (int i = 10; i < 1; i++)), a törzs egyszer sem fut le.

ℹ️ 0-TÓL VAGY 1-TŐL?

Embernek az 1-től N-ig természetes (i = 1; i <= 10), a programozásban mégis gyakoribb a 0-tól N−1-ig (i = 0; i < 10) — az E blokk tömbjei 0-tól számozódnak, ezért érdemes már most mindkettőt megszokni. Mindkettő pontosan 10 kör!

Hányszor fut le a törzs?

Számold ki fejben: első kör, utolsó kör — a határokon dől el minden.

1 / 8Pontszám: 0
…

3A ciklusváltozó a tiéd

A ciklusváltozó nem csak számláló — a törzsben használhatod:

// lefelé számolás
for (int i = 10; i >= 1; i--)
{
    Console.WriteLine($"{i}…");
}
Console.WriteLine("Start!");

// kettesével: csak a párosak
for (int i = 2; i <= 20; i += 2)
{
    Console.Write($"{i} ");
}

4Az akkumulátor-minta: a ciklus emlékezete

A ciklus körei önmagukban nem emlékeznek egymásra — ehhez egy cikluson kívüli változó kell, amelybe körönként gyűjtünk. Ez az akkumulátor-minta, és mostantól mindenhol ott lesz:

int osszeg = 0;                     // az akkumulátor — a ciklus ELŐTT

for (int i = 1; i <= 100; i++)
{
    osszeg += i;                    // minden körben hozzáteszünk
}

Console.WriteLine($"1-től 100-ig az összeg: {osszeg}");   // 5050
ℹ️ A KIS GAUSS

A legenda szerint a 8 éves Carl Friedrich Gauss másodpercek alatt adta össze a számokat 1-től 100-ig: észrevette, hogy 1+100 = 2+99 = … = 101, és 50 ilyen pár van. A tanára megdöbbent. A mi ciklusunk nem ilyen elegáns — de bármilyen felsorolásra működik, nem csak a szépekre.

Számlálás feltétellel — a C1 és a C4 kéz a kézben:

int parosDarab = 0;

for (int i = 1; i <= 20; i++)
{
    if (i % 2 == 0)
    {
        parosDarab++;
    }
}

Console.WriteLine($"1 és 20 között {parosDarab} páros szám van.");

Az átlaghoz mindkettő kell: összeg IS, darab IS — és a végén egy osztás (vigyázat, egészosztás: B3!).

5Táblázat és keret: a ciklus a gyakorlatban

Szorzótábla-sor, igazított oszlopokkal (B5):

for (int i = 1; i <= 10; i++)
{
    Console.WriteLine($"{i,2} × 7 = {i * 7,3}");
}

És a B8-ban kézzel rajzolt keret végre bármilyen hosszú névhez illeszkedik:

Console.Write("╔");
for (int i = 0; i < nev.Length + 2; i++)
{
    Console.Write("═");
}
Console.WriteLine("╗");

A Write (soremelés nélkül) + ciklus párosa a sorminták kulcsa: a ciklus egy soron belül is ismételhet.

(Van ennél rövidebb út is — az I blokk segédosztályai között találkozunk vele. Addig építjük magunk: pont így értjük meg, mi történik.)

6Gyakori hibák

TünetMi történt?Mit tegyél?
a ciklus egyszer sem fut lea feltétel már az elején hamis (i = 10; i < 1)ellenőrizd a kezdőértéket és az irányt
eggyel többször/kevesebbszer fut (off-by-one)< és <= keveredettszámold ki fejben az első ÉS az utolsó kört
a ciklus „nem áll meg”a léptetés rossz irányba megy (i-- helyett i++)a feltételnek egyszer hamissá KELL válnia
CS0103: The name 'i' does not exist… a ciklus utána ciklusváltozó csak a cikluson belül élha utána is kell, deklaráld a ciklus előtt
a blokk csak egyszer fut lepontosvessző a fej után: for (…);a for után nincs ; — a C1-es if-hiba rokona!
furcsa, pontatlan körszámokdouble ciklusváltozó (i += 0.1)a B3-as pontatlanság — számolj int-tel, oszd a törzsben
a ciklus összevissza ugrála törzsben is módosítod a ciklusváltozóta léptetés helye a fej — a törzsben csak olvasd az i-t

7Gyakorlat — számsor-elemző

  1. Új projekt: Console App, név: SzamsorElemzo, .NET 10 + Konzol.cs.
  2. Kérd be TryParse-szal, meddig fusson a vizsgálat (N) — hibás vagy 1-nél kisebb értékre piros hibaüzenet és vége (C3-as őrfeltétel!).
  3. Írd ki a számokat 1-től N-ig úgy, hogy a párosak zölden, a páratlanok alapszínnel jelenjenek meg (C1 + B8 a ciklusban).
  4. Közben akkumulálj: összeg, páros darab — a végén írd ki az összeget, a párosok számát és az átlagot (két tizedessel; figyelj az egészosztásra!).
  5. Commit: Szamsor-elemzo: elso for ciklusunk.
✅ ELLENŐRZŐ PONT

N=10-re az összeg 55, a párosok száma 5, az átlag 5,50; hibás bevitelre a program szépen szól és nem áll le.

8Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

C4.1⭐

Visszaszámlálás: 10-től 1-ig írd ki a számokat, a végén „Start!” — zölddel.

C4.2⭐

Csillagsor: kérd be, hány csillagból álljon a sor, és írd ki egyetlen sorba (Write): ★★★★★★

C4.3⭐⭐

Szorzótábla: kérd be, melyik szám szorzótábláját kéred, és írd ki 1-től 10-ig, szépen igazított oszlopokkal.

C4.4⭐⭐

Osztóvadász: kérj be egy számot, és írd ki az összes osztóját (1-től önmagáig, % + if), a végén az osztók darabszámát. Ellenőrzés: a 12-nek 6 osztója van.

C4.5⭐⭐⭐

Illeszkedő keret: kérd be a felhasználó nevét, és rajzolj köré pontosan illeszkedő box-drawing keretet (a B8.2-es feladat — de most már ciklussal, bármilyen hosszú névre). A keret színe legyen cián.

9Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

10Fogalomtár

FogalomJelentés
iterációismétlés: egy kódrészlet többszöri lefuttatása — a harmadik alapszerkezet
forelőírt lépésszámú ciklus: akkor, ha előre tudjuk, hányszor kell ismételni
ciklusfeja for három része: inicializálás; feltétel; léptetés
ciklustörzsa { } közti rész — ez ismétlődik
ciklusváltozóa fejben született számláló (i) — csak a ciklusban él
belépési feltételminden kör előtt kiértékelődik — ha már elsőre hamis, a törzs egyszer sem fut
akkumulátorcikluson kívüli gyűjtőváltozó (összeg, darabszám) — a ciklus „emlékezete”
off-by-oneeggyel elcsúszott körszám — a </<= határok tipikus hibája

11Összegzés

  1. Az iterációval teljes a hármas: szekvencia, szelekció, ismétlés — ennyiből épül fel minden program.
  2. A for fej három része: inicializálás; feltétel; léptetés — a feltétel minden kör előtt, a léptetés minden kör után.
  3. A ciklusváltozó a törzsben használható, de csak a ciklusban él — és a törzsben nem módosítjuk.
  4. Az akkumulátor-minta (gyűjtőváltozó a ciklus előtt) adja a ciklus emlékezetét: összeg, számlálás, átlag.
  5. A határokat mindig fejben teszteld: első kör, utolsó kör — az off-by-one a ciklusok leggyakoribb hibája.
  6. Ami hiányzik: mi van, ha NEM tudjuk előre a lépésszámot? („Addig kérdezz, amíg…”) — pontosan ez a következő fejezet.