Skip to content

Anwendung: Rationale Zahlen

OOP

Mit Rationalen Zahlen kann der Computer normalerweise nicht richtig rechnen. Wir können ihm dies aber beibringen, indem wir eine Klasse Rational selbst programmieren.

Ein Beispiel:

12×13=16

Für das obenstehende Beispiel, sollte man den folgenden Code verwenden können:

python
from rational import Rational

a = Rational(1,2)
b = Rational(1,3)
c = a.mult(b)
print(c)

Aufgabe: Auftrag

  • Erstelle eine Klasse Rational im Dokument rational.py.
  • Überlege dir welche Eigenschaften eine Rationale Zahl haben muss.
  • Programmiere einen entsprechenden Konstruktor und teste diesen
  • Programmiere die __str__(self)-Funktion, welche die Zahl in einen String umwandelt und automatisch bei print aufgerufen wird.
  • Programmiere die mult-Methode
  • Versuche weitere Rechenoperationen umzusetzen (siehe unten)

Tipp

Damit die Zeile c = a.mult(b) funktioniert, muss ein neues Rational-Objekt erzeugt und zurückgegeben werden! Dazu berechnen wir also Zähler und Nenner des Ergebnisses (aus Zähler und Nenner der beiden Zahlen) und liefern dieses als neues Rational-Objekt zurück:

python
class Rational:
    def mult(self, other):
        zaehler = ...
        nenner = ...
        return Rational(zaehler, nenner)

Addition

Gleichnamig machen:

12+13=56

ev. Kürzen:

14+14=12

Subtraktion

1213=16

Division

12:13=32

Zusatzaufgabe: Operatoren überladen

Schöner wäre ja, wenn man die mathematischen Operationen, z.B. die Multiplikation nicht mit der Methode mult sondern mit dem bekannten Zeichen/Operator * aufrufen könnte, also:

python
from rational import Rational

a = Rational(1,2)
b = Rational(1,3)
c = a * b
print(c)

Dazu muss man diese Operatoren «überladen». Versuche es!
Hier wird beschrieben, wie das möglich ist:

https://www.geeksforgeeks.org/python/operator-overloading-in-python/

Zusatzaufgabe: weitere Funktionen

Mit Zahlen kann nicht nur gerechnet werden. Man kann sie auch miteinander vergleichen:

python
from rational import Rational

a = Rational(1,2)
b = Rational(1,3)
print(a < b)

Baue Vergleichsoperatoren in deine Klasse Rational ein und teste diese.

Gymnasium Kirchenfeld, fts & ros