Prof. Dr. Franz Schweiggert Abteilung Angewandte Informationsverarbeitung 30.11.2005
Norbert Heidenbluth Blatt 7


Uni Logo



Allgemeine Informatik I für Mathematiker/Wirtschaftsmathematiker
(WS 2005/2006)



Abgabetermin: 07. Dezember 2005

Mit diesem Übungsblatt beginnen wir nun mit dem Programmieren. Unverzichtbar für das Schreiben eigener Programme ist es, sich zunächst Gedanken über die Programmlogik - also einen Algorithmus zu machen. Für Ihre erste Programmieraufgabe geben wir Ihnen ausnahmsweise einmal einen Algorithmus vor - allerdings in englischer Sprache, denn diese beherrscht in der Informatik nahezu alles, sodaß man sich frühzeitig mit Beschreibungen auf Englisch vertraut machen sollte.

Aufgabe 16: Ostern in der Adventszeit (10 Punkte)

Am Morgen nach dem Besuch des Weihnachtsmarktes stellen Sie fest, daß es Ihnen nach dem Genuß unzähliger Glühweine und Bratwürsten von zweifelhafter Herkunft (``Gammelfleisch'') ganz schön übel geht. Sie fühlen sich so hundselend, daß Sie sich fragen, wann der ganze Weihnachtsrummel vorbei ist und man wieder Ostern feiern kann.

Während Sie noch so vom Osterhasen halluzinieren, fällt Ihnen der folgende Algorithmus in die Hände, mit Hilfe dessen Sie den Ostersonntag für ein gegebenes Jahr (im Algorithmus bezeichnet durch $Y$) berechnen können:

E1.
[Golden number.] Set $G \leftarrow (Y$ mod $19) +1$. ($G$ is the so-called ``golden number'' of the year in the 19-year Metonic cycle.)

E2.
[Century.] Set $C \leftarrow \lfloor Y/100 \rfloor + 1$. (When $Y$ is not a multiple of 100, $C$ is the century number; for example, 1984 is in the twentieth century.)

E3.
[Corrections.] Set $X \leftarrow \lfloor 3C/4 \rfloor - 12$, $Z \leftarrow \lfloor (8C + 5) / 25 \rfloor -5$. (Here $X$ is the number of years, such as 1900, in which leap year was dropped in order to keep in step with the sun; $Z$ is a special correction designed to synchronize Easter with the moon's orbit.)
E4.
[Find Sunday.] Set $D \leftarrow \lfloor 5Y/4 \rfloor - X - 10$. (March (($-D)$ mod $7)$ will actually be a Sunday.)
E5.
[Epact.] Set $E \leftarrow (11G + 20 + Z - X)$ mod $30$. If $E=25$ and the golden number $G$ is greater than 11, or if $E=24$, then increase $E$ by $1$. (This number $E$ is the epact, which specifies when a full moon occurs.)
E6.
[Find full moon.] Set $N \leftarrow 44 - E$. If $N < 21$ then set $N \leftarrow N + 30$. (Easter is supposedly the first Sunday following the first full moon that occurs on or after March 21. Actually perturbations in the moon's orbit do not make this strictly true, but we are concerned here with the ``calender moon'' rather than the actual moon. The $N$th of March is a calendar full moon.)
E7.
[Advance to Sunday.] Set $N \leftarrow N + 7 - ((D + N)$ mod $7)$.
E8.
[Get month.] If $N > 31$, the date is $(N-31)$ APRIL; otherwise the date is $N$ MARCH.

(Quelle: Donald E. Knuth, The Art of Computer Programming, Band 1, Addison-Wesley 1998, Seite 160)

In Ihrem Zustand befinden Sie sich leider nicht in der Lage, im Kopf den Ostersonntag des kommenden Jahres zu berechnen, aber da Sie gestern in der Informatik-Vorlesung noch hellwach waren, können Sie ja nun in Java programmieren. Und somit beschließen Sie, sich Ihren Kater damit zu vertreiben, den gegebenen Algorithmus in ein schnuffeliges Java-Programm zu verwandeln.

Wie gut, daß die Aufgabe dieses Übungsblattes daher lautet:

``Schreiben Sie ein Java-Programm, das zunächst eine Jahreszahl von der Standardeingabe einliest und mit dieser dann die durch den Algorithmus angegebenen Berechnungen durchführt. Zum Schluß soll auf der Standardausgabe ausgegeben werden, auf welchen Tag das Osterfest in dem eingegeben Jahr gefallen ist (bzw. fallen wird).''

Wenn Sie wieder nüchtern sind und alles läuft, gibt Ihnen Ihr Tutor dann zur Belohnung auch bis zu zehn Glühwe$\ldots$, nein, sorry, Punkte!

Hinweise

Viel Erfolg!



Norbert Heidenbluth 2005-11-30