Vezérlőpult
C6. Ciklusok egymásba ágyazása · Vezérlési szerkezetek

C blokk · Vezérlési szerkezetek · 6. tananyag — a blokk tananyagának zárása

Ciklusok egymásba ágyazása; break és continue

Ha egy ciklus egy sort rajzol, akkor egy ciklusba tett ciklus egy egész táblázatot: sorok kívül, oszlopok belül. A Mastermind táblája, a szorzótábla, a sakktábla — mind ezzel készül. És két kis kulcsszó is jár mellé: a break (elég volt, kilépek) és a continue (ezt a kört kihagyom).

1 tanórasorok × oszlopokbreak · continue

Tanulási célok

1Ciklus a ciklusban

Rajzoljunk 4×8-as csillagnégyzetet! Egy sort már tudunk (C4) — a sorokat egy külső ciklus ismétli:

for (int sor = 1; sor <= 4; sor++)
{
    for (int oszlop = 1; oszlop <= 8; oszlop++)
    {
        Console.Write("★");
    }
    Console.WriteLine();        // a sor vége — a KÜLSŐ ciklus dolga
}

A működés kulcsa: a belső ciklus a külső minden körére teljesen lefut. A külső 4 köre alatt a belső 4×8 = 32-szer futott — a törzs összesen ennyiszer hajtódott végre.

2Minták: amikor a belső határ a külsőtől függ

A háromszög trükkje egyetlen apróság: a belső ciklus határa nem állandó, hanem a külső változó:

for (int sor = 1; sor <= 5; sor++)
{
    for (int oszlop = 1; oszlop <= sor; oszlop++)   // ← eddig: a sor számáig!
    {
        Console.Write("★");
    }
    Console.WriteLine();
}
★
★★
★★★
★★★★
★★★★★

Az 1. sorban 1 csillag, az 5.-ben 5 — a belső ciklus mindig pontosan annyit fut, amennyit az aktuális sor kér.

És a teljes szorzótábla — az igazított formázással (B5) egy karakternyi csúszás sincs:

for (int i = 1; i <= 10; i++)
{
    for (int j = 1; j <= 10; j++)
    {
        Console.Write($"{i * j,5}");
    }
    Console.WriteLine();
}

3break és continue: a ciklusok finomhangolói

break — azonnal kilép a (legbelső) ciklusból. Tipikus eset: keresés, ahol az első találat után felesleges tovább menni. Például prímteszt:

Console.Write("Szám: ");
int szam = int.Parse(Console.ReadLine());
bool prim = szam >= 2;

for (int oszto = 2; oszto < szam; oszto++)
{
    if (szam % oszto == 0)
    {
        prim = false;
        break;              // találtunk osztót — kár tovább nézni
    }
}

Console.WriteLine(prim ? "prím" : "nem prím");

(A ? : a feltételes kifejezés — a C1-es if–else egysoros rokona értékadáshoz; itt találkozunk vele először, bónuszként.)

continue — a kör hátralévő részét átugorja, és jön a következő kör. Tipikus eset: szűrés.

for (int i = 1; i <= 10; i++)
{
    if (i % 3 == 0)
    {
        continue;           // a 3-mal oszthatókat kihagyjuk
    }
    Console.Write($"{i} ");
}
// 1 2 4 5 7 8 10
⚠️ A SWITCH BREAK-JE NEM A CIKLUSÉ

A C5-ös visszatérő menüben a case-ek break-je csak a switchből lép ki — a do-while megy tovább. Pont ezért működik a menü! A ciklusból a záró feltétel (vagy egy ciklusszintű break) visz ki.

break, continue — vagy egyik sem?

Keresés → break, szűrés → continue, teljes bejárás → egyik sem.

1 / 8Pontszám: 0
…

5Gyakori hibák

TünetMi történt?Mit tegyél?
a mintában sokkal több csillag van, mint kellenea belső ciklus is a külső változóját lépteti/használjakülön változó: sor és oszlop (vagy i, j)
minden egy sorba kerülrossz helyen van a WriteLinebetű: belső Write; soremelés: a belső ciklus UTÁN
a háromszög négyzet letta belső határ állandó maradta belső feltételbe a külső változó kell (oszlop <= sor)
a break a menüt is bezárja — vagy épp nem lép ki a ciklusbóla switch-break és a ciklus-break keveredetta case-break csak a switchből lép ki; a ciklusból a záró feltétel visz ki
continue után végtelen whilea léptetés a continue mögött maradtwhile-ban a continue elé kerüljön a léptetés — vagy használj for-t
a belső ciklus csak egyszer futa belső inicializálás a ciklusok ELŐTT vana belső int oszlop = 1 a belső fejben legyen — minden külső körben újraindul
CS0136 a változónévrea belső ciklus is i nevű változót deklarála belső kapjon másik nevet (j)

6Gyakorlat — a Mintagyár

  1. Új projekt: Console App, név: MintaGyar, .NET 10 + Konzol.cs.
  2. Építsd fel a 4. szakasz keretes menüjét, és tedd visszatérővé (C5: do-while + switch).
  3. Menüpontok: négyzet és háromszög — mindkettő kérje be makacs beolvasással a méretet (1–20 közé essen), majd rajzoljon dupla ciklussal.
  4. Bónusz menüpont: szorzótábla — a 2. szakasz 10×10-es táblája.
  5. Tesztelj: méret-határok, rossz bevitel, kilépés kis- és nagybetűvel.
  6. Commit: Mintagyar: beagyazott ciklusok es menu.
✅ ELLENŐRZŐ PONT

A menü kilépésig ismétlődik; a minták mérete a felhasználótól jön és hibatűrő; a háromszög tényleg háromszög.

7Feladatok

Gyakorló feladatok

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

C6.1⭐

Téglalap: kérd be a szélességet és a magasságot (makacs beolvasással), és rajzolj csillagokból téglalapot.

C6.2⭐⭐

Fordított háromszög: 5 csillagtól 1-ig fogyó sorok — a belső határ most lefelé kövesse a külsőt.

C6.3⭐⭐

Sakktábla: 8×8-as minta ▓ és ░ karakterekből — ott ▓, ahol a sor és az oszlop összege páros (C1 + %).

C6.4⭐⭐

Prímek sora: írd ki 2-től 50-ig a prímeket — kívül a jelöltek ciklusa, belül a 3. szakasz osztókeresője break-kel.

C6.5⭐⭐⭐

Számpiramis: rajzolj piramist, amelyben az n. sorban 1-től n-ig, majd vissza 1-ig állnak a számok (pl. 3. sor: 1 2 3 2 1) — gondold végig, hány belső ciklus kell egy sorhoz!

8Önellenőrző kvíz

Ellenőrizd magad!

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

9Fogalomtár

FogalomJelentés
beágyazott ciklusciklus egy másik ciklus törzsében — sorok kívül, oszlopok belül
külső / belső ciklusa belső a külső MINDEN körére teljesen lefut (n×m törzsfutás)
breakazonnali kilépés a legbelső ciklusból (keresés: az első találat után elég)
continuea kör hátralévő részének átugrása — jön a következő kör (szűrés)
feltételes kifejezés (? :)egysoros if–else értékadáshoz: feltetel ? ha_igaz : ha_hamis
menürajzoláskeret + menüpontok ciklussal kirajzolva, visszatérő menübe ágyazva

10Összegzés — és a C blokk tananyagának zárása

  1. A beágyazott ciklus a táblázatok és minták eszköze: a belső a külső minden körére teljesen lefut.
  2. A minták kulcsa gyakran az, hogy a belső határ a külső változótól függ (háromszög: oszlop <= sor).
  3. break = elég volt (keresés), continue = ezt kihagyom (szűrés) — mindkettő csak a legbelső ciklusra hat, és mértékkel szép.
  4. A switch break-je nem a ciklusé — ezért működik a visszatérő menü.
  5. A C blokk tananyaga ezzel teljes: a programjaid döntenek (if, switch), ismételnek (for, while, do-while), és mindezt egymásba építve menüket, mintákat, játékokat rajzolnak. A D blokkban ezt a tudást metódusokba rendezzük — hogy a növekvő kódunk áttekinthető maradjon.