Meer informatie over Bewerkingen op getallen

Wat zijn div en mod?

div en mod zijn bewerkingen op getallen.

Hoe zitten div en mod in elkaar?

De operaties div en mod passen we alleen toe op gehele getallen.

De bewerking div is een geheeltallige deling. Hierbij wordt bij een deling alleen het gehele getal behouden, de rest wordt genegeerd. We kunnen stellen dat , want 3 past 2x in 7. De rest (1) wordt genegeerd.

Voorbeelden:

De bewerking modulo (of kortweg mod) is de rest van een deling. Het is dus de rest die overblijft na het uitvoeren van een div.

Voorbeelden:

Hoe gebruik je div en mod?

In code

Python

x = 17 // 5  # div : 3
y = 17 % 5   # mod : 2

Let op: de // is bedoeld voor div en de / wordt gebruikt voor een normale deling

C# / C++

int x = 17 / 5  // div : 3
int y = 17 % 5  // mod : 2

In C# wordt de / zowel gebruikt voor een normale deling als voor de div. De werking van / is afhankelijk van het getal wat ervoor staat. In het bovengenoemde voorbeeld staat er een geheel getal (17), waardoor een div wordt uitgevoegd.

Als er 17.0 / 5 had gestaan, dan voert C# een normale deling uit. x kan dan geen int zijn, maar zou dan een double of float moeten zijn.

Negatieve getallen

We willen graag bepalen: en . Je zou kunnen stellen dat:

  1. en , want
  2. en , want

Verschillende talen hebben verschillende implementaties van div en mod op negatieve getallen. Zie ook https://torstencurdt.com/tech/posts/modulo-of-negative-numbers/

Bij theoretische vragen binnen dit cluster mag je er vanuit gaan dat we alleen de div en mod toepassen op gehele positieve getallen.

Toepassingen

  • Financiën Stel je wil 87 cent omwisselen in munstukken van 20, 5 en 1 cent.
    int bedrag = 87;
     
    int aantal_20 = bedrag / 20;
    int rest = bedrag % 20;
    int aantal_5 = rest / 5;
    int aantal_1 = rest % 5;
  • Bepalen of een getal deelbaar is door een ander getal: als , dan is deelbaar door .
  • Controleren of een getal even of oneven is: als , dan is even, als , dan is oneven.
  • Tijd omrekenen: seconden omzetten naar dagen, uren, minuten en seconden.
  • Uitvoer netjes maken: wanneer je om de zoveel stapjes een newline op de console wil schrijven.
  • Spelletjes: bepalen actieve speler:
    huidige_speler = beurt_nummer % aantal_spelers;

Casus

Stel je hebt 183917 seconden. Hoeveel dagen, uren, minuten en seconden zijn dit?

Mogelijke uitwerking van de casus

int totaal_seconden;
int rest;
int dagen, uren, minuten, seconden;
 
totaal_seconden = 183917;
 
seconden = totaal_seconden % 60;
rest = totaal_seconden / 60;  // rest-minuten
 
minuten = rest % 60;
rest = rest / 60;  // rest-uren
 
uren = rest % 24;
dagen = rest / 24;
 
Console.WriteLine($"{dagen} dagen, {uren} uren, {minuten}, minuten, {seconden} seconden");

Uitvoer van uitwerking

2 dagen, 3 uren, 5, minuten, 17 seconden

Casus

Stel je hebt een array van getallen die je wil afdrukken. Hierbij wil je graag een nette uitvoer, waarbij er steeds 3 getallen op 1 regel staan.

Mogelijke uitwerking van de casus

int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
for (int i = 0; i < a.Length; i++)
{
    Console.Write($"{a[i]} ");
    if (i % 3 == 2)
        Console.WriteLine();
}

Uitvoer van uitwerking

1 2 3
4 5 6
7 8 9
10 11

Bronnen

div en mod op negatieve getallen: https://torstencurdt.com/tech/posts/modulo-of-negative-numbers/


Volgende stap: Oefeningen div en mod