/**********************************/ /* Autor: Antonio Bitounis */ /* MatrNr.: 0125834 */ /* BspNr.: 3098 */ /**********************************/ import java.util.*; import java.lang.Math; import eprog.*; public class Projekt extends EprogIO { public static void main(String[] args) throws EprogException { boolean eingabeFehler=false; try { String beginn = readWord(); // Eingabe Datum short tage = readShort(); // Eingabe Arbeitstage int summe_tage = 0; /*** Eingabe des Datums wird auf Korrektheit überprüft ***/ do { if(beginn.length()==8) { if(pruefPunkte(beginn)==false) // pruefPunkte() wird weiter unten definiert { eingabeFehler=true; break; } String tag = beginn.substring(0, 2); String monat = beginn.substring(3, 5); String jahr = beginn.substring(6); if(jahr.equals("93") || jahr.equals("94") || jahr.equals("95")) { if(0<tage && tage < 31) { try { int tageszahl = Integer.parseInt(tag); // Umwandlung des String-Datums in "richtige" Zahlen int monatszahl = Integer.parseInt(monat); int jahreszahl = Integer.parseInt(jahr); if(monatszahl>12) { eingabeFehler=true; break; } switch(monatszahl) { case 1: if(tageszahl>31) eingabeFehler=true; break; case 2: if(tageszahl>28) eingabeFehler=true; break; case 3: if(tageszahl>31) eingabeFehler=true; break; case 4: if(tageszahl>30) eingabeFehler=true; break; case 5: if(tageszahl>31) eingabeFehler=true; break; case 6: if(tageszahl>30) eingabeFehler=true; break; case 7: if(tageszahl>31) eingabeFehler=true; break; case 8: if(tageszahl>31) eingabeFehler=true; break; case 9: if(tageszahl>30) eingabeFehler=true; break; case 10: if(tageszahl>31) eingabeFehler=true; break; case 11: if(tageszahl>30) eingabeFehler=true; break; case 12: if(tageszahl>31) eingabeFehler=true; break; } if(eingabeFehler==true) break; jahreszahl = 1900 + jahreszahl; // Für den unten verwendeten GregorianCalendar wird das Jahr monatszahl = monatszahl - 1; // 93, 94 od. 95 auf 1993 etc. ausgebessert. Das Monat -1 weil summe_tage = tageszahl + tage - 1; // Jänner = 0. Februar = 1,... !! /*** Berechnung des Ostersonntags -bzw. Ostermontags ***/ double j = jahreszahl, h = Math.floor(j/100); double m = (15 + h - Math.floor(h/4) - Math.floor((h - Math.floor((h - 17)/25))/3)) % 30; double n = (4 + h - Math.floor(h/4)) % 7; double a = j % 19, b = j % 4, c = j % 7; double d = (19*a + m) % 30, e = (2*b + 4*c + 6*d + n) % 7; int tag_ostermontag = (int)(d + e - 8); /*** Erstelle neuen Kalender zur Berechnung von Chr.Himmelfahrt u. Fronleichnam ***/ GregorianCalendar rechne = new GregorianCalendar(); rechne.set(Calendar.DATE, tag_ostermontag); // Kalender wird auf Ostermontag gestellt rechne.set(Calendar.MONTH, 3); rechne.set(Calendar.YEAR, jahreszahl); rechne.add(Calendar.DATE, + 38); // Hier wird Chr.Himmelfahrt berechnet (O-Montag + 38 Tage) int c_h_tag = rechne.get(Calendar.DATE); int c_h_monat = rechne.get(Calendar.MONTH)+ 1; rechne.set(Calendar.DATE, tag_ostermontag); // Kalender wird auf Ostermontag zurückgestellt rechne.set(Calendar.MONTH, 3); rechne.add(Calendar.DATE, + 59); // Fronleichnam wird berechnet int f_l_tag = rechne.get(Calendar.DATE); int f_l_monat = rechne.get(Calendar.MONTH)+ 1; /*** Neuer Kalender wird erstellt ***/ GregorianCalendar cal = new GregorianCalendar(); for(int i=tageszahl; i<=summe_tage; i++) // In dieser Schleife werden alle Tage des Projektes überfprüft { cal.set(Calendar.MONTH, monatszahl); cal.set(Calendar.YEAR, jahreszahl); cal.set(Calendar.DATE, i); int cal_wochentag = cal.get(Calendar.DAY_OF_WEEK); int cal_tag = cal.get(Calendar.DATE); int cal_monat = (cal.get(Calendar.MONTH) + 1); /* Überprüfung ob Wochenende oder Werktag */ if(cal_wochentag == cal.SATURDAY) summe_tage++; else if(cal_wochentag == cal.SUNDAY) summe_tage++; /* Überprüfung der Feiertage */ if(cal_wochentag != cal.SATURDAY && cal_wochentag != cal.SUNDAY) { if(cal_tag == 1 && cal_monat == 1) // Neujahr summe_tage++; if(cal_tag == 6 && cal_monat == 1) // Hl. 3 Könige summe_tage++; if(cal_tag == tag_ostermontag && cal_monat == 4) // Ostermontag summe_tage++; if(cal_tag == 1 && cal_monat == 5) // Staatsfeiertag summe_tage++; if(cal_tag == 15 && cal_monat == 8) // Mariä Himmelfahrt summe_tage++; if(cal_tag == 26 && cal_monat == 10) // Nationalfeiertag summe_tage++; if(cal_tag == 1 && cal_monat == 11) // Allerheiligen summe_tage++; if(cal_tag == 8 && cal_monat == 12) // Mariä Empfängnis summe_tage++; if(cal_tag == 25 && cal_monat == 12) // Weihnachten summe_tage++; if(cal_tag == 26 && cal_monat == 12) // 2.Weihnachtstag summe_tage++; if(cal_tag == c_h_tag && cal_monat == c_h_monat) // Christi Himmelfahrt summe_tage++; if(cal_tag == f_l_tag && cal_monat == f_l_monat) // Fronleichnam summe_tage++; } } /*** Ergebnisse werden ermittelt ***/ int ergebnis_tag = cal.get(Calendar.DATE); int ergebnis_monat = cal.get(Calendar.MONTH) + 1; // Monat wird wieder "zurückkorrigiert" int ergebnis_jahr = cal.get(Calendar.YEAR); ergebnis_jahr = ergebnis_jahr - 1900; // Jahr wird wieder ohne 1900 angegeben /*** Überprüng ob die Zahlen geg.falls mit führender Null ausgegeben werden müssen, oder nicht ***/ if(ergebnis_tag < 10 || ergebnis_monat < 10) { if(ergebnis_tag < 10 && ergebnis_monat < 10) println("0" + ergebnis_tag + ".0" + ergebnis_monat + "." + ergebnis_jahr); else { if(ergebnis_tag < 10) println("0" + ergebnis_tag + "." + ergebnis_monat + "." + ergebnis_jahr); else println(ergebnis_tag + ".0" + ergebnis_monat + "." + ergebnis_jahr); } } else println(ergebnis_tag + "." + ergebnis_monat + "." + ergebnis_jahr); System.exit(0); // Programm erfolgreich abgeschlossen } catch(NumberFormatException e) // --> Abfangen: Fehler kann beim umwandeln von String // in integer auftreten { println("FALSCHE EINGABE"); System.exit(0); } } else {eingabeFehler=true; break;} } else {eingabeFehler=true; break;} } else eingabeFehler=true; } while(eingabeFehler!=true); if(eingabeFehler=true) { println("FALSCHE EINGABE"); System.exit(0); } } catch(EprogException e) { println("?"); System.exit(0); } } private static boolean pruefPunkte(String beginn) // gehört zur Überprüfung der Eingabe am Anfang { if(beginn.charAt(2)=='.' && beginn.charAt(5)=='.') return true; else return false; } }