Kezdőoldal » Számítástechnika » Programozás » ANSI C-ben megváltoztathatom...

ANSI C-ben megváltoztathatom a ciklusváltozót egy for cikluson belül?

Figyelt kérdés
A tanár szerint ez "nem jó, ezért egyes jár érte", de megmagyarázni nem tudja hogy miért "nem jó". A "The C Programming Language" c. könyben semmi erre vonatkozót nem találtam.
2015. okt. 24. 17:19
 1/7 anonim ***** válasza:
Felőlem megváltoztathatod, engem nem zavar.
2015. okt. 24. 18:54
Hasznos számodra ez a válasz?
 2/7 2xSü ***** válasza:
Meg lehet változtatni, de csak speciális esetben praktikus. A legtöbb esetben máshogy logikusabb felépíteni a programot. Egy tanár is tévedhet. Egy tanár számon kérheti azt a megoldást, amit megtanított. A tanár észreveheti azt a hibát, amitől a megoldásod nem azért nem jó, mert megváltoztattad a ciklusváltozó értékét, hanem mert nem működne jól.
2015. okt. 24. 19:37
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:

Meg lehet változtatni de az egy nagyon rossz programozási szokás és szinte minden esetben van rá jobb megoldás. Nem csak zavaró és bugok forrása lehet, de jelzi hogy a programod rosszul van strukturálva. A ciklusváltozó megváltoztatása helyett érdemes elgondolkozni a continue és break kulcsszavakon, a feltétele elágazásokon és a beágyazott ciklusokon.


Például:


int i;

for(i = 0; i < _; i++)

if(...) i+=1;


helyett írd inkább hogy


int i;

for(i = 0; i < _; i++)

if(...) continue;


Ugyan az igaz a csökkentésnél is, ahelyett hogy utólag csökkented a változót, csak akkor érje el a ciklus végét ha tényleg növelni akarsz rajta.


Át kell gondolni a dolgot, nem nagyon tudok olyan esetről ahol indokolt lenne a ciklusváltozó megváltoztatása.

2015. okt. 25. 01:45
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:

Növelésnél természetesen jó a continue, de akkor mi van ha:


int i;

for(i = 0; i < _; i++)

if(...)valami;

else --i;

2015. okt. 25. 10:13
 5/7 anonim ***** válasza:

Mondjuk használsz helyette while ciklust?

int i;

i = 0;

while (i<_) {

if (...) {

i--

} else {

i++

}

}

2015. okt. 25. 10:24
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:

Ha feltételesen növelni és csökkenteni is kell a ciklusváltozót (vagy feltételesen növelni), akkor szerintem nem for ciklust kéne használni, hanem while-t. Pl. itt egy hülye rendezés:


[link]

2015. okt. 25. 10:46
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

int i;

for(i = 0; i < _; i++)

if(...)valami;

else --i;


Ennek nincs értelme mert ha a feltétel nem teljesül akkor nem történik semmi, azaz nem változik a ciklusváltozó, végtelen ciklusban ragad. Látod hogy nem is annyira átlátható így már?


Ez ekvivalens ezzel:


int i;

for(i = 0; i < _; i++) {

while(!...); //amíg nem teljesül a feltétel, nem növelünk ciklusváltozót

valami; //ha teljesül, akkor lefut a valami és a következő iterációra ugrik

}


Ez utóbbinál már látszik mi történik!

2015. okt. 25. 13:40
Hasznos számodra ez a válasz?

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!