Kezdőoldal » Számítástechnika » Programozás » While ciklusra olyan példa,...

While ciklusra olyan példa, ami nem a for ciklus működésén alapul, és nem is a do-while ciklusén?

Figyelt kérdés
Tehát nem számlálás (for) és nem is adatok újrabekéregetése, illetve bizonyos utasítások újrafuttatása feltételig (do-while).

2017. márc. 21. 12:38
1 2
 11/18 anonim ***** válasza:
És ez most mi akar lenni?
2017. márc. 24. 21:19
Hasznos számodra ez a válasz?
 12/18 anonim ***** válasza:

Nos, ez egy while ciklus, ami a do-while ciklushoz hasonlóan addig ismétel, amíg a ciklusfeltétel igaz.


Ugyanez igaz egyébként a for ciklusra is, ott a középső paraméter a ciklusfeltétel. Oda akármit írsz, ha az nem igaz, a ciklus végrehajtása megszakad.


Nem a legjobb példa, de


/**

* Adott egy $persons tömb, ebben Person objektumok vannak.

* Név szerint keresünk, ha nincs találat, null-t adunk vissza.

*/

function findByName($name) {

˙˙˙˙$match = null;

˙˙˙˙for ($i = 0; $i < count($persons) && $match == null; $i++) {

˙˙˙˙˙˙˙˙if ($persons[i]->getName() == $name) {

˙˙˙˙˙˙˙˙˙˙˙˙$match = $persons[i];

˙˙˙˙˙˙˙˙}

˙˙˙˙}

}


A foreach ciklus ciklusfeltétele implicit.


A while és do-while között mindössze a feltétel kiértékelésének helye a különbség, Utóbbinál, mivel az hátultesztelő, a ciklusmag az első alkalommal feltétel nélkül végrehajtódik.


Az, hogy mi szolgál ciklusfeltételként, már egy más kérdés, az értelemszerűen te döntöd el. Lehet egy adat megléte (lásd mysqli_fetch_*), egy konkrét boolean változó értéke, egy kifejezés értéke, vagy bármilyen állapot, amely igaz-hamisként értelmezhető.

2017. márc. 24. 21:37
Hasznos számodra ez a válasz?
 13/18 anonim ***** válasza:
Kimaradt a példából a return, de perpill nem is az a lényeg. Mivel a ciklusfeltétel része, hogy $match == null, így amint $match értéket kap, a ciklus befejeződik.
2017. márc. 24. 21:38
Hasznos számodra ez a válasz?
 14/18 A kérdező kommentje:
Köszi a választ, de a kérdés az volt, hogy olyan példát mondjunk, amit while ciklussal szebben meg lehet valósítani, mint for vagy do-while ciklussal.
2017. márc. 25. 10:56
 15/18 anonim ***** válasza:

"de a kérdés az volt, hogy olyan példát mondjunk, amit while ciklussal szebben meg lehet valósítani, mint for vagy do-while ciklussal."


While ciklussal bármit szebben meg lehet valósítani mint más iterációs lehetőségekkel.

2017. márc. 25. 11:56
Hasznos számodra ez a válasz?
 16/18 anonim ***** válasza:

"Köszi a választ, de a kérdés az volt, hogy olyan példát mondjunk, amit while ciklussal szebben meg lehet valósítani, mint for vagy do-while ciklussal."


Nem akarok gorombának tűnni, de az eredeti kérdésed nem igazán ezt tükrözte. Bár nem volt teljesen egyértelmű, mit szeretne türközni. Így már érthetőbb.


While és do-while közt nemigen lesz különbség, leszámítva azt az esetet, amit már említettem is.


Mindig mérlegelni kell a lehetőségeket és aszerint választani megoldást.


Amíg a fájl végére nem érünk:

while (!eof(file)) {

˙˙˙˙// blablabla

}


Ilyen esetben jobb megoldás a while, mert tömörebb, mintha for ciklust használnál (illetve soronként feldolgozva az esetek többségében nincs rentábilis módod a sorok száma alapján iterálni), a do-while pedig nem játszik, mert ha a fájl esetleg üres, te pedig olvasni próbálsz belőle (past eof), abból hiba lehet.


Tovább, nincs itt semmi látnivaló...


Amíg elfogadható adatot nem kapunk:

do {

˙˙˙˙input = getUserInput();

} while (!isValid(input));


Ezesetben legalább egyszer mindenképpen végrehajtjuk az input bekérését, így ilyen helyzetben a do-while a célravezető, a while nem az igazi, a for ciklus pedig erős mellényúlás lenne.


Ugyanez pepitában - két dobókockával dobunk, amíg egyforma nem lesz:

do {

˙˙˙˙first = rollDice();

˙˙˙˙second = rollDice();

} while (first != second);


Ugorgyunk...


Low-level képernyőtörlés grafikus módban:

for (int y = 0; y < SCREEN_HEIGHT; y++) {

˙˙˙˙for (int x = 0; x < SCREEN_WIDTH; x++) {

˙˙˙˙˙˙˙˙setPixel(x, y, BLACK);

˙˙˙˙}

}


Ilyenkor, mivel pontosan n-szer szeretnénk valamit végrehajtani, a for ciklus lesz a helyez megoldás.


Végül, de nem utolsósorban, végigmegyünk a diákok listáján és kiírjuk az adataikat:

foreach ($students as $student) {

˙˙˙˙printStudentData($student);

}


Mivel feltétel nélkül végigmegyünk mindegyiken, és az is lényegtelen, hányadiknál tartunk épp, így ide foreach ciklust teszünk.


Mindezek nyilván nem kizárólagos esetek, csupán kiragadott példák. Mindig az adott helyzetben fog eldőlni, melyik megoldás fogja legjobban szolgálni a kitűzött célt. Ahogy mondani szokták volt, "choose the right tool for the job", vagyis minden feladathoz a neki legmegfelelőbb megoldást kell alkalmazni. Ha iterálni kell, gondold át, melyikkel lesz a legtömörebb, legolvashatóbb; no meg persze a legegyszerűbb, hiszen ha feleslegesen kell tornázni, akkor tömör és elegáns sem lesz.

2017. márc. 25. 15:59
Hasznos számodra ez a válasz?
 17/18 A kérdező kommentje:

Akárhogy olvasgatom vissza, szerintem kb. ugyanezt írtam le az eredeti kérdésben is, mindegy, megoldódott, közben én is rájöttem. Ettől függetlenül köszi a hosszú válaszodat.

Az előző válaszoló válaszára (mármint, hogy while ciklussal mindent szebben lehet megoldani), nos, szerintem a számlálást for ciklussal szebben meg lehet oldani, mint while ciklussal (mivel a for ciklus konkrétan arra van kitalálva).


A lényeg, hogy ha a while ciklust nem számlálásra (for), és nem is adatellenőrzésre, vagy újrafuttatásra (do-while) használjuk, akkor maradnak azok a függvények, amik csinálnak valamit (pl. beolvasnak egy sort egy fájlból), aztán vagy true-t, vagy false-t adnak vissza. Na szerintem erre használjuk a while ciklust akkor, amikor nem ugyanarra, mint amire a for ciklust, vagy a do-while ciklust szoktuk.

Borítékolom, hogy lesz, aki szerint tökre de nem logikus, amit leírtam, oké, ez a hely tele van trollokkal, a lényeg, hogy végül rájöttem, amire szerettem volna. Köszönöm az értelmes hozzászólásokat.

2017. ápr. 9. 06:46
 18/18 anonim ***** válasza:

# 17/17 Időpont ma 06:46


Tehát valaki attól lesz troll, hogy szerintük egyáltalán nem logikus amit leírtál? Mellesleg amire te rájöttél az ugyanúgy "bizonyos utasítások újrafuttatása feltételig", szóval gyakorlatilag nem jöttél rá semmire.

2017. ápr. 9. 09:22
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!