2012. február 8., szerda

Ciklus, mert a jó dolgokat meg kell ismételni

No, végre elkezdtem folytatni ezt is. A mai tananyag pedig a különböző ciklusokat taglalja majd, amik arra jók, hogy egyszerűen meg tudjunk ismételni -akár elég sokszor is- bizonyos kód részleteket. Háromféle ciklust fogunk venni, melyek a következők: elől tesztelő (while), hátul tesztelő (do while), számláló (for).
Kezdjük is egyből a while ciklussal. A feladat majdnem ugyanaz, mint a legutóbb, csak most nem egyszer fogjuk kiíratni a "Hello World!" szöveget, hanem tízszer. Vágjunk is bele, íme a kód:

#include<iostream>
using namespace std;
int main()
{
    string szoveg; //kérünk egy szöveg változót, ahogy a legutóbb
    szoveg="Hello World!"; //rakunk bele szöveget, ebben sincs semmi új
    int i=0; //létrehozunk egy egész típusú változót, melynek egyből értéket is adunk, méghozzá a nullát
    while(i<10) //jön a ciklus, zárójelben megadjuk, hogy meddig menjen. Addig meg amíg i<10
    {
        cout<<szoveg<<endl; //kiírjunk a szöveget, majd az "endl" utasítással átugrunk a következő sorba
        i++; //megnöveljük az "i" értékét egyel, hogy majd egyszer nagyobb legyen 10nél
    }
    return 0;
}

Ugyan kommenteltem, de azért most magyarázok még egy picit. Az "i" értéke először nulla, ezért a ciklusunk lefut (gondolom mindenkinek egyértelmű miért...a 0 kisebb, mint a 10). A ciklusunkban megnöveljük az "i"-t, így az értéke már 1 lesz, ami viszont még mindig kisebb, mint a 10. Ez így fog menni, amíg az "i" értéke 10 nem lesz, ugyanis a 10 már nem kisebb, mint a 10. Ugye milyen egyszerű? A végeredmény pedig itt látható:

Ott van mind a 10 darab "Hello World!"

Jöhet következő áldozatunk, vagyis a do while ciklus. Ennek az a lényege, hogy míg a while nem biztos, hogy akár egyszer is lefut. Elvégre az "i"nek egyből adhattuk volna azt az értéket is, hogy 25, ami nagyobb, mint a 10...a ciklus így sosem futott volna le, ugyanis a futás előtt ellenőrzi a megadott feltételt. A do while, pont fordítva csinálja a dolgot. Lefut a ciklus, ellenőriz, ha megfelelt, akkor megint lefut és újra ellenőriz, egészen addig, amíg a feltétel teljesül. Ez annyit jelent, hogy ez a ciklus mindig lefut, legalább egyszer. Nézzük is meg, hogy hogyan néz ki:

#include<iostream>
using namespace std;
int main()
{
    string szoveg;
    szoveg="Hello World!";
    int i=0; //eddig minden ugyanúgy néz ki, mint az előbb
    do //innen jön a ciklus
    {
        cout<<szoveg<<endl; // a ciklusmag is teljesen megeggyezik
        i++;
    } while(i<10); //most pedig ellenőrzünk
    return 0;
}

Látható, hogy a feltétel a dolog működését is prezentálva, a ciklus végén helyezkedik el, elvégre akkor történik az ellenőrzése. Ezt nem fogom tovább ragozni, majdnem teljesen ugyanaz, mint a while ciklus. Igazából nem is túl gyakran használjuk, vagyis én nem használtam eddig valami gyakran. 

Most pedig jöhet a talán leggyakrabban használt ciklus, a számláló ciklus. Ez már egy kicsit kompaktabb móka. Viszont ezt is könnyű használni és igen hasznos. Lássuk hát!

#include<iostream>
using namespace std;
int main()
{
    string szoveg;
    szoveg="Hello World!"; //eddig minden stimmel
    for(int i=0;i<10;i++) //Teremtőm, itt meg milyen bonyolult feltétel van! Na jó, nem is, mindjárt megértjük!
    {
        cout<<szoveg<<endl; //ciklus mag megegyezik, viszont az "i++;" elköltözött
    }
    return 0;
}

Jöjjön a magyarázat! Lett egy nagyon szép feltételünk: (int i=0;i<10;i++) ez ugyanaz, mint ami eddig volt, csak egy kicsit tömörebben és egyszerűbben. Az első részben megadjuk, hogy amit vizsgálunk, az egy "i" nevű egész szám legyen, ami kezdetben nulla (int i=0), aztán megmondjuk, hogy meddig menjen a ciklus. Addig menjen amíg "i" barátunk kisebb, mint tíz (i<10). Ezután pedig jön a szokásos, növeljük az "i" értékét dolog (i++). Mindent szépen megcsináltunk, méghozzá egy lépésben. Ezért már semmi mással nem is kell foglalkoznunk, csak a ciklusmaggal. Ugye milyen kényelmes? 
Szerintem egyelőre bőven elég is ennyi a ciklusokról. Amennyiben valami nem érhető, kommentben nyugodtan tessék kérdezni! Egyébként a másik ciklusnál direkt nem fotóztam le a kimenetet, ugyanis teljesen ugyanaz, mint az első ciklusnál. Jó tanulást!

Nincsenek megjegyzések:

Megjegyzés küldése