|
|
||
|---|---|---|
| .. | ||
| img | ||
| readme.md | ||
readme.md
Zahlen zur Basis 4
🎓 Benotetes Assignment 🎓
📆 Fällig: 07.04.2026 📆
Zum Gedenken an Chuck Norris gehen Sie heute mal wieder ins Kino und schauen sich Missing in Action an. So richtig gut ist der Film nicht gealtert, aber es ist eben ein Klassiker und ordentlich Action gibt es auch.
Als Sie aus dem Kino herauskommen, ist auf der Straße ganz viel Aufruhr und die Menschen laufen wild durcheinander. Sie fragen eine flüchtende Person, was denn passiert ist, und bekommen als Antwort „die Aliens sind da, die Aliens sind da“.
Ihr Blick fällt auf das Hochhaus der Technischen Hochschule und tatsächlich beschießt gerade ein Alien-Raumschiff das schöne neue Logo der TH oben am Gebäude. Mögen die Außerirdischen die Farbe etwa nicht? Was haben die gegen die TH?
Sie machen sich auf den Weg nach Hause, um sich im Keller vor den Außerirdischen zu verstecken. Kurz vor der Haustür spüren Sie ein seltsames Kribbeln und fühlen sich plötzlich schwerelos. Sie heben vom Boden ab, Ihr Blick geht nach oben und da ist ein weiteres Alien-Raumschiff, das Sie mit einem Traktorstrahl ansaugt. Verdammt, Sie wissen aus dem Kino, was jetzt kommen wird: Entweder machen die Aliens mit Ihnen seltsame Versuche oder sie wollen Ihr Hirn aussaugen. In Gedanken verabschieden Sie sich von dieser Welt und ärgern sich, dass Sie nicht mehr Party gemacht haben, anstatt zu studieren.
Im Raumschiff angekommen steht Ihnen plötzlich ein Alien gegenüber, spricht Sie in bestem Hochdeutsch an und stellt sich als ᎨᎭᎮᎹᏅᏇᏈᏍ, oder kurz ᏇᏈ, vor. ᏇᏈ erklärt die Situation: Auf dem Planeten der Außerirdischen hat man nach der Erfindung der künstlichen Intelligenz alle Informatiker:innen entlassen und sich ganz auf die Programme aus der KI verlassen. Die KI hat extrem viele Sicherheitslücken in die Software eingebaut, die man aber ohne Expert:innen nicht entdecken konnte. Hacker vom Nachbarplaneten haben diese Sicherheitslücken genutzt, um einen IPDoS-Angriff zu fahren (Interplanetary Denial of Service). Jetzt ist die Zivilisation vollkommen am Ende und die Aliens entführen Wesen von anderen Planeten, die programmieren können.
„Ausgerechnet mich?“, rufen Sie, „Ich bin erst im 2. Semester und habe noch nicht einmal Programmieren 2 bestanden.“
„Das ist kein Problem“, erklärt Ihnen ᏇᏈ, „es geht um eine ganz einfache Aufgabe. Wir bauen unsere Systeme komplett neu auf. Als Erstes brauchen wir eine Darstellung unserer Zahlen.“
„Nehmt doch einfach Java und den Datentyp long“, entgegnen Sie, danz Stolz auf Ihre Kenntnisse aus Programmieren 1.
„Java ist schon ganz knorke wegen der plattformunabhängigkeit, aber mit long können wir wirklich nichts anfangen, wir haben nur vier Finger und arbeiten deshalb weder binär noch zur Basis 10, sondern zur Basis 4“, erklärt das Alien.
„Wir beamen dich auch wieder herunter, wenn du das Programm fertig hast, versprochen.“ Dabei schaut es irgendwie hungrig und gierig auf Ihren Kopf und fummelt mit einem großen, metallenen Strohhalm und einem Hammer herum. Und warum kreuzt es gerade die Finger?
Ihnen bleibt aber nichts anderes übrig, als sich in die Arbeit zu stürzen...
Paket
Gehen Sie in das Paket pr2.strukturierung.quaternary.
Implementierung
Schreiben Sie eine Klasse QuaternaryNumber, welche Zaheln zur Basis vier (4) darstellen kann. In diesem System zählt man wie folgt: 0, 1, 2, 3, 10, 11, 12, 13, 20, 21, 22, 23, ...
Die Klasse hat folgende Eigenschaften:
- Die Objekte der Klasse sind unveränderlich (immutable), d.h. die Daten eines Objekts können nach der Erzeugung nicht mehr verändert werden.
- Beim Erzeugen neuer Objekte (Konstruktor) gibt der/die Benutzer:in den Wert entweder
- als
long- Wert (zur Basis 10) oder - als
Stringzur Basis 4. D.h.new QuaternaryNumber(4)undnew QuaternaryNumber("13")ergeben denselben Wert. Führende Nullen werden ignoriert.
- als
- Die Klasse kann positive und negative Zahlen verwalten.
- Die Klasse bietet elementare arithmetische Operationen an, die weiter unten beschrieben werden.
Intern werden die Zahlen in einem Array vom Typ byte[] gespeichert, wobei jedes Element einer Ziffer aus dem System entspricht, also die Werte 0, 1, 2 und 3 annehmen kann. Die interne Speicherung erfolgt mit der niedrigst-wertigen Stelle zuerst.
Die Klasse soll von der Klasse java.lang.Number abgeleitet werden.
Implementieren Sie bitte die folgenden Methoden in der Klasse QuaternaryNumber:
-
Anlegen einer neuen Zahl und Befüllen mit entsprechenden Werten. Die Zahl kann sowohl in der oben beschriebenen Form entweder als
Stringoder alslong-Wert angelegt werden. -
Anlegen einer neuen Zahl aus einer vorhandenen Zahl (Copy Constructor)
-
Addieren zweier
QuaternaryNumber(add) oder einerQuaternaryNumberund eineslong-Wertes (add). -
Subtrahieren zweier
QuaternaryNumber(sub) oder einerQuaternaryNumberund eineslong-Wertes (sub). -
Multiplizieren zweier
QuaternaryNumber(mul) oder einerQuaternaryNumberund eineslong-Wertes (mul). -
Dividieren zweier
QuaternaryNumber(div) oder einerQuaternaryNumberund eineslong-Wertes (div). -
Berechnen des ganzzahligen Divisionsrestes zweier
QuaternaryNumber(remainder) oder einerQuaternaryNumberund eineslong-Wertes (remainder). -
Auslesen des Wertes Fügen Sie noch eine Methode qroot hinzu, welche die kubische Wurzel der gespeicherten Zahl zurückgibt.
- als
int(intValue), - als
long-Wert (longValue), - als
float(floatValue), - als
double-Wert (doubleValue), - als
String(toString).
- als
-
Vergleich zweier Zahlen auf Gleichheit (
equals).
Abgabe: Source-Code der Klasse QuaternaryNumber.
Tests
Überprüfen Sie die Funktionalität Ihrer Implementierung mit entsprechenden JUnit-Tests und weisen Sie mit diesen Tests nach, dass die implementierten Operationen richtig funktionieren. Testen Sie alle Methoden und Konstruktoren. Denken Sie an mögliche Randfälle (Überlauf / Unterlauf etc.)
Abgabe: Source-Code der Tests als QuaternaryNumberTest.
Abgabe
Alle Abgaben für die Vorlesung erfolgen über git und das Ihnen zugeordnete Repository.
Hierzu gehen Sie wie folgt vor:
- Öffnen Sie eine Kommandozeile (Terminal).
- Gehen Sie in Ihr Working Directory.
- Rufen Sie mit
bin/submit.shdas Skript auf, das die Lösungen testet und kompiliert. Wenn Maven eine Fehlermeldung zeigt, beheben Sie diese zuerst, bevor Sie mit dem nächsten Schritt fortfahren. - Wenn Sie Meldung "✅ Projekt gebaut" bekommen, checken Sie Ihre Änderungen in
gitauf der Kommandozeile ein (comitten), d.h. mitgit addundgit commit. Verwenden Sie nicht Eclipse für diesen Schritt. - Rufen Sie mit
bin/submit.sherneut das Skript auf. Wenn alles klappt, bekommen Sie die Anzeige "✅ Aktuelle Lösungen eingereicht" und Ihre Lösung ist im System angekommen. - Überprüfen Sie über das Web-Frontend, ob alles so im Repository liegt, wie Sie es erwarten.