Kezdőoldal » Számítástechnika » Programozás » Miért használnak egyesek for...

Miért használnak egyesek for ciklus helyett while ciklust számláláshoz?

Figyelt kérdés

Van-e esetleg ennek valami hatékonyságbeli oka, vagy csak egyszerű szimpátia?

Tehát például ehelyett: for (int i = 0; i < 20; i++) { cout << i << endl; } van, aki ezt használja: int i; while (i < 20) { cout << i << endl; i++; }



2017. máj. 27. 09:28
1 2 3 4 5 6
 11/59 anonim ***** válasza:

"Ugyanez for esetén helyből kizárt, az ugyanis legalább egyszer mindenképpen lefut."


Elvből hülyeség amit mondasz.

Tessék itt a példa kód. Futtasd le. :)


Java:

public class Main {

... public static void main(String[] args) {

... ... System.out.println("---");

... ... for(int i = 10; i < 10; i++) {

... ... ... System.out.println(i);

... ... }

... ... System.out.println("---");

... }

}


Terminál:

$ javac Main.java

$ java Main

---

---


Én nem látok számot a 2db vonal között.

2017. máj. 27. 16:12
Hasznos számodra ez a válasz?
 12/59 anonim ***** válasza:

Kipróbáltam c# Ben és nem fut le a for egyszer sem ha a benne levő feltétel egyből hamis.


Úgy van. Ügyes vagy. Jár a keksz. Mondj ellent magadnak, hogy a for legalább 1x lefut.

2017. máj. 27. 16:13
Hasznos számodra ez a válasz?
 13/59 anonim ***** válasza:
Jaj, azttem te is azt írtad, tehát bocs. Az utolsó #15 hsz-em tárgytalan. :)
2017. máj. 27. 16:14
Hasznos számodra ez a válasz?
 14/59 anonim ***** válasza:
90%

Hűha, mik mennek itt. Oké, first things first: Alacsony szinten nem létezik olyan, hogy "for ciklus". A for ciklus lényegében egy syntax candy, ami egy while ciklust utilizál magában, ezt pedig körülveszi egy inicializációs, és egy lépéses kódszegmenssel, és az egészet egy blokkba foglalja.


A for(int i=0; i<10; i++){ Console.WriteLine(i) } nagyjából a következőnek felel meg:


{

int i=0;

while(i<10)

{

Console.WriteLine(i);

i++;

}

}


Az egész körbe van véve egy plusz kapcsos zárójellel, így a teljes ciklus egy külön blokkba kerül, ezért a benne definiált ciklusváltozó nem lesz látható a cikluson kívül.


A for ciklus éppezért egy okosított while ciklusnak tekinthető. NEm enhéz észrevenni, hogy a for(;i<10;) pontosan ugyanannak felel meg, mint a while(i<10). A for ciklus tehát bármit meg tud valósítani, ami egy while ciklusba foglalható, és egy picit többet is, rövidebb, egyszerűbb szintaxissal.


A kettő között így funkcionálisan kár különbséget keresni, a különbség a felhasználásában rejlik, ami konvención alapszik. Aki felsorolásra while ciklust használ az.. nos, nem kifejzetten követi ezt a konvenciót, amit a legtöbb helyen nem kimondottan szeretnek.

2017. máj. 28. 02:11
Hasznos számodra ez a válasz?
 15/59 anonim ***** válasza:

Ez olyan, mint a diesel és benzin esete. Egyik az egyikre

esküszik, másik a másikra.


Nyelvenként eltérő az eredmény, eltérő a memóriakezelés,

stacket is máshogy rakja tele.


Egyébként írj baromi hosszú ciklust, ami cikluson belül

hajt végre sima műveleteket, és nézd meg, hogy van-e

időbeli eltérés a lefutás között. Nagyon meg fogsz

lepődni.

2017. máj. 28. 02:31
Hasznos számodra ez a válasz?
 16/59 A kérdező kommentje:
#14: nagyjából én is erre tippeltem. Csak azért kérdeztem, mert konkrétan a tanárom is while-t használ for ciklus helyett, akkor is, ha felsorolni kell. És azért egy kétdimenziós tömb (mátrix) kezelése esetén már kicsit erőltetettnek tartom a dolgot, mert a soronként tagolást kicsit macerásabb megoldani for ciklus nélkül.
2017. máj. 28. 07:01
 17/59 A kérdező kommentje:
#15: igen, de itt sokan azt írják, hogy a for ciklus tulajdonképpen csak egy kényelmesített while ciklus. Eszerint pedig nem különbözhetnek ilyenekben, mint a memóriakezelés.
2017. máj. 28. 07:06
 18/59 anonim ***** válasza:
Az, hogy alapvetően egy while ciklusra fordul vissza (mivel mitn mondtam, alacsony szinten nem létezik más ciklus) még nem zárja ki, hogy az egyes fordítók valami plusz okosságot, optimalizációs lépést vezessenek be a for ciklusoknál. De ez már nagyon nyelv és fordítófüggő.
2017. máj. 28. 13:48
Hasznos számodra ez a válasz?
 19/59 anonim ***** válasza:

Tessék egy kis ASM :I

[link]

2017. máj. 28. 14:08
Hasznos számodra ez a válasz?
 20/59 anonim ***** válasza:
Nem tudom melyik nyelvről beszéltek de c# ban a ciklus blokkjában definiált változók a ciklust tartalmazó blokkra is lokális és nem csak a ciklus blokkjára.
2017. máj. 28. 15:24
Hasznos számodra ez a válasz?
1 2 3 4 5 6

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, 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!