Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter Aufgabe 3: Konto Um Geldbeträge korrekt zu verwalten, sind zwecks Vermeidung von Rundungsfehlern entweder alle Beträge in Cents umzuwandeln und dann nur ganzzahlig zu rechnen oder aber und das ist die Variante, die hier verwendet werden soll es ist eine Struktur Geld zu implementieren, die über zwei Komponenten verfügt: Euro und Cent. Diese beide Komponenten werden immer getrennt gehandhabt, d.h. es soll damit kein Kontostand der cent Form s tan d = euro + berechnet und ausgegeben werden (dies gilt auch für die 100 Folgeaufgaben 4 und 5). Sie erstellen ein Programm, das innerhalb eines Durchlaufs nur Einzahlungen auf ein Konto erlaubt. Das Konto beginnt mit 0.00 Euro. Nach jeder Einzahlung wird der Kontostand ausgegeben. Anschließend erfolgt die Nachfrage auf noch einen Durchlauf. Ein Programmdurchlauf könnte also folgendes Aussehen haben: Geldeinzahlung Euro (nur ganzzahlig!)2 Cent (nur ganzzahlig und kleiner 100!)2 Der aktuelle Kontostand beträgt 2.02 Euro Euro (nur ganzzahlig!)0 Cent (nur ganzzahlig und kleiner 100!)8 Der aktuelle Kontostand beträgt 2.10 Euro Euro (nur ganzzahlig!)0 Cent (nur ganzzahlig und kleiner 100!)90 Der aktuelle Kontostand beträgt 3.00 Euro Euro (nur ganzzahlig!)12 Cent (nur ganzzahlig und kleiner 100!)0 1
Der aktuelle Kontostand beträgt 15.00 Euro Noch einen Durchlauf?(j/n)n Aufgabe 4: Kontoführung Modifizieren Sie Aufgabe 3. Statt mit einer Struktur soll sie mit einem Zellobjekt gelöst werden. Außerdem soll es jetzt möglich sein, Geld abzuheben, allerdings nur so lange, wie noch Geld auf dem Konto ist. Soll heißen, es soll nicht möglich sein, das Konto zu überziehen (sehr zum Schrecken der Bank). Als Zellobjekt legen Sie an: % Vorbesetzen des Kontos konto = cell(1, 2); konto{1, 1} {1} = 0; konto{1, 1} {2} = 'Euro'; konto{1, 2} {1} = 0; konto{1, 2} {2} = 'Cent'; Dann lassen Sie dem Anwender folgende Auswahlmöglichkeiten: durch Eingabe von 0 wird das Programm abgebrochen durch Eingabe von 1 der aktuelle Kontostand erfragt durch Eingabe von 2 kann eine Einzahlung vorgenommen werden durch Eingabe von 3 kann eine Ausgabe vorgenommen werden (die allerdings möglicherweise abgewehrt wird). Beispiel für einen Programmdurchlauf: Kontoführung Bitte geben Sie jetzt Ihre Wahl ein! 0 Ist natürlich langweilig. Eine andere Sitzung: Kontoführung 2
Bitte geben Sie jetzt Ihre Wahl ein! 1 Der aktuelle Kontostand beträgt 0.00 Euro Bitte geben Sie jetzt Ihre Wahl ein! 2 Euro (nur ganzzahlig!) 4 Cent (nur ganzzahlig und kleiner 100!) 5 Der aktuelle Kontostand beträgt 4.05 Euro Bitte geben Sie jetzt Ihre Wahl ein! 2 Euro (nur ganzzahlig!) 0 Cent (nur ganzzahlig und kleiner 100!) 96 Der aktuelle Kontostand beträgt 5.01 Euro Bitte geben Sie jetzt Ihre Wahl ein! 3 Wie viel möchten Sie abheben? Euro (nur ganzzahlig!) 1 Cent (nur ganzzahlig und kleiner 100!) 2 Der aktuelle Kontostand beträgt 3.99 Euro Bitte geben Sie jetzt Ihre Wahl ein! 3 Wie viel möchten Sie abheben? Euro (nur ganzzahlig!) 4 Cent (nur ganzzahlig und kleiner 100!) 0 Mit dem Betrag 4.00 Euro wird das Konto überzogen. Abheben nicht gestattet. Ihr aktueller Kontostand beträgt 3.99 Euro 3
Noch einen Durchlauf?(j/n)n Aufgabe 5 Konto-Objekt Es soll ein Objekt Konto implementiert werden. Arbeiten Sie dabei die nachfolgenden Schritte ab: @konto Erstellen Sie zunächst einen Ordner @konto, in dem alle benötigten Dateien abgelegt werden. Konstruktor In diesen Ordner muss(!) zunächst eine Datei konto.m abgelegt werden, die den Konstruktor enthält. Die erste Zeile soll so aussehen: function konto Wählen Sie für ein Konto-Objekt folgende Struktur: k.betrag.euro k.betrag.cent k.waehrung Setzen Sie die Elemente euro und cent im Konstruktor auf 0, das Element waehrung auf Euro. Testen Sie, indem Sie im Kommandofenster konto eingeben. Methoden zur Anzeige: Implementieren Sie eine Methode char, so dass auf dem Bildschirm erscheint, wenn Sie das Kommando konto; char(k) eingeben, dann ausgegeben wird: ans = 0.00 Euro Implementieren Sie eine Methode display, die immer dann aufgerufen wird, wenn Sie ein Kommando nicht mit Semikolon abschließen: 4
k 0.00 Euro Methoden für Kontenbewegungen: Implementieren Sie eine Methode getsaldo: Sie soll den aktuellen Kontostand zurückgeben: [euro cent] = getsaldo(k): Also beispielsweise: konto; [euro cent] = getsaldo(k) euro = 0 cent = 0 Als Parameter in der Parameterliste muss(!) das Konto-Objekt stehen damit MATLAB weiß, dass es sich um einen Aufruf eben dieses Objekts handelt (OOP-Kundige werden vielleicht den Aufruf k.getsaldo() besser finden aber diese Form ist in MATLAB nicht implementiert). Einzahlungen sollen mit function einzahlung(k, euro, cent) möglich sein. Wie bereits bei getsaldo muss auch hier das erste Element der Parameterliste das Konto- Objekt sein, auf das eingezahlt wird. Die Methode wehrt negative Einzahlungen mit einer dezenten Fehlermeldung ab: einzahlung(k, 100, 0) 100.00 Euro einzahlung(k, 25, 10) 125.10 Euro einzahlung(k, -12, 0) negative Beträge können nicht eingezahlt werden! 5
125.10 Euro Wenn Sie noch ganz mutig sind, implementieren Sie die Methoden so, dass sie auch auf fehlerhafte Aufrufe reagieren, wenn beispielsweise die Parameterliste nicht richtig übergeben wurde. Sie können natürlich Teile Ihres Programms aus Aufgabe 4 dafür recyceln. Abheben durch function auszahlung(k, euro, cent) Soll auch möglich sein, so lange noch ein Guthaben auf dem Konto besteht und der abzuhebende Betrag das Guthaben nicht übersteigt (ist rechentechnisch einfach zu lösen; Schulden machen erfordert rechentechnisch eklig viele Sonderfälle) konto; einzahlung(k, 125, 10) 125.10 Euro auszahlung(k, 125, 11) Mit dem Betrag 125.11 Euro wird das Konto überzogen. Abbheben nicht gestattet. Ihr aktueller Kontostand beträgt 125.10 Euro 125.10 Euro 6