Archief - Q: C++ loops

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

FRozEN_FRoST

Legacy Member
Dik twee jaar gelede haddek zo wa tutorialkes gevolgd van C++, maar toen wassek nog klein (kzal zegge jong, kben nu nog steeds ne midget :p), en wassek te lui om deftige tutorials te zoeke. Enfin, nu hebbek 20 lesse en doorzettingsvermogen gevonde op www.cprogramming.com, zieter mij nen degelijke site uit, en kben nu alles van wa dak geleerd ad aant heropfrissen me veel voorbeeld oefeningeskes enzo. Nu bij loops, kweet oe ge alles doe, en hoe ge da schrijft, maar toch volgende vraag:

Wa in godsnaam is het verschil tusse FOR en WHILE? Die doen toch juist 't zelfde, 't is enkel anders geschreven... Nen DO..WHILE is duidelijk, die voert uw condition zoiezo een keer uit, maar die ander twee lijke me nogal tzelfde :p

op die site sta da ne FOR de condition pas checkt nadat em het nodige heeft uitgevoerd, en dus alsem een 9 zie, redeneert hij, das minder dan 10, voegt hij er 1 bij, en dan stopt hij bij 10, aangezien 10 niet kleiner is dan 10. Bij mij echter stopt die bij de FOR loop bij 9 al (kgebruik Dev-C++)

Reck

Legacy Member
bijvoorbeeld
Code:
for(int i = 0; i < 5; i++)
{
    <doe iets>
}

1ste loop: i is 0
2de loop: i is 1
3de loop: i is 2
4de loop: i is 3
5de loop: i is 4

uwen loop is dus 5 keer uitgevoerd, maar hij zal stoppen na i = 4.


Code:
int i = 0;

while(i < 5)
{
    <doe iets>
    i++;
}

dit doe exact hetzelfde als bovenstaande for-loop.


Nu meestal gaat ge nen for-loop gebruiken als ge op voorhand weet dat ge een bepaald aantal keren iets wilt herhalen, bv. als ge wilt loopen over elke pixel op uw scherm, zout ge zoiets kunnen schrijven als

Code:
for(int i = 0; i < (1024 * 768); i++)
{
    <doe iets>
}

een while loop daarentegen gaat ge meestal gebruiken als ge een conditie wilt checken en daarop uw aantal loops baseren, bv. kijken of uwen user bijvoorbeeld op q drukt om aan te geven dat hij een programma wil stoppen.

Code:
char keuze;

while(keuze != 'q')
{
    <doe iets>
    cout << "druk op een toets : ";
    cin >> keuze;
}

Tyfius

Legacy Member
Mja, wel ff bij vertellen, als ge zo een menu structuur gaat schrijven, gade meestal ne do-while gebruiken. Anders moete eerst nog uw char gaan definieren enzo, 't is gewoon veen simpeler/sneller :)

killgore

Legacy Member
ik meende mij te herinneren dat een compiler intern een for omzet naar een while-lus zoals enkele posts hierboven ;).

xBEHOLDERx

Legacy Member
Bij nen FOR NEXT weet ge hoeveel iteratie's er moeten gebeuren, bij een DO WHILE is het aantal iteratie's onbekend.

Zoiets.

orez

Legacy Member
xBEHOLDERx zei:
Bij nen FOR NEXT weet ge hoeveel iteratie's er moeten gebeuren, bij een DO WHILE is het aantal iteratie's onbekend.

Zoiets.

Ge kunt ook ne for next schrijven waar uw iteraties onbekend zijn ;)

Unzip Attack

Legacy Member
élke while lus is te schrijven als een for lus en andersom, tis puur een smaakkeuze.
Persoonlijk gebruik ik in 90% een for, 10% als er bijvoorbeeld énkel een bool staat waarop getest wordt ofzo...

killgore

Legacy Member
Unzip Attack zei:
élke while lus is te schrijven als een for lus en andersom, tis puur een smaakkeuze.
Persoonlijk gebruik ik in 90% een for, 10% als er bijvoorbeeld énkel een bool staat waarop getest wordt ofzo...

ik denk dat dit niet smaak is, maar gewoon logisch is, for is echt gewoon iets x aantal keer doen, while zal je meer gebruiken om iets te doen zolang als een voorwaarde waar blijft ;).

Vich

Legacy Member
killgore zei:
ik denk dat dit niet smaak is, maar gewoon logisch is, for is echt gewoon iets x aantal keer doen, while zal je meer gebruiken om iets te doen zolang als een voorwaarde waar blijft ;).

Dat klopt, en dat is dan ook het enige juiste antwoord.

Unzip Attack

Legacy Member
killgore zei:
ik denk dat dit niet smaak is, maar gewoon logisch is, for is echt gewoon iets x aantal keer doen, while zal je meer gebruiken om iets te doen zolang als een voorwaarde waar blijft ;).

jij zegt "zolang als een voorwaarde blijft" , dat is in beide gevallen ALTIJD zo, oftewel test je op een boolean oftewel op een integer waarde die niet mag overschreden worden...

Vich

Legacy Member
Unzip Attack zei:
jij zegt "zolang als een voorwaarde blijft" , dat is in beide gevallen ALTIJD zo, oftewel test je op een boolean oftewel op een integer waarde die niet mag overschreden worden...

Klopt, maar hij bedoelt het volgens mij ook niet zo, hij bedoelt meer dat het belangrijk is dat iets "logischer" geinterpreteerd kan worden.

Als je een concrete reeks hebt, dan kan je beter for gebruiken en als je een niet-concrete reeks hebt, dan gebruik je while. Je kan beide natuurlijk in alletwee de gevallen gebruiken, maar het staat gewoon logischer als je ze op deze manier kiest. Dit bevordert de leesbarheid van de code en dat is een zeer belangrijk aspect bij programmeren.

Ibaun

Legacy Member
Vich zei:
Klopt, maar hij bedoelt het volgens mij ook niet zo, hij bedoelt meer dat het belangrijk is dat iets "logischer" geinterpreteerd kan worden.

Als je een concrete reeks hebt, dan kan je beter for gebruiken en als je een niet-concrete reeks hebt, dan gebruik je while. Je kan beide natuurlijk in alletwee de gevallen gebruiken, maar het staat gewoon logischer als je ze op deze manier kiest. Dit bevordert de leesbarheid van de code en dat is een zeer belangrijk aspect bij programmeren.

Misschien duidelijker om te zeggen dat een for gebruikt wordt wanneer je het exacte aantal stappen weet, en een while in de andere gevallen.

killgore

Legacy Member
Ibaun zei:
Misschien duidelijker om te zeggen dat een for gebruikt wordt wanneer je het exacte aantal stappen weet, en een while in de andere gevallen.
yup, dat wil ik zeggen

bij een for krijg je het aantal keren dat je moet loopen (ookal zit dit in een variabele)

bij een while ga je dit vaker binnen de lus zelf bepalen.

Unzip Attack

Legacy Member
toch verre van regel hoor, for's met !bools-expressies komen in HOPEN voor, eigenlijk wordt gewoon de :
while(i < 10)
i++

vermeden omdat het korter kan met een for... anyway qua duidelijkheid van programmeerstijl heeft dit in mijn ogen er weinig mee te maken, die ligt op véél andere vlakken zoals variabelnamen, hoofdletters, classenamen, indentering, haakjes gebruik,...

Silenger.BE

Legacy Member
Het gebruik van for en while is afhankelijk van de toepassing, maar meestal kan je ze onderling omwisselen.

Code:
for(int i = 0; i < 5; i++)
{
}

zal beter zijn dan wanner je vb dit doet,

Code:
int i = 0;

while(i < 5)
{
    <doe iets>
    i++;
}

bij de for loop zal de compiler direct weten dat i alleen tijdens de loop moet gebruikt worden en mag dan bv gewoon ecx register (register die gebruikt bij x86 om het antaal herhaling duidelijk te maken aan de processor) zijn.
anders zou het kunnen dat hij bij de while zelf i op de stack allocate, maar dat zal hopelijk niet gebeuren.

Unzip Attack

Legacy Member
Silenger.BE zei:
Het gebruik van for en while is afhankelijk van de toepassing, maar meestal kan je ze onderling omwisselen.

Code:
for(int i = 0; i < 5; i++)
{
zal beter zijn dan wanner je vb dit doet,

[CODE]
int i = 0;

}

while(i < 5)
{
<doe iets>
i++;
}
[/CODE]

bij de for loop zal de compiler direct weten dat i alleen tijdens de loop moet gebruikt worden en mag dan bv gewoon ecx register (register die gebruikt bij x86 om het antaal herhaling duidelijk te maken aan de processor) zijn.
anders zou het kunnen dat hij bij de while zelf i op de stack allocate, maar dat zal hopelijk niet gebeuren.


true true, maar wil je platform onafhankelijke code moet je die "int i = 0" BUITEN de for lus houden...

Reck

Legacy Member
huh? is da ni gewoon onderdeel van gestandaardiseerde C++? is da echt afhankelijk van uw platform?

Vich

Legacy Member
Bij de meeste compilers kan je dit doen:

Code:
for (int i=0; i<max; ++i)
{
// eerste lus
}

for (int i=0; i<max; ++i)
{
// tweede lus
}

Maar bij andere compilers kan dat een error geven omdat die compiler "i" twee keer in dezelfde scope gedeclareerd ziet. Ik weet niet 100% zeker wat standaard is, maar ik denk dat bovenstaande code standaard is (vermits GCC dat toelaat).

Reck

Legacy Member
aah, de VC++ 6.0 bug dus

nu ja, kzet mn for loop altijd nog es apart tussen haakskes om zo'n dingen te voorkomen :)

S3cT0r

Legacy Member
Bij mij geeft het altijd errors als ik de var declare in de for loop, daarom:

Code:
register int i;

for (i = 0;i < 10;i++) {
   code;
}

for (i = 0;i < 10;i++) {
   code;
}
...

Grote kans dat de compiler de "i" in de register steekt dan, dit is vooral handig bij enorme loops, niet zoals in het voorbeeld dus.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan