c++ alapok

Miért van szükség ciklusokra C++-ban?

Képzeld el, hogy le kell írnod a táblára egy mondatot… mondjuk 100-szor.
Vagy be kell kérned 6 futó adatait.
Vagy ki kell írnod 1-től 1000-ig minden számot.

Ezek mind olyan feladatok, amiket kézzel megcsinálni rémálom, de a számítógépnek egyetlen utasítás:

👉 „Ezt ismételd meg ennyiszer.”

És pontosan ez a ciklusok lényege.

Anime lány C++ ciklusok tanulása közben, a referenciaarc megtartásával, for és while szerkezeteket megjelenítő monitorral.

 

A ciklusok olyanok, mint a programozás „repeat” gombjai:

  • ha valamit újra és újra kell végrehajtani,

  • ha egy adatsoron végig kell menni,

  • ha valamit csak addig csinálunk, amíg egy feltétel igaz,
    akkor ott biztos, hogy ciklust fogsz használni.

A C++ két klasszikus ciklusa, amit most megtanulunk:

while – amíg a feltétel igaz, ismétel
for – egy előre tudott, számlálós ismétlés

És hidd el, ahogy összeáll, hirtelen minden feladat egyszerűbb lesz:

  • ismétlődő műveletek

  • adatok összegzése

  • min–max keresés

  • tömbök bejárása

Most pedig lépjünk bele a ciklusok világába, kezdjük azzal, hogyan működik a while, és miért viselkedik másképp, mint a for.

While - do-while ciklus

A ciklusok akkor jönnek jól, amikor valamit többször egymás után szeretnénk végrehajtani. Nem akarunk százszor leírni egy utasítást, elég egyszer megadni, és a gép elismétli helyettünk.

A while kulcsszó azt jelenti:
👉 „amíg teljesül a feltétel, ismételd az utasítást.”

Ez egy úgynevezett előtesztelő ciklus, mert még belépés előtt megnézi, igaz-e a feltétel. Ha már az elején hamis, akkor egyáltalán nem fut le a ciklusmag.

Példa:

„C++ ciklusok példája while használatával – a program tízszer kiírja a Szia szót.”

A program először megnézi, hogy i <= 10 igaz-e.
Ha igen, belép a ciklusba, kiírja a „Szia”-t, majd ++i növeli az i értékét.
Ahogy látjuk, pontosan tízszer fut le – a feltétel addig igaz, amíg az i el nem éri a 11-et.

A ciklusban található rész a ciklusmag.
A feltétel: i <= 10.
A változás: ++i, ami biztosítja, hogy a feltétel egyszer hamissá váljon, különben végtelen ciklusba futnánk.

Ha a „Szia” helyett i-t iratod ki, akkor szépen elszámol 1-től 10-ig. 

do-while – mindig lefut egyszer

A while párja a do-while, ami szintén ciklus, de egy nagyon fontos különbséggel: a do-while egyszer mindig lefut és csak utána vizsgálja a feltételt. Ezért nevezzük utótesztelő ciklusnak. 

C++ ciklusok példája do–while szerkezettel, amely egyszer lefuttatja a Szia kiírást

Hiába a false feltétel, a ciklusmag egyszer biztosan lefut. Ez akkor hasznos, ha valamit mindenképp meg akarunk jeleníteni a képernyőn, pl. egy bekérést. 

For ciklus

A while ciklusnál megtanultuk, hogy addig ismételünk, amíg a feltétel igaz.
A for ciklusnál viszont már az elején tudjuk:

  • honnan indulunk,

  • meddig szeretnénk menni,

  • és hogyan változik a számláló.

Ezért a for olyan, mint a „számlálós ismétlés” beépített csodafegyvere:
rövid, átlátható, és a legtöbb programozási feladatnál ez lesz a kedvenced.

A for ciklus valójában három részből áll (mind egy sorban!):
for (kezdőérték; feltétel; léptetés)

Működése

1. beállítja a kezdőértéket
2. Megvizsgálja a feltételt
3. Ha igaz, lefut a ciklusmag
4. A végén elvégzi a léptetést (pl. ++i)
5. Újra ellenőrzi a feltételt … és megy tovább.

Addig ismétel, amíg a feltétel hamis nem lesz

C++ ciklusok – for ciklus, amely 1-től 10-ig kiírja a számokat a képernyőre.

Ez szó szerint azt mondja: 
1. Indulj egytől
2. Menj addig, amíg i <= 10
3. Minden körben növeld eggyel

És így a program elszámol 1-től 10-ig.  

Egymásba ágyazott ciklusok - Csillagpiramis építése

A ciklusokat nem csak külön-külön használhatjuk, hanem egymásba is ágyazhatjuk őket.
Ez azt jelenti, hogy egy cikluson belül fut egy másik ciklus.

Ennek a legegyszerűbb és leglátványosabb példája, amikor csillagokból építünk ábrát:

  • a külső ciklus (i) azt mondja meg, HÁNY sor legyen,

  • a belső ciklus (j) azt mondja meg, egy sorban HÁNY csillag legyen.

Ha az i értéke 1, akkor 1 csillagot írunk ki,
ha az i értéke 2, akkor 2 csillagot,
…és így tovább.

C++ ciklusok – egymásba ágyazott for ciklusokkal készített csillagpiramis.

 

1. feladat

Kérj be a felhasználótól egy számot és írd ki az összes számot 1-től eddig az értékig

C++ ciklusok – for ciklus, amely 1-től a felhasználó által megadott számig kiírja a számokat.

Mit csinál?

int n; -> létrehoz egy dobozt, amelyben n nevű egész szám típusú változó van
std::cin >> n; -> beteszi a dobozba azt az értéket, amit a felhasználó megadott
int i = 1 -> ezzel létrejött egy i nevű új változó, ami egy egész szám. Kapott egy kezdőértéket: 1
i <= n -> minden ciklusfuttatás előtt ezt ellenőrzi a program. Ha igaz, lefut a ciklusmag. Ha hamis, vége a ciklusnak
++i -> minden kör végén növeli az i értékét eggyel. Ez viszi előre a ciklust. 

Mi a különbség az i és az n között?
Az i csak ebben a ciklusban él, az n a cikluson kivül lett meghatározva, tehát később is vissza lehet nyúlni hozzá

2. feladat

Kérj be a felhasználótól egy egész számot (N) és számold ki, mennyi 1+2+3+ … + N összege

C++ ciklusok – for ciklus, amely kiszámolja az 1-től N-ig lévő számok összegét.

int N; -> bekéri az N -et
std::cin >> N; -> beteszi az N értékét egy dobozba

int osszeg = 0; -> van egy összeg változónk, ami nulláról indítja a számolást. Minden ciklusban belerakunk egy osszeg + i-t. 

for ciklusunk:
int i = 1 – ez a ciklus számlálója. Ez számolja, hányszor futott le a ciklus, illetve melyik számnál tart. A kezdeti értéke egy, célja, hogy elérje az N értéket. Tehát ez egyről indul
Feltételvizsgálat: i <= N. Ez minden kör előtt lefut. A gép megkérdezi: a jelenlegi i érték még belefér? Ha igen, lefut a ciklusmag, ha nem, kilép a ciklusból. 
N = 6, tehát belefér az 1, 2, 3, 4, 5, 6 és kilép a 7-nél. 

osszeg +=i; – ez történik minden körben: fogjuk az összeg változóban levő értékét és hozzáadjuk az aktuális i-t, majd visszarakjuk ugyanabba a dobozba. Ha i = 3, akkor osszeg = osszeg + 3. Az osszeg += i az ugyanazt jelenti, mint osszeg = osszeg + i;

 

3. feladat

Hány páros szám van 1 és n között?. Kérj be a felhasználótól egy n egész számot, majd vizsgáld meg 1-től n-ig az összes számot és számold meg, hány páros szám van köztük. Végül írd ki a darabszámot. 

C++ ciklusok – program, amely megszámolja az 1-től N-ig található páros számokat for ciklus és if feltétel segítségével.

int n; – létrehozol egy egész típusú változót, a neve: n. Ez lesz a dibiz, amibe a felhasználó által megadott szám kerül. Kiírja az üzenetet a képernyőre, a felhasználó megadja a számot. 
std::cin >> n; – beleteszi a megadott számot a dobozba. Beírtam, hogy 6, innentől az n = 6 lesz. 

int db = 0; -> egy újabb doboz, ez fogja számolni azt, hogy hány páros számot talált. Int = egész típusú változó. 0 – mert kezdetben 0 darab párosról tudunk. 

for ciklus:
int i = 1; -> létrejön egy i nevű számláló, kezdőértéke 1. Az első vizsgált szám az 1
int <= n; -> feltétel, amíg i <= n, addig fut a ciklus. Ha n = 6, akkor az i felvett értékei: 1, 2, 3, 4, 5, 6.
Amikor i = 7, a feltétel hamis, kilép
++i -> minden kör végén az i eggyel nő. 

cilusmag: {} zárójel között. if (i % 2 == 0 { db++;} Itt döntjük el, hogy az i páros-e. i % 2 == 0 (ha az i-t elosztjuk kettővel, akkor a maradék = 0). Ha ez lefut, akkor a db++ -> a db megnő eggyel. Ha az i páros, akkor a darabszám nő eggyel. 

Ha lefutott a ciklus, akkor kiírja a db számát a képernyőre.  

4. feladat

Kérj a felhasználótól egy n számot. Ezután döntsd el 1-től n-ig minden számról, hogy osztható-e hárommal. Számold meg, hány ilyen szám van és írd ki az eredményt. 

Nagyon hasonlít a megoldása az előző feladathoz, itt most csak a zárójeleket nézzük át: 
if (i % 3 == 0) -> a kerek zárójel azt jelzi, ez egy logikai feltétel, ami vagy igaz, vagy hamis. A feltételek mindig ()  – kerek zárójelben vannak. Itt azt jelenti: mit kérdezünk meg. 
{} – kapcsos zárójel, azt mutatja meg, mit csinálunk, ha a válasz igaz

for (int i = 1; i <= n; i++) {   // Ez a for kapcsos nyitója
if (i % 3 == 0) {                  // Ez az if kapcsos nyitója
db++;                                // if blokk belseje
}                                       // if blokk kapcsos zárója
}                                      // for kapcsos zárója

5. feladat

Kérj a felhasználótól egy n számot. Ezután vizsgáld meg 1-től n-ig minden számot, hogy 7-esre végződik-e. Számold meg, hány ilyen szám található

Ha szeretnél továbbhaladni a C++ anyagban, itt válogathatsz a leckék között: