if (( i % 2) == 0) --> ik niet snappen

Status
Niet open voor verdere reacties.

stevebravo

Gebruiker
Lid geworden
16 jan 2010
Berichten
156
je hebt deze hele simpele code, en ik weet ook wat het resultaat zal worden namelijk 0 2 4 6 t/m 18, maar ik begrijp de code niet.. kan iemand mij deze uitleggen?

[CPP]#include <iostream>
using namespace std;

int main()
{
for (int i = 0; i < 20; i++)
{
if ( (i % 2) ==0)
cout << i << endl;
}

system("pause");
return 0;
}[/CPP]

de for statement snap ik goed.. maar de if statement met de i% 2 == 0 snap ik niet..
als je bijvoorbeeld het getal 1 neemt.. dan is 1 % 2 toch 0,02 ??
 
Laatst bewerkt:
Het is niet procent, het is modulo (ook wel bekend als rest na deling)

Wat het eigenlijk doet is zo vaak mogelijk het rechter getal van het linker getal afhalen, totdat niet meer kan, en wat er dan nog over is, dat is de uitkomst.

Dus, bijv 13 % 3 zou geven:

13 -3 = 10 - 3 = 7 - 3 = 4 - 3 = 1.

Van 1 kun je geen 3 afhalen, dus het antwoord is 1.
 
Het is niet procent, het is modulo (ook wel bekend als rest na deling)

Wat het eigenlijk doet is zo vaak mogelijk het rechter getal van het linker getal afhalen, totdat niet meer kan, en wat er dan nog over is, dat is de uitkomst.

Dus, bijv 13 % 3 zou geven:

13 -3 = 10 - 3 = 7 - 3 = 4 - 3 = 1.

Van 1 kun je geen 3 afhalen, dus het antwoord is 1.

Ok bedankt..
maar de code zoals hierboven is aangegeven geeft alleen "even" getallen weer..
het begint bij 0, 2, 4, 6 en eindigt bij 18...

Waarom geeft deze code niet de oneven getallen weer?
 
Als je goed kijkt staat er:
if ( (i % 2) ==0)
cout << i << endl;

Oftewel: Er worden alleen even getallen getoond via cout, want i % 2 == 0 is alleen waar bij even getallen...

Tijs.
 
Als je goed kijkt staat er:
if ( (i % 2) ==0)
cout << i << endl;

Oftewel: Er worden alleen even getallen getoond via cout, want i % 2 == 0 is alleen waar bij even getallen...

Tijs.

ik begrijpen!

nog wat extra info..

in welke belangrijke programmeer situaties wordt zo een modulus gebruikt?
 
Een simpel iets zou zijn als je (bijv.) 2 dezelfde onderdelen (condensatoren bijv.) uit de voorraad nodig hebt om een circuit-bord in elkaar te zetten je wilt weten of je huidige voorraad precies goed is of dat je met restvoorraad blijft zitten als je de voorraad helemaal probeert te gebruiken om circuit-borden in elkaar te zetten.
Is de voorraad 'precies goed', dan moet de modulo 0 zijn. Zou je restvoorraad over houden, dan moet de modulo ongelijk aan 0 zijn.

Tijs.
 
Het wordt ook gebruikt als je om en om iets wilt doen (met modulo 2)

Als je bijvoorbeeld de inhoud van een lijst wil splitsen over twee lijsten kun je een modulo 2 gebruiken en als het 0 is gaat het naar lijst A en anders naar lijst B.

Verder heb je het bij allerlei wiskundige dingen ook nodig maar daar heb ik zo een twee drie geen voorbeeld van.
 
Als je een bepaalde waarde binnen een minimum en een maximum wilt houden komt de modulo operator goed van pas. Bijvoorbeeld bij het genereren van een willekeurig getal tussen 10 en 120: waarde = (rand() % (120 - 10)) + 10. Of als je de rotatie van een object bijhoudt en die rotatie graag tussen de 0 en 360 graden houdt.
Het is een veel voorkomende oplossing.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan