3098 Projekt Projektplaner
Kategorie:Datum
Klasse:leicht
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Projekt.txt, Projekt.java, *.java , 745.txt, 787.txt

Kurzbeschreibung:

Das Beginndatum des Projekts und die Anzahl der Arbeitstage werden eingelesen, das Datum des Projektendes wird ermittelt und ausgegeben.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie das Beginndatum des Projekts und die Anzahl der geplanten Arbeitstage ein. Ihr Programm soll nun das Datum des letzten Projekttages ermitteln, wobei folgendes zu beachten ist:

Es zählen nur Werktage (Montag bis Freitag), die keine Feiertage sind. Ihr Programm soll folgende Feiertage berücksichtigen:

Neujahr 1. Jänner
Hl. Drei Könige 6. Jänner
Ostermontag siehe untenstehende Formel
Staatsfeiertag 1. Mai
Christi Himmelfahrt 38 Tage nach Ostermontag
Fronleichnam 59 Tage nach Ostermontag
Mariä Himmelfahrt 15. August
Nationalfeiertag 26. Oktober
Allerheiligen 1. November
Mariä Empfängnis 8. Dezember
Weihnachten 25. Dezember
2. Weihnachtstag 26. Dezember

Wie Sie vielleicht bemerkt haben, fehlt Pfingsten in dieser Aufstellung; diesen Feiertag sollen Sie ignorieren. (Pfingstmontag wäre 49 Tage nach Ostermontag).

Für die Berechnung des Ostersonntags(!) verwenden Sie folgende Formel:

j = Jahr; h = floor(j/100);
m = (15 + h - floor(h/4) - floor((h - floor((h - 17)/25))/3)) mod 30;
n = (4 + h - floor(h/4)) mod 7;
a = j mod 19; b = j mod 4; c = j mod 7;
d = (19*a + m) mod 30; e = (2*b + 4*c + 6*d + n) mod 7;

wobei floor(x) die größte ganze Zahl <= x darstellen soll.

Der Ostersonntag ist der (22 + d + e) - te März bzw. der (d + e - 9) - te April, wobei statt des 26. April stets der 19. genommen wird und statt dem 25. April der 18., falls d = 28, e = 6 und a >10 gilt.

Eingabedaten:

Lesen Sie zuerst das Beginndatum des Projekts als String ein. Dieses Datum muß im folgenden Format vorliegen:

TT.MM.JJ

Hierbei ist zu beachten, daß jede der Komponenten Tag, Monat und Jahr zweistellig angegeben sein muß, also gegebenenfalls mit führender Null. Als Trennzeichen müssen Punkte verwendet werden.

Das Jahr ist als 19JJ zu interpretieren. Dieses Datum muß gültig sein (z.B. kein 30. Februar); das Jahr muß im Bereich von 1993 bis 1995 liegen.

Danach lesen Sie die Anzahl der Arbeitstage als Integer-Zahl ein; diese muß >0 und darf nicht größer als 30 sein.

Ausgabedaten:

Bei korrekten Eingabedaten soll Ihr Programm den letzten Arbeitstag im Format TT.MM.JJ ausgeben, wobei alle drei Komponenten (Tag, Monat, Jahr) zweistellig, also gegebenenfalls mit führenden Nullen, auszugeben sind.

Geben Sie danach einen Zeilenvorschub aus.

Fehlerbehandlung:

Sämtliche Eingabedatensätze sind immer bis zum definierten Endezeichen einzulesen. Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.

Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.
Dieser Fall kann nur bei der Anzahl der Arbeitstage auftreten.

Waren die Datentypen bei allen Eingaben richtig, die eingegebenen Daten dann aber inhaltlich nicht korrekt, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
23.08.93 20

29.02.71 4

Ausgabedaten
17.09.93

FALSCHE EINGABE


Testen:

Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:

java Projekt < Projekt.i1 > Projekt.out1

Das erzeugte File Projekt.out1 können Sie dann mit dem mitgelieferten Outputfile Projekt.o1 vergleichen.