Practicumopgaven C++ Programmeren (2CPPP1) week 2


Een klasse voor rationale getallen.

Een rationaal getal is een getal dat kan worden geschreven als een breuk t/n, met t de teller en n de noemer, welke natuurlijk niet 0 mag zijn. De teller zowel als de noemer zijn gehele getallen. De breuk 1/2 is b.v. een rationaal getal, maar 3/6 en -15/-30 zijn even grote rationale getallen. De laatste twee zijn tot de eerste te herleiden door zowel de teller als de noemer te delen door hun ggd (grootste gemeenschappelijke deler, 3 resp. 15).

Gegeven het UML klassendiagram van de klasse Rationaal waarmee een rationaal getal kan worden gerepresenteerd. Een Rationaal-object heeft twee int attributen, teller en noemer. De klasse heeft één constructor met twee parameters t en n. Kies zelf geschikte default-waarden voor de parameters.

Rationaal.gif (31287 bytes)

Bij het maken van een Rationaal-object wordt er altijd voor gezorgd dat de waarden van de attributen teller en noemer zo klein mogelijk worden en dat de waarde van noemer altijd positief is. Gebruik daarvoor een methode reduceer(), waarin het algoritme van Euclides wordt gebruikt. Zie boek blz 144 (opgave 4.7) of gebruik Google om dit algoritme te vinde, b.v. Wikkipedia: Euclidean algorithm.


Twee Rationaal-objecten kunnen worden opgeteld resp. vermenigvuldigd (a/b + c/d = (ad+bc)/bd). Bovendien kan bij een Rationaal-object een Rationaal-object worden opgeteld en kan een Rational-object met een Rationaal-object worden vermenigvuldigd. Van deze operatoren moet je zelf de juiste typen definiëren. Verder heeft de klasse een methode doubleWaarde() die de double-waarde aflevert en een methode print() die een representatie van een Rationaal-object in het formaat t/n ( of t, als n == 1) naar cout stuurt.
  1. Implementeer de klasse Rationaal in C++. Ga na of het nodig is om een copy-constructor en een assignment-operator te definiëren. Zo ja, doe dat dan ook.
  2. Maak gebruik van assert() om te voorkomen dat een Rational-object wordt gemaakt met noemer 0.
  3. Schrijf bovendien een testprogramma waarin alle gedefinieerde functies en operatoren van de klasse Rationaal worden getest.