Dr. Andreas Borchert Abteilung Angewandte Informationsverarbeitung 12.05.2005
Norbert Heidenbluth Blatt 4


Uni Logo



Allgemeine Informatik II für Mathematiker/Wirtschaftsmathematiker
(SS 2005)



Abgabetermin: 19. Mai 2005

Aufgabe 6: Wirtschaftsinformatik (10 Punkte)

Damit wir dem Attribut ``Wirtschaft'' in den Studiengängen Wirtschaftsmathematik und Wirtschaftsphysik gerecht werden, behandeln wir in dieser Woche in den Übungen mal ein eher wirtschaftlich orientiertes Thema: einen Aktienmarkt!

Wir nehmen an, daß auf dem Aktienmarkt die Aktien der Borchert und Heidi-AG gehandelt werden, die natürlich jeder von Ihnen besitzen möchte. Andererseits gibt es aber (unverständlicherweise) auch jene, die im Besitz dieser Aktien sind und diese verkaufen möchten.

Aufgabe:

In diesem Übungsblatt sollen Sie nun ein Oberon-Programm schreiben, das die An- und Verkaufsgebote der Markteilnehmer einliest und aus ihnen den getätigten Umsatz (hier: die Anzahl der gehandelten Aktien) sowie den erzielten Marktpreis ermittelt.

Vorgehen:

  1. Diese Aufgabe sollten Sie mit Hilfe zweier sortierter linearer Listen lösen. Die Verkaufsangebote werden dabei nach Preisen aufsteigend sortiert, die Ankaufsgebote absteigend nach Preisen.

  2. Die abgegebenen Angebote (sowohl Ver- als auch Ankauf betreffend) liegen zeilenweise in einer Textdatei vor. Diese wird weiter unten noch genauer beschrieben.

  3. Wenn alle Angebote eingelesen und in die Listen sortiert worden sind, beginnen wir unseren ``Handelsalgorithmus'' mit den jeweils ersten Elementen der beiden Listen:

    1. Ist das momentane Ankaufsgebot höher als oder gleich hoch wie das Verkaufsangebot, so erwerben wir die maximal mögliche Anzahl (das ist das Minimum aus gewünschter Menge aus dem Ankaufsgebot und angebotener Menge im Verkaufsangebot) zum Preis des momentanen Verkaufsangebots.

    2. Ist der momentane Käufer vollständig zum Zuge gekommen (das ist er, wenn er die von ihm gewünschte Anzahl Aktien kaufen konnte), wird der nächsten Käufer in der Liste zum momentanen Käufer, und wir fahren mit ihm auf die selbe Art und Weise fort.

    3. Ist der Verkäufer vollständig zum Zuge gekommen, gilt das zuvor Beschriebene entsprechend für den momentanen Verkäufer (d.h. der nächste Verkäufer in der Liste wird zum momentanen Verkäufer, und wir fahren wir mit ihm auf die selbe Art und Weise fort).

    4. Der Handel ist beendet, wenn der momentane Verkaufspreis höher als der momentane Angebotspreis liegt. (In dieser Situation wird niemand, der wirtschaftlich handelt, mehr kaufen!)

  4. Der zuletzt erzielte Preis ist dann der gesuchte Marktpreis, und alle bis jetzt getätigten An- / Verkäufe ergeben den gesuchten Umsatz.

Hilfestellung zur Angebotsdatei

Die Datei, welche die Ankaufs- und Verkaufsgebot enthält, soll den folgenden Aufbau besitzen:

      Typ   Anzahl   Stueckpreis

Der ``Typ'' sei dabei entweder ``V'' (für Verkauf) oder ``K'' (für Ankauf). Als Feldtrenner kann hier das Whitespace-Zeichen verwendet werden.

Und so könnte eine Datei aussehen:

   V 10 15    (* Verkaufe 10 Aktien zum Stueckpreis von 15 Euro *)
   K 3  8     (* Kaufe 3 Aktien zum Stueckpreis von 8 Euro *)
   V 2 7
   K 5 12
   V 1 9
   K 3 16

Beispiel

Mit der zuvor aufgelisteten Datei sähe ein Handelstag dann wie folgt aus:

Zustand 1 (Ausgangssituation):

   V   7    9    15    (* Preis *)
       2    1    10    (* Stueckzahl *)
       ^               (* Momentaner Verkaeufer *)

   K  16   12    8     (* Preis *)
       3    5    3     (* Stueckzahl *)
       ^               (* Momentaner Kaeufer *)

Der Käufer, der 3 Aktien zu 16 kaufen würde, kauft 2 zu 7, da $7<16$. Der momentane Verkäufer ist voll zum Zuge gekommen (``ausverkauft'') und verlässt den Markt (um sich endlich seinem Hobby Informatik widmen zu können).

Zustand 2:

   V   7    9    15    (* Preis *)
       0    1    10    (* Stueckzahl *)
            ^          (* Momentaner Verkaeufer *)

   K  16   12    8     (* Preis *)
       1    5    3     (* Stueckzahl *)
       ^               (* Momentaner Kaeufer *)

Nun ist also der Verkäufer mit dem Angebot zu 9 der momentane Verkäufer, der auch sogleich seine Aktie an den momentanen Käufer (noch immer der mit dem 16-Angebot) zu 9 verkaufen kann ($9<16$).

Sowohl (momentaner) Verkäufer als auch (momentaner) Käufer sind nun voll zum Zuge gekommen, weshalb nun ihre jeweiligen Nachfolger an der Reihe sind. Daher bekommen wir den folgenden

Zustand 3:

   V   7    9    15    (* Preis *)
       0    0    10    (* Stueckzahl *)
                 ^^    (* Momentaner Verkaeufer *)

   K  16   12    8     (* Preis *)
       0    5    3     (* Stueckzahl *)
            ^          (* Momentaner Kaeufer *)

Hier endet nun der Handel, da erstmals der verlangte Preis (15) höher ist als der gebotene Preis (12).

Der zuletzt gehandelte Preis (9) ergibt nun den Marktpreis, und es wurden 3 Aktien ($2 + 1$) umgesetzt.

Und genau dies sollte Ihr Programm dann auch ausgeben:

theseus$ ./Trade < offer.txt 
Der Handel wird gestartet...
Die Boerse ist nun geschlossen!
Es wurden 3 Aktien umgesetzt,
und der erzielte Marktpreis (pro Stueck) betraegt 9 Euro!
theseus$

Noch ein Hinweis$\ldots$

Viel Erfolg!



Norbert Heidenbluth 2005-05-11