Aufgaben zur LV "Einführung in die prozedurale und objektorientierte Programmierung (Object Rexx)" und Automatisierung von Windows Anwendungen


Die folgenden Aufgaben können auf freiwilliger Basis gelöst werden. Es gibt in der Regel nicht nur eine einzige richtige Löesung, sondern deren viele. Eine Musterlösung wird nur auf ausdrückliche Anfrage über die Listserverliste dieser Lehrveranstaltung gegeben (allerdings frühestens drei Wochen nach der entsprechenden Lehrveranstaltungseinheit).

Musterlösungen von Studierenden werden allerdings bevorzugt und sollten auch über die Liste verteilt werden (aber bitte auch hier drei Wochen zuwarten, sodass alle Studierenden die Möglichkeit haben, in Ruhe Lösungsversuche zu unternehmen; es gibt nichts Ärgerlicheres als Lösungen vor der Zeit, da dadurch möglicherweise viel Mühe zunichte gemacht wird).

Die LV-Übersicht kann über den folgende URL (2. Abschnitt des gewünschten Semesters) gefunden werden: http://wwwi.wu-wien.ac.at/Studium/.

Die Foliensätze gemeinsam mit dieser Datei finden sich unter: http://wwwi.wu-wien.ac.at/Studium/LVA-Unterlagen/poolv/.

Rony G. Flatscher, Stand: 2003-02-22


Aufgaben zur Einheit 1

Aufgabe 1+2 (1) Celsius in Fahrenheit umrechnen

Erstellen Sie ein Programm, das von 0° Celsius beginnend bis 100° Celsius in 5°-er Schritten die entsprechenden Grad in Fahrenheit ausgibt.

Lösungshinweis: Die Formel für die Umrechnung von Celsius in Fahrenheit lautet: Fahrenheit = Celsius*(9/5)+32

Mögliche Lösung(en):
pgm/pgm_01+02-1.cmd


Aufgabe 1+2 (2) Fahrenheit in Celsius umrechnen

Erstellen Sie ein Programm, das von 0° Fahrenheit beginnend bis 100° Fahrenheit in 4°-er Schritten die entsprechenden Grad in Celsius ausgibt.

Lösungshinweis: Die Formel für die Umrechnung von Fahrenheit in Celsius lautet: Celsius = (Fahrenheit-32)*(5/9).

Mögliche Lösung(en):
pgm/pgm_01+02-2.cmd


Aufgaben zur Einheit 2

Aufgabe 3+4 (1) Celsius in Fahrenheit umrechnen (Funktion)

Erstellen Sie ein Programm, das von 0° Celsius beginnend bis 100° Celsius in 5°-er Schritten die entsprechenden Grad in Fahrenheit ausgibt. Definieren Sie füer; die Umrechnung eine Funktion, die als Argument die Grad Celsius erwartet und als Funktionswert die entsprechenden Grad Fahrenheit zurückgibt.

Lösungshinweis: Die Formel für die Umrechnung von Celsius in Fahrenheit lautet: Fahrenheit = Celsius*(9/5)+32

Mögliche Lösung(en):
pgm/pgm_03+04-1.cmd


Aufgabe 3+4 (2) Fahrenheit in Celsius umrechnen (Funktion)

Erstellen Sie ein Programm, das von 0° Fahrenheit beginnend bis 100° Fahrenheit in 4°-er Schritten die entsprechenden Grad in Celsius ausgibt. Definieren Sie füer die Umrechnung eine Funktion, die als Argument die Grad Fahrenheit erwartet und als Funktionswert die entsprechenden Grad Celsius zurückgibt.

Lösungshinweis: Die Formel für die Umrechnung von Fahrenheit in Celsius lautet: Celsius = (Fahrenheit-32)*(5/9).

Mögliche Lösung(en):
pgm/pgm_03+04-2.cmd


Aufgabe 3+4 (3) Celsius in Fahrenheit umrechnen (Argument beim Programmaufruf)

Erweitern Sie Aufgabe 3+4 (1) so, dass ein Benutzer beim Aufruf des Programms bereits die Grad Celsius angeben kann, für die die Grad Fahrenheit berechnet werden soll. Wird kein Argument beim Aufruf des Programmes mitgegeben, so soll eine kleine Umrechnungstabelle ausgegeben werden, entsprechend der Aufgabe 3+4 (1).

Mögliche Lösung(en):
pgm/pgm_03+04-3.cmd


Aufgabe 3+4 (4) Fahrenheit in Celsius umrechnen (Argument beim Programmaufruf)

Erweitern Sie Aufgabe 3+4 (2) so, dass ein Benutzer beim Aufruf des Programms bereits die Grad Fahrenheit angeben kann, für die die Grad Celsius berechnet werden soll. Wird kein Argument beim Aufruf des Programmes mitgegeben, so soll eine kleine Umrechnungstabelle ausgegeben werden, entsprechend der Aufgabe 3+4 (2).

Mögliche Lösung(en):
pgm/pgm_03+04-4.cmd


Aufgabe 3+4 (5) Euro-Taschenrechner

Erstellen Sie ein Programm, das zwischen beliebigen Euro-Währungen umrechnen kann.

Beispielsweise soll der Aufruf euro Ats 65 Dem fünfundsechzig österreichische Schillinge in deutsche Mark umrechnen. Wird keine Zielwährung angegeben, so soll der Betrag in alle Euro-Währungen inklusive dem Euro selbst umgewandelt werden.

Lösungshinweis: die Umrechnungskurse stehen in bezug auf einen Euro seit 1999-01-01 (Drachmen ab 2001-01-01) wie folgt fest:

1 EUR 13,760300 ATS
1 EUR 40,339900 BEF
1 EUR 1,955830 DEM
1 EUR 5,945730 FIM
1 EUR 6,559570 FRF
1 EUR 0,787564 IEP
1 EUR 1.936,270000 ITL
1 EUR 40,339900 LUF
1 EUR 2,203710 NLG
1 EUR 200,482000 PTE
1 EUR 166,386000 ESP
1 EUR 340,750000 GRD

Mögliche Lösung(en):
pgm/pgm_03+04-5.cmd
pgm/euro.cmd (Musterlösung von Walter Pachl, 2001-05-25)


Aufgaben zur Einheit 3

Aufgabe 5+6 (1) Celsius in Fahrenheit umrechnen (Funktion)

Realisieren Sie Aufgabe 3+4 (1) als Routine.

Mögliche Lösung(en):
pgm/pgm_05+06-1.cmd


Aufgabe 5+6 (2) Fahrenheit in Celsius umrechnen (Funktion)

Realisieren Sie Aufgabe 3+4 (2) als Routine.

Mögliche Lösung(en):
pgm/pgm_05+06-2.cmd


Aufgabe 5+6 (3) Celsius in Fahrenheit umrechnen (Argument beim Programmaufruf)

Realisieren Sie Aufgabe 3+4 (3) als Routine.

Mögliche Lösung(en):
pgm/pgm_05+06-3.cmd


Aufgabe 5+6 (4) Fahrenheit in Celsius umrechnen (Argument beim Programmaufruf)

Realisieren Sie Aufgabe 3+4 (4) als Routine.

Mögliche Lösung(en):
pgm/pgm_05+06-4.cmd


Aufgabe 5+6 (5) Euro-Taschenrechner

Realisieren Sie Aufgabe 3+4 (5) als Routine.

Zusätzlich:

Mögliche Lösung(en):
pgm/pgm_05+06-5.cmd


Aufgaben zur Einheit 4

Aufgabe 7+8 (1) Abstrakter Datentyp (ADT) "EURO"

In Aufgabe 3+4 (5) ist eine Liste von Umrechnungskursen der Euro-Währungen angegeben.

Definieren Sie einen ADT EURO in Object Rexx, der über folgende Attribute und Funktionen/Prozeduren ("Methoden") verfügen soll:

Mit Hilfe der Initialisierung von neuen Objekten sollen die Attribute Waehrung, Land, Bezeichnung und Faktor ihre Werte erhalten. In weiterer Folge kann ein derartiges Euro-Objekt zum Umrechnen von Währungen benutzt werden.

Die Programmanweisungen:

    /* Argumente: "Waehrung", "Land", "Bezeichnung", "Umrechnungskurs" */
    o = .euro ~ NEW("ATS", "Austria", "Schilling", 13.7603)
     
    SAY o~Bezeichnung o~umrechnungskurs o~Land o~waehrung
    SAY
    SAY "100" o~waehrung "sind:" o~w2e(100) "EUR"
    SAY "100 EUR sind:"          o~e2w(100) o~waehrung
ergeben als Ausgabe:
    Schilling 13.7603 Austria ATS
     
    100 ATS sind: 7.26728342 EUR
    100 EUR sind: 1376.0300 ATS

Mögliche Lösung(en):
pgm/pgm_07+08-1.cmd
pgm/pgm_07+08-1_aha.cmd


Aufgabe 7+8 (2) Abstrakter Datentyp (ADT) "EURO"

Abänderung von Aufgabe 7+8 (1):

Mit Hilfe der Initialisierung von neuen Objekten sollen die Attribute Waehrung, Land, Bezeichnung, Faktor und optional Betrag ihre Werte erhalten. In weiterer Folge kann ein derartiges Euro-Objekt zum Umrechnen von Währungen benutzt werden, indem man einfach entweder den Betrag oder den Euro_Betrag setzt und anschließend den Wert des jeweils anderen Attributes abfrägt.

Die Programmanweisungen:

    /* Argumente: "Waehrung", "Land", "Bezeichnung", "Umrechnungskurs" */
    o = .euro ~ NEW("ATS", "Austria", "Schilling", 13.7603)

    SAY o~Bezeichnung o~umrechnungskurs o~Land o~betrag o~waehrung  o~euro_betrag "EUR"
    SAY
    o~betrag = 100 
    SAY o~betrag o~waehrung "sind:" o~euro_betrag "EUR"
    o~euro_betrag = 100 
    SAY o~euro_betrag   "EUR sind:" o~betrag o~waehrung
ergeben als Ausgabe:
    Schilling 13.7603 Austria 0 ATS 0 EUR
     
    100 ATS sind: 7.26728342 EUR
    100 EUR sind: 1376.0300 ATS

Mögliche Lösung(en):
pgm/pgm_07+08-2.cmd
pgm/pgm_07+08-2_aha.cmd


Aufgaben zur Einheit 5

Aufgabe 9+10+11 (1) Obstkorb

Sie bestellen für Ihr Hotel die folgenden Früechte: Äpfel, Bananen, Birnen und Zwetschken. Ihr Lieferant stellt Ihnen hin und wieder einen Sack zu, der auch nichtbestellte Obstarten enthät. Sie müssen nun die gelieferten Früchte aussortieren.

Geben Sie zunächst am Ende des Aussortierens an, wieviele Früchte insgesamt im Sack sind sowie wieviele Stück von jeder Frucht darin enthalten sind.

Als Beispiel solle der Sack aus folgendem Inhalt bestehen:

"Apfel", "Apfel", "Birne", "Erdbeere", "Apfel", "Banane", "Zwetschke", "Zwetschke", "Banane", "Apfel", "Birne", "Papaya", "Erdnuss", "Erdnuss", "Erdnuss", "Erdnuss", "Erdnuss", "Apfel", "Erdnuss", "Ananas", "Banane", "Zwetschke", "Birne", "Birne", "Zwetschke", "Zwetschke", "Banane", "Apfel", "Birne", "Papaya", "Erdnuss", "Erdnuss", "Erdnuss", "Apfel", "Erdnuss", "Ananas", "Banane", "Erdnuss", "Erdnuss", "Erdnuss", "Erdnuss", "Erdnuss", "Apfel", "Erdnuss", "Ananas", "Banane", "Erdnuss", "Papaya", "Mango", "Erdnuss", "Erdnuss", "Apfel", "Erdnuss", "Ananas", "Banane", "Birne"

Aufgrund dieses Inhalts sollen entsprechend der Angabe folgende Ausgaben erfolgen:

Total of fruits in bag: 56

consisting of:
               Banane:   7
              Erdnuss:  20
                Mango:   1
               Ananas:   4
               Papaya:   3
             Erdbeere:   1
                Apfel:   9
                Birne:   6
            Zwetschke:   5

Erstellen Sie ein Programm, das diese Aufgabe erfüllt.

Mögliche Lösung(en):
pgm/pgm_09+10+11-1.cmd


Aufgabe 9+10+11 (2) Obstkorb

Abänderung von Aufgabe Aufgabe 9+10+11 (1):

Aufgrund des in Aufgabe 9+10+11 (1) angegebenen Inhalts des Fruchtsacks sollen entsprechend der abgeänderten Angabe folgende Ausgaben erfolgen:

Received Fruits (ordered)
               Banane
                Birne
            Zwetschke
                Apfel

Received Fruits (not ordered)
              Erdnuss
                Mango
               Ananas
               Papaya
             Erdbeere

Received Fruits (ordered)
                Apfel:   9
               Banane:   7
                Birne:   6
            Zwetschke:   5

Received Fruits (not ordered)
              Erdnuss:  20
                Mango:   1
               Ananas:   4
               Papaya:   3
             Erdbeere:   1

Erstellen Sie ein Programm, das diese Aufgabe erfüllt.

Mögliche Lösung(en):
pgm/pgm_09+10+11-2.cmd


Aufgabe zur Einheit 6

Aufgabe 12 (1) Metaklasse zur Umsetzung des Patterns (Musters) "Manager"

Sie haben die Aufgabe, eine Metaklasse zu programmieren, die folgendes Muster "Manager" umsetzt:

Beispielsprogramm, das diese Managerklasse verwenden soll:

   /* pgm_12-1_aha.cmd */

   .test~~new("Anton") ~~new("Berta") ~~new("Caesar")

   SAY "Before synchroneous broadcast..."
   .test~broadcast( .message~new(.nil, "say_info"), .true )
   SAY "after synchroneous broadcast."
   SAY

   SAY "Before Asynchroneous broadcast..."
   .test~broadcast( .message~new(.nil, "say_info"))
   SAY "after asynchroneous broadcast."

   ::REQUIRES "pgm_12-1.cmd.html"

   /* --------------------------- Test-Class -------------------------------- */
   ::CLASS test            METACLASS Manager 

   /* --------------------------- Class Methods ----------------------------- */
   ::METHOD Init           CLASS 
     EXPOSE counter
     counter=0
     self~init:super

   ::METHOD count          CLASS 
     EXPOSE counter
     counter=counter+1
     RETURN counter

   /* --------------------------- Instance Methods -------------------------- */
   ::METHOD Init
     EXPOSE  name number
     USE ARG name
     number=self~class~count
     self~init:super

   ::METHOD name                 ATTRIBUTE

   ::METHOD say_info 
     EXPOSE number
     SAY " SAY_INFO - name:" self~name "created as #" number

Eine mögliche Ausgabe:

   Before synchroneous broadcast...
   Manager.Broadcast: invoking messages synchroneously...
    SAY_INFO - name: Caesar created as # 3
    SAY_INFO - name: Berta created as # 2
    SAY_INFO - name: Anton created as # 1
   after synchroneous broadcast.

   Before Asynchroneous broadcast...
   Manager.Broadcast: invoking messages asynchroneously...
   after asynchroneous broadcast.

    SAY_INFO - name: Caesar created as # 3
    SAY_INFO - name: Berta created as # 2
    SAY_INFO - name: Anton created as # 1

Erstellen Sie eine entsprechende Metaklasse.

Mögliche Lösung(en):
pgm/pgm_12-1.cmd
pgm/pgm_12-1_aha.cmd


Hinweis auf OODIALOG-Rexx-Programme

Unter oodialog/info.htm finden sich englische Kurzhinweise auf ein Object Rexx-Programm, das einen EURO-Umrechner implementiert, wobei die Benutzerschnittstelle mit einem (graphischen) Windows-Dialogfenster realisiert ist (vgl. die Abbildungen).