C blokk · Vezérlési szerkezetek · 6. tananyag — a blokk tananyagának zárása
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).
break-et és a
continue-t — és tudod,
mikor ne.break-je nem a
ciklus break-je.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.
sor és oszlop,
vagy i és j) —
a belső a külsőét látja, de nem bánthatja.Write a belső, a
WriteLine a külső ciklus végére kerül:
betűk a soron belül, soremelés a sor végén.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(); }
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 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.
continue while-ban: ha a léptetés a
continue UTÁN áll, átugrod — végtelen
ciklus. For-ban ez nem gond: a léptetés a fejben van.Keresés → break, szűrés → continue, teljes bejárás → egyik sem.
| Tünet | Mi történt? | Mit tegyél? |
|---|---|---|
| a mintában sokkal több csillag van, mint kellene | a belső ciklus is a külső változóját lépteti/használja | külön változó: sor és oszlop (vagy i, j) |
| minden egy sorba kerül | rossz helyen van a WriteLine | betű: belső Write; soremelés: a belső ciklus UTÁN |
| a háromszög négyzet lett | a belső határ állandó maradt | a 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ól | a switch-break és a ciklus-break keveredett | a case-break csak a switchből lép ki; a ciklusból a záró feltétel visz ki |
| continue után végtelen while | a léptetés a continue mögött maradt | while-ban a continue elé kerüljön a léptetés — vagy használj for-t |
| a belső ciklus csak egyszer fut | a belső inicializálás a ciklusok ELŐTT van | a belső int oszlop = 1 a belső fejben legyen — minden külső körben újraindul |
CS0136 a változónévre | a belső ciklus is i nevű változót deklarál | a belső kapjon másik nevet (j) |
MintaGyar, .NET 10 +
Konzol.cs.Mintagyar: beagyazott ciklusok es menu.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.
⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás
Téglalap: kérd be a szélességet és a magasságot (makacs beolvasással), és rajzolj csillagokból téglalapot.
Fordított háromszög: 5 csillagtól 1-ig fogyó sorok — a belső határ most lefelé kövesse a külsőt.
Sakktábla: 8×8-as minta ▓ és ░ karakterekből — ott ▓, ahol a sor és
az oszlop összege páros (C1 +
%).
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.
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!
Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.
| Fogalom | Jelentés |
|---|---|
| beágyazott ciklus | ciklus egy másik ciklus törzsében — sorok kívül, oszlopok belül |
| külső / belső ciklus | a belső a külső MINDEN körére teljesen lefut (n×m törzsfutás) |
break | azonnali kilépés a legbelső ciklusból (keresés: az első találat után elég) |
continue | a 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ás | keret + menüpontok ciklussal kirajzolva, visszatérő menübe ágyazva |
oszlop <= sor).