Aufgabe: römische Zahlen: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 2: | Zeile 2: | ||
[[Category:Ausbildung]] | [[Category:Ausbildung]] | ||
Die Aufgabe besteht darin, römische Zahlen in arabische umzurechnen. | Die Aufgabe besteht darin, römische Zahlen in arabische umzurechnen. | ||
Es giebt verschiedene Systeme und Regeln für die Berechnung | Es giebt verschiedene Systeme und Regeln für die Berechnung. | ||
Übung handelt, nehmen wie die nächstliegende Notation: | Da es sich um eine Übung handelt, nehmen wie die nächstliegende Notation: | ||
Wir beschränken uns auf die (beliebige) Reihung von Ziffern-Zeichen die addiert werden. | Wir beschränken uns auf die (beliebige) Reihung von Ziffern-Zeichen, die addiert werden. | ||
Die Ziffern sind: I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 | Die Ziffern sind: I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 | ||
Bsp: MCCCLXV = 1000 + 3 * 100 + 50 + 10 + 5 = 1365 | Bsp: MCCCLXV = 1000 + 3 * 100 + 50 + 10 + 5 = 1365 | ||
Zeile 30: | Zeile 30: | ||
Folgende Iterationen sind vorgesehen: | Folgende Iterationen sind vorgesehen: | ||
*Setup | *Setup | ||
:Zunächst | :Zunächst wird in der IDE das Projekt eingerichtet und die Schnittstelle definiert. | ||
*einzelne Ziffern umrechnen | *einzelne Ziffern umrechnen | ||
:Nacheinander wird jede einzelne Ziffer umgerechnet: I V X L C D M | :Nacheinander wird jede einzelne Ziffer umgerechnet: I V X L C D M | ||
Zeile 36: | Zeile 36: | ||
*Zahlen mit einer festen Zahl (größer eins) von Ziffern umrechnen | *Zahlen mit einer festen Zahl (größer eins) von Ziffern umrechnen | ||
:Nacheinander werden Folgen von Ziffern umgewandelt. Beginne mit ''zwei'' Ziffern. | :Nacheinander werden Folgen von Ziffern umgewandelt. Beginne mit ''zwei'' Ziffern. | ||
:Wenn das Programm für alle 2-Ziffern-Kombination funktioniert wende Dich 3-Ziffern-Kombinationen zu und so fort. | :Wenn das Programm für alle 2-Ziffern-Kombination funktioniert, wende Dich den 3-Ziffern-Kombinationen zu und so fort. | ||
:Überlege Dir dabei, wie Du Dein Programm für beliebig lange Folgen erweitern kannst. | :Überlege Dir dabei, wie Du Dein Programm für beliebig lange Folgen erweitern kannst. | ||
:Gehe zur nächsten Iteration, wenn Du so weit bist. | :Gehe zur nächsten Iteration, wenn Du so weit bist. | ||
Zeile 62: | Zeile 62: | ||
Schritt der ersten Iteration. Das Vorgehen wird für jeden Schritt jeder Iteration gleich sein: | Schritt der ersten Iteration. Das Vorgehen wird für jeden Schritt jeder Iteration gleich sein: | ||
*Schreibe einen Test der den Schritt kontrolliert<br>Der Test ist rot | *Schreibe einen Test, der den Schritt kontrolliert.<br>Der Test ist rot | ||
*Erweitere Deine Implementierung um die Funktionalität<br>Der Test wird grün | *Erweitere Deine Implementierung um die Funktionalität.<br>Der Test wird grün | ||
*Stelle sicher, daß alle anderen Tests grün sind | *Stelle sicher, daß auch alle anderen Tests grün sind | ||
So verfährst Du bis alles fertig ist. | So verfährst Du, bis alles fertig ist. |
Aktuelle Version vom 2. August 2021, 10:25 Uhr
Die Aufgabe besteht darin, römische Zahlen in arabische umzurechnen. Es giebt verschiedene Systeme und Regeln für die Berechnung. Da es sich um eine Übung handelt, nehmen wie die nächstliegende Notation:
Wir beschränken uns auf die (beliebige) Reihung von Ziffern-Zeichen, die addiert werden. Die Ziffern sind: I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 Bsp: MCCCLXV = 1000 + 3 * 100 + 50 + 10 + 5 = 1365
Die Reihenfolge sei zunächst egal: IV = VI = 6
Fachliche Fragen
Betrachte die Aufgabe als Projekt-Auftrag von Deinem Ausbilder. Wann immer fachliche Fragen auftreten wie etwa "Was ist mit kleinen Buchstaben?", notiere sie, überlege welche Möglichkeiten es giebt und besprich sie mit dem Auftraggeber. Versuche stets die Fragen zu klären bevor Du mit der Implementierung beginnst.
- Welche Erfahrungen machst Du damit?
Der Projekt-Plan
Wir gehen die Aufgabe iterativ an. In jeder Runde fügen wir ein neues Feature hinzu und decken dabei alle Erweiterungen durch Unit-Tests ab.
Im Vordergrund steht nicht die Lösung der Aufgabe, sondern das Vorgehen bei der Entwicklung:
Sei Dir bei jedem Schritt bewußt, was Du tust und warum Du es tust.
Halte Dich an den Plan, auch wenn Du am liebsten alles auf einmal umsetzen möchtest :-)
Folgende Iterationen sind vorgesehen:
- Setup
- Zunächst wird in der IDE das Projekt eingerichtet und die Schnittstelle definiert.
- einzelne Ziffern umrechnen
- Nacheinander wird jede einzelne Ziffer umgerechnet: I V X L C D M
- Die Iteration ist abgeschlossen, wenn das Programm alle sieben Ziffern umrechnen kann.
- Zahlen mit einer festen Zahl (größer eins) von Ziffern umrechnen
- Nacheinander werden Folgen von Ziffern umgewandelt. Beginne mit zwei Ziffern.
- Wenn das Programm für alle 2-Ziffern-Kombination funktioniert, wende Dich den 3-Ziffern-Kombinationen zu und so fort.
- Überlege Dir dabei, wie Du Dein Programm für beliebig lange Folgen erweitern kannst.
- Gehe zur nächsten Iteration, wenn Du so weit bist.
- Zahlen beliebiger Länge umrechnen
- Das Programm soll nun Zahlenfolgen beliebiger Länge umrechnen können.
- Differenzen berücksichtigen (optional)
- Wenn Du noch nicht genug hast, überlege, wie Du die Differenz-Regel umsetzen kannst.
- Dabei werden kleinere Ziffern, die links einer Größeren stehen von dieser abgezogen:
- IV = 4, IX = 9
Präsentiere das Ergebnis -- möglichst nach jeder Iteration -- dem Auftraggeber. Sprich offene Fragen an und sprich über mögliche Lösungsvarianten (auch technischer Natur).
Vorgehen
Das hier beschriebene Vorgehen wird auch als "Test First" bezeichnet, weil immer erst der Test und anschließend die Implementierung geschrieben wird.
Zur Vorbereitung legst Du eine Klasse mit einer Methode für die Umrechnung an.
Konzentriere Dich auf den jeweiligen Schritt der jeweiligen Iteration. Die erste Methode muß nicht
mit Strings arbeiten, sondern darf auch Zeichen vom Typ char
umrechnen.
Es ist normal, daß Schnittstellen im Laufe der Entwicklung geändert oder erweitert werden.
Als nächstes legst Du dazu eine Test-Klasse an und schreibst den ersten Unit-Test für den ersten Schritt der ersten Iteration. Das Vorgehen wird für jeden Schritt jeder Iteration gleich sein:
- Schreibe einen Test, der den Schritt kontrolliert.
Der Test ist rot - Erweitere Deine Implementierung um die Funktionalität.
Der Test wird grün - Stelle sicher, daß auch alle anderen Tests grün sind
So verfährst Du, bis alles fertig ist.