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:
-
Sie haben Lösungen (und Spezifikationen) aus der 1. Runde von anderen Studenten erhalten,
die Ihnen Ihre Aufgabe erleichtern sollen. Wählen Sie eine Lösung aus, die Ihnen hinsichtlich Lesbarkeit, Programmierstil,
Korrektheit und Verwendbarkeit am besten erscheint. Verwenden Sie
diese Lösung in Ihrem Programm. Sie können auch die anderen Lösungen einsetzen.
- Merken Sie sich die Lösungsnummer des ausgewählten Beispieles für die Abgabe. Diese Nummer müssen Sie bei der Abgabe angeben. Geben Sie nur jene Lösungsnummer an, die Sie auch wirklich ausgewählt haben.
-
Erstellen Sie für alle Lösungen zu diesem Beispiel (siehe: "Abzugebende Files") ein File mit dem Namen <number>.txt. und schreiben in dieses File ein Review (=Kritik) zu der Lösung. Diese Reviews erhalten dann die TeilnehmerIn von dem/der die Lösung stammt. Beachten Sie das bitte bei der Form Ihrer Kritik.
-
Sie können für die Lösung der gewählten Aufgabe eine oder mehrere Klassen programmieren. Die Klasse Projekt.java muß aber die Methode main enthalten. Weiters müssen alle abgegebenen Klassenfiles in demselben Verzeichnis vorliegen, Pfadangaben sind nicht gestattet.
-
Achten Sie auf die korrekten Konventionen der Groß/Kleinschreibung bei
Klassen und Methoden!
[Wir tun das jetzt auch :-)]
-
Falls Ihre Lösung einen Exit Code zurueckliefert, so
achten Sie darauf, dass dieser den Wert 0 hat.
Bei allen anderen Werten können Probleme bei der Bewertung und in weiterer
Folge unbeabsichtigte Punkteabzüge auftreten.
- Ihre Lösung darf nur genau jene Ausgabedaten liefern, die in der
Spezifikation verlangt werden. Die Ausgaben Ihrer Lösung werden automatisch mit Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
- Testen Sie Ihre Lösung vor der Abgabe mit der mitgelieferten Eingabedatei. Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihrer Lösung mit der ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihre Lösung auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Klassen, die Packages oder Klassen ausserhalb der verwendeten Übungsumgebung (Java2, Standard Edition, Version 1.3.1_1) verwenden, können von uns
nicht getestet werden und werden daher mit 0 Punkten bewertet!
- Schreiben Sie Ihre Klasse(n) möglichst allgemein und kommentieren
Sie diese gut. Erstellen Sie weiters eine übersichtliche und
verständliche Dokumentation. Damit erhöhen Sie Ihre Chancen,
daß andere Studenten in der nächsten Runde Ihre Lösung
wählen und Ihnen damit zu Zusatzpunkten verhelfen!
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.