Dr. Matthias Grabert & Johannes Mayer
Abteilung Angewandte Informationsverarbeitung
31. Oktober 2002
 Blatt 3 (2 Aufgaben! 15+5 Punkte)


   
Objektorientierte Softwareentwicklung mit C++
(WS 2002/2003)


Abgabetermin: 14. November 2002


"Du mußt Prioritäten setzen, Kleines!"

  Das Leben besteht zu 32.1% aus Arbeit. Die Arbeit sollte man vielleicht aber irgendwie organisieren, statt blind drauflos zu wüten. Kluge Menschen verplanen z.B. nicht einfach 100% Ihrer täglichen Arbeitszeit und Kraft, sondern höchstens 60-70%. Den Rest bewahrt man am besten als "stille Reserve" für unvorhergesehene Vorkommnisse auf (Computerabsturz, durch Restalkohol gesenktes Arbeitstempo, Lösung des Mathe-Üblattes war falsch und muss noch rasch abgeschrieben werden, Schnürsenkelbügeln dauert länger als geplant etc.).
Desweiteren kann es sinnvoll sein, anstehende Aufgaben nach Wichtigkeit zu ordnen.

  Neben dem Faktor Wichtigkeit sollte man als weitere Dimension vielleicht noch die Dringlichkeit einer geplanten Aktion hinzunehmen. "Lernen auf eine Prüfung" ist "wichtig", 6 Wochen vor dem Termin aber noch nicht dringend. "Tante Agathe anrufen" ist oft weder dringend noch wichtig. Außer, die Gute liegt krank im Bett. Oder es gibt was zu erben. "Wichtig und dringend" wäre z.B., dieses Übungsblatt sauber und intelligent bis übernexte Woche zu lösen.

Weitere Dimensionen wie "Spassfaktor", "veranschlagte Dauer", "erhofften Benefit" etc. lassen wir beiseite!



Obiger Ansatz führt zu dem folgenden Diagramm, das trotz seiner Simplifizierung recht hilfreich ist, um sein tägliches Chaos zu ordnen:
wichtig und dringend


"Meine Güte, was hat das denn mit C++ zu tun???"


Aufgabe 1: Generisches Programmieren (15 Punkte) 


Schreiben Sie mit den bisher in der Vorlesung besprochenen C++-Sprachmitteln (Referenzen, Namespaces, Overloading, Templates, Exceptions) ein Template für eine sogenannte priority queue, die obigen Sachverhalt der Prioritätenbildung umsetzt. In eine priority queue sollen nacheinander Elemente eines bestimmten (aber variablen=template) Datentyps eingestellt werden können (Operation push). Die Elemente sollen in ihrer ursprünglichen Reihenfolge durch die Operation pop() wieder aus der Warteschlange geholt werden können. Ausnahme: Elemente, die die Attribute wichtig (importance=1) und dringend (urgency=1) tragen (rechter oberer Quadrant), sind immer vor allen anderen Elementen aus der Queue zu holen. Und: Elemente, die weder wichtig noch dringend sind (linker unterer Quadrant), sind erst dann zu liefern, wenn alle anderen Elemente aus der Warteschlange entfernt wurden. Sollten mehrere Elemente mit der gleichen Wichtigkeits- und Dringlichkeitsstufe für die nächste pop()-Operation anstehen, so ist die zeitliche Reihenfolge entscheidend, mit der die jeweiligen Elemente in die Queue gestellt wurden (first in first out).


Daten und Operationen:


Fiel Spas!

Aufgabe 2: Generisches Programmieren (5 Punkte) 

Erweitern Sie Ihre Lösung von Blatt 2 (oder die Musterlösung) durch Templates so, dass der dynamische Vektor nicht nur für Integer, sondern auch für andere Datentypen funktioniert!
Matthias Grabert  2002-11-28