Programozási alapismeretek
Algoritmus ciklusok
Az algoritmus ciklusok arra szolgálnak, hogy ne kelljen ugyanazt a műveletsort újra és újra leírnunk, hanem a számítógép ismételje meg helyettünk.
A programozásban három alapvető ciklus típust különböztetünk meg: számlálós, elöltesztelős és hátultesztelős ciklusokat. Ezek mind segítenek abban, hogy hatékony, rövid és jól átlátható programokat írjunk.
Ciklustípusok
A programozásban többféle ciklus létezik – attól függően, hogy előre tudjuk-e, hányszor kell ismételni az utasításokat, vagy csak futtatás közben derül ki, mikor kell megállni. Nézzük a három fajtáját:
1. Számlálós ciklus(for)
Lényege: pontosan meghatározzuk, hányszor fusson le a ciklus. Előre tudjuk, hogy „n” számú ismétlés kell👉 Példa:
Ciklus i := 1-től 10-ig egyesével
KI: i
Ciklus vége
2. Elöltesztelős ciklus (while)
Lényege: addig fut aciklus, amíg a feltétel igaz. Akkor jó, ha nem tudjuk előre, hányszor kell ismételni
👉 Példa:
a := 1
Ciklus amíg a <=10
KI: a
a := a+1
Ciklus vége
3. Hátultesztelős ciklus (do-while)
Lényege: a ciklus legalább egyszer lefut, utána akkor ismétli, ha a feltétel igaz. Tipikus, ha előbb futtatni kell, és csak utána vizsgáljuk a feltételt.
👉 Példa:
a := 1
Ciklus
KI: a
a := a+1
Amíg a <= 10
Mini példák - pszeudókóddal
1. Számoljunk 1-től 10-ig!
Írj pszeudókódot, ami az algoritmus ciklusok segítségével kiírja az 1 ... 10 számokat egymás után
A megoldáshoz kattints ide
Ciklus i := 1..10
KI: i
Ciklus vége
Magyarázat: a számlálós ciklusnál az alapértelmezett lépésköz 1.
A := pszeudókódban az értékadás jele
2. Kérj be egy számot (N), majd az algoritmus ciklusok segítségével számold ki az 1-től N-ig terjedő számok összegét! A végén írd ki az összeget.
A megoldáshoz kattints ide
BE: N
i := 1
osszeg := 0
Amíg i <= N
osszeg := osszeg + i
i := 1 + 1
Ciklus vége
KI: "Összeg:", osszeg
Magyarázat:
BE - bekérünk egy számot. Ez lesz a felső határ
i := 1 - elindítjuk a számlálónkat 1-ről. Ezzel fogunk végigsétálni az 1..N tartományon
osszeg := 0 -az induló összeg 0, ide gyűjtjük a részösszegeket
amíg i <=N - előltesztelős ciklus, addig fut, amíg igaz,hogy i nem nagyobb, mint N. Ha rögtön hamis (pl.: N=0), a többi már nem fut le
osszeg := osszeg + i - Hozzáadjuk az aktuális i-t az összeghez (értékadás: jobb oldalt kiszámoljuk, bal oldalt eltesszük)
i := i + 1 - léptetés: továbblépünk a következő számra. Ha ezt kihagyod, végtelen lesz a ciklus
ciklus vége: visszaugrás a feltételhez (i <= N). Ha még igaz, jön a következő kör
KI: "Összeg:", osszeg - kiírjuk a végeredményt
| Kör | i (belépéskor) | Hozzáadott érték | osszeg (kilépéskor) | i léptetés után |
|---|---|---|---|---|
| 1 | 1 | +1 | 1 | 2 |
| 2 | 2 | +2 | 3 | 3 |
| 3 | 3 | +3 | 6 | 4 |
| 4 | 4 | +4 | 10 | 5 |
| 5 | 5 | +5 | 15 | 6 |
| 6 | 6 | — (nem fut) | 15 | — |
A 6. ellenőrzésnél az i ≤ N már hamis (6 ≤ 5), ezért kilépünk, és kiírjuk: Összeg: 15.
3. Olvass be egy nemnegatív egész számot (pl. 325) és számold ki a számjegyeinek az összegét (3+2+5 = 10). Ehhez az algoritmus ciklusok közül egy elöltesztelős ciklust használunk, mert minden számjegyet sorban meg kell vizsgálni.
Mini tudásdoboz:
x mod 10 -> az osztás maradéka. 17 mod 3 = 2 (17-ben a 3 megvan ötször, marad a 2)
x div 10 -> lefelé kerekít, pontosabban eldobja a tört részt. 49 div 10 = 4 (49-ben a 10 = 4,9, csak a 4 marad)
A megoldáshoz kattints ide
BE: x
osszeg := 0
amíg x > 0
osszeg := osszeg + (x mod 10)
x := x div 10
ciklus vége
KI: "A számjegyek összege:", osszeg
Magyarázat - a példa: x = 325
BE: x //beolvassuk a számot, x=325
osszeg := 0 // a kiinduló összeg üres, még nem adtunk hozzá semmit
Amíg x > 0 // a 325 nagyobb, mint 0, belépünk a ciklusba
osszeg := osszeg + (x mod 10) // x mod 10 = 5 (325-ben a 10 megvan 32,5-tel, az ötöt megtartja. Az osszeg = 0+5 = 5
x := x div 10 // 325 div 10 = 32. Ezzel zárjuk az első kört
2. kör: x = 32, ami nagyobb mint 0, belép újra a ciklusba
osszeg = 5 + 32 mod 10 = 5+2 (32-t osztom tízzel, marad a kettő) = 7
x = 32 div 10 = 3
3. kör x = 3, ami nagyobb, mint 0, belép a ciklusba
osszeg = 7 + (3 mod 10) = 7+3 = 10 (Hármat elosztom tízzel. A három kisebb, mint 10, így maga a 3 a maradék. 3 mod 10 = 3)
Kilépés: x = 0, így a feltétel hamis, vége a ciklusnak. Az összeg = 10.
4. Kérj be egy számot (pl. 7) és írasd ki a szorzótábláját 1-től 10-ig!
A megoldáshoz kattints ide
BE: n
i := 1
Amíg i <= 10
KI: n, " * ", i, " = ", n*i
i := i + 1
Ciklus vége
Magyarázat
BE: n // bekérjük azt a számot, amelynek a szorzótábláját szeretnénk kiírni. Például n = 7
i := 1 //ez lesz a számlálónk, innen indulunk. A szorzótáblát mindig 1-től kezdjük
Amíg i <= 10 // a ciklus addig fut, amíg i nem nagyobb, mint 10
KI: n, " * ", i, " = ", n*i // kiírjuk az aktuális sort a szorzótáblából. Példa: ha n=7 és i=3, akkor a kimenet 7*3 = 21
i := i + 1 //lépünk a következő számra (i =2, i = 3, ..., i = 10)
Ciklus vége: visszatérünk a feltételhez (i <= 10) és újra futtatjuk, amíg el nem érjük a 10-et.
| Kör | i (belépéskor) | Kimenet | i léptetés után |
|---|---|---|---|
| 1 | 1 | 3 * 1 = 3 | 2 |
| 2 | 2 | 3 * 2 = 6 | 3 |
| 3 | 3 | 3 * 3 = 9 | 4 |
| 4 | 4 | 3 * 4 = 12 | 5 |
| 5 | 5 | 3 * 5 = 15 | 6 |
| 6 | 6 | 3 * 6 = 18 | 7 |
| 7 | 7 | 3 * 7 = 21 | 8 |
| 8 | 8 | 3 * 8 = 24 | 9 |
| 9 | 9 | 3 * 9 = 27 | 10 |
| 10 | 10 | 3 * 10 = 30 | 11 (→ kilép) |
Amikor i = 11, a feltétel i ≤ 10 hamis, így a ciklus leáll.
5. Olvass be egy számot (N), és számold ki az 1..N közötti páros számok összegét
A megoldáshoz kattints ide
BE: N
osszeg := 0
i := 2
amíg i <= N
osszeg := osszeg + i
i := i + 2
Ciklus vége
KI: "Páros számok összege", osszeg
Magyarázat
BE: N // bekérjük a felső határt, pl. N = 10
osszeg := 0 // előkészítjük az összegváltozót
i := 2 //a számláló induljon kettőről, mert ez az első páros szám
Amíg i <= N //a ciklus addig fut, amíg nem lépjük től az N-t.
osszeg := osszeg + i // mindig hozzáadjuk az aktuális páros számot
i := i + 2 // kettesével léptetünk, így mindig páros számot kapunk
Ciklus vége // újraellenőrizzük a feltételt, és ha igaz, jön a következő kör
KI: // a végén kiírjuk az összeget
| Kör | i (belépéskor) | Hozzáadott érték | osszeg (kilépéskor) | i léptetés után |
|---|---|---|---|---|
| 1 | 2 | +2 | 2 | 4 |
| 2 | 4 | +4 | 6 | 6 |
| 3 | 6 | +6 | 12 | 8 |
| 4 | 8 | +8 | 20 | 10 |
| 5 | 10 | +10 | 30 | 12 (→ kilép) |
A ciklus 12-nél megáll, mert i ≤ N (12 ≤ 10) hamis. Végeredmény: 30.
6. Olvass be egy természetes számot (N), és írd ki növekvő sorrendben az összes osztóját
A megoldáshoz kattints ide
| Kör | i (jelölt) | 12 mod i | Osztó? | Kiírt osztók (eddig) | i léptetés után |
|---|---|---|---|---|---|
| 1 | 1 | 0 | igen | 1 | 2 |
| 2 | 2 | 0 | igen | 1, 2 | 3 |
| 3 | 3 | 0 | igen | 1, 2, 3 | 4 |
| 4 | 4 | 0 | igen | 1, 2, 3, 4 | 5 |
| 5 | 5 | 2 | nem | 1, 2, 3, 4 | 6 |
| 6 | 6 | 0 | igen | 1, 2, 3, 4, 6 | 7 |
| 7 | 7 | 5 | nem | 1, 2, 3, 4, 6 | 8 |
| 8 | 8 | 4 | nem | 1, 2, 3, 4, 6 | 9 |
| 9 | 9 | 3 | nem | 1, 2, 3, 4, 6 | 10 |
| 10 | 10 | 2 | nem | 1, 2, 3, 4, 6 | 11 |
| 11 | 11 | 1 | nem | 1, 2, 3, 4, 6 | 12 |
| 12 | 12 | 0 | igen | 1, 2, 3, 4, 6, 12 | 13 (→ kilép) |
Végső kimenet: 1, 2, 3, 4, 6, 12. A ciklus i ≤ N után áll le.

