„Szerkesztő:Effendi/Ciklusok” változatai közötti eltérés

Tartalom törölve Tartalom hozzáadva
Effendi (vitalap | szerkesztései)
Nincs szerkesztési összefoglaló
Effendi (vitalap | szerkesztései)
Nincs szerkesztési összefoglaló
1. sor:
= Ciklusok =
 
 
A '''ciklus''', vagy '''iteráció''' a [[számítógép-programozás]] és az [[algoritmus]]ok egyik alapvető eszköze, amely az ismétlődő (azonos vagy hasonló) tevékenységek megvalósítására
szolgál. A ciklus beépítését a programba ''ciklusszervezés''nek is nevezik. A ciklust az egyes [[programozási nyelv]]ek különböző [[kulcsszó|kulcsszavakkal]] valósítják memeg.
 
== Típusai==
21 ⟶ 20 sor:
Ebben a ciklusban a ciklusváltozónak van '''kezdőértéke''' (2), '''végértéke''' (5) és '''lépésköze''' (1). Nem minden ciklusban van ciklusváltozó. Egyes programnyelvekben több is lehet belőle.
 
A ciklus első sorát '''ciklusfejnek''' nevezik. Általában ez vezérli a ciklust; itt kap helyet a ciklusváltozó(k) definíciója, valamint a futási feltétel is. A középső sor a '''ciklusmag''', vagyis a ténylegesen ismétlődő utasítások meghatározása. Ennek a ciklusnak a magja egyetlen utasításból áll. Végül az utolsó sor a '''ciklusvég'''; az elöltesztelőelöl tesztelő és a számlálós ciklus esetében ez puszta lezáró utasítás, amely a ciklusmag végét jelzi (egyes programnyelvekben esetenként el is maradhat), a hátultesztelőhátul tesztelő ciklus esetén pedig ez a rész tartalmazza a futási feltételt.
 
== Feltételes ciklusok (WHILE)==
A feltételes ciklusok olyankor használatosak, amikor nem ismert előre, hogy hányszor kell a ciklusnak lefutnia. Azt viszont tudjuk, hogy milyen feltétel teljesülése esetén kell tovább futnia vagy leállnia. (Ez a kettő egymással [[logikai ekvivalencia|ekvivalens]], hiszen a további futás, illetve a leállás feltétele egymás [[Logikai művelet#Negáció|tagadása]].) A feltétel teljesülését vizsgálhatjuk a ciklusfejben vagy a ciklusvégben is; a különbség abban fog állni, hogy legalább egyszer lefut-e a ciklus.
 
=== ElöltesztelőElöl tesztelő ciklus ===
[[Fájl:While-loop-diagram.svg|200px|jobbra|bélyegkép]]
Az elöltesztelőelöl tesztelő ciklus sémája:
<pre>Ismételd, amíg a feltétel igaz
utasítások
ciklus vége</pre>
Az elöltesztelőelöl tesztelő ciklus tehát először megvizsgálja, hogy a feltétel fennáll-e. Ha igen, akkor lefuttatja a ciklusmagot, és újból kezdődik; ha nem, akkor a program a ciklus utáni ponton folytatódik, azaz a ciklusmag kimarad. Lehetséges tehát, hogy az elöltesztelőelöl tesztelő ciklus egyszer sem fog lefutni.
 
Az elöltesztelőelöl tesztelő ciklus tipikus példája az [[adatállomány]]ok beolvasása; előfordulhat ugyanis, hogy az állomány üres, és ilyenkor nincs mit beolvasni. Hasonló a helyzet a [[Mappa (számítástechnika)|könyvtárak]] listázásakor is, hiszen a könyvtárban nem biztos, hogy van állomány.
 
Az elöltesztelőelöl tesztelő ciklus tipikus kulcsszava a <code>while</code>.
Általános alakja a következő:
<pre>
50 ⟶ 49 sor:
</pre>
 
=== HátultesztelőHátul tesztelő ciklus ===
[[Fájl:Do-while-loop-diagram.svg|200px|jobbra|bélyegkép]]
A hátultesztelőhátul tesztelő ciklus sémája:
<pre>Ismételd
utasítások
amíg a feltétel igaz</pre>
Mivel a feltételvizsgálat a ciklusmag után áll, ezért a hátultesztelőhátul tesztelő ciklus legalább egyszer mindenképpen lefut.
 
A konkrét programnyelvi megvalósítástól függ, hogy a hátultesztelőhátul tesztelő ciklusban a folytatás vagy a kilépés feltételét kell-e megadni. A ciklus az első esetben addig fut, amíg a ciklusvégben megadott feltétel igaz (ennek tipikus kulcsszava a <code>while</code>), a másik esetben pedig addig, amíg igazzá nem válik (tipikus kulcsszava az <code>until</code>).
 
Általános alakja a következő:
67 ⟶ 66 sor:
}while(feltétel);
</pre>
Jellemző példa a hátultesztelőhátul tesztelő ciklusra az adatbevitel ellenőrzése. Tegyük fel, hogy regisztrálni szeretnénk egy ingyenes [[E-mail|postafiókot]] az [[internet]]en. A [[szerver]]en futó programnak először ellenőriznie kell, hogy szabad-e még a választott azonosító, majd azt is, hogy kitöltöttük-e az összes kötelező adatmezőt, és addig kell ismételnie ezt a lépést, amíg az összes adat helyessé nem válik. Sok szolgáltató ezt egy lépésben végzi el, vagyis először ki kell töltenünk az űrlapot, aztán tudjuk meg, hogy szabad-e még az azonosító. Ebben az esetben a ciklus a következőképpen nézhet ki:
<pre>
Ismételd
82 ⟶ 81 sor:
[[Fájl:For-loop-diagram.png|200px|jobbra|bélyegkép]]
 
A számláló ciklus általánosságban olyan elöltesztelőelöl tesztelő ciklust jelent, amely egy felsorolható típus adott intervallumán léptet végig, speciálisan egész számokon. Üres intervallumra nem fut le.
 
C-ben a <code>for</code> ciklus majdnem teljesen ekvivalens az elől tesztelős ciklussal, de más nyelvekben nem feltétlenül van ez így: a <code>for</code> ciklus átírható más ciklussá, de visszafelé általában nem.
A <code>for</code> ciklusnak kisebb lehet a kifejezőereje, de könnyebb olvasni: ezért a használata javasolt minden olyan esetben, ahol csak lehetséges.
 
Számok összegzése <code>for</code>ciklussal C-ben:
96 ⟶ 95 sor:
</syntaxhighlight>
 
ÖsszegzésSzámok összegzése <code>while</code>-lalciklussal C++-banben:
 
<syntaxhighlight lang="cpp">
int sum = 0;
120 ⟶ 118 sor:
</syntaxhighlight>
 
== Iteráló ciklus (FOR IN, FOREACH) ==
Egyes nyelvekben a <code>foreach</code> [[kulcsszó]]val kell használni. Arra való, hogy egy egy [[tároló (adatszerkezet)|tároló]] (pl.tömb, lista)elemeit bejárjuk. Erre egy egyszerű példa PHP-ban:<ref>{{Cite web |url=http://hu.php.net/manual/en/control-structures.foreach.php# |title=Archivált másolat |accessdate=2010-01-19 |archiveurl=https://web.archive.org/web/20090213012453/http://hu.php.net/manual/en/control-structures.foreach.php# |archivedate=2009-02-13 }}</ref>
$arr = array(1, 2, 3, 4); // Tömb az 1,2,3,4 számokból
141 ⟶ 139 sor:
</syntaxhighlight>
megadásával. Mivel egy lista elemszáma nem kötött, az előny nyilvánvaló.
 
Néhány programozási nye
+
 
== Beavatkozás a ciklus menetébe ==