// Autor: Apfelthaler Kathrin // Matnr: 0225369 // 1.Eprog-Bsp: Grad: mittel - Eingabe eines Datums und Berechnung des Wochentags // bearbeitet von Stephan Bazalka import eprog.*; import java.lang.*; public class Wochentag extends EprogIO { public static String berechneTag(int Tag, int Monat, int Jahr) { // Überprüfung, ob eingegebenen Daten richtig sind if ((Tag > 31) || (Monat > 12)) return "FALSCHE EINGABE"; // Initialisierung eines Arrays vom Typ Integer für die Tage pro Monat int TaMo[]={31,28,31,30,31,30,31,31,30,31,30,31}; // Überprüfung, ob das Jahr ganzzahlig durch 4, 100 und durch 400 // teilbar ist. boolean mod4, mod100, mod400; if (Jahr % 4 != 0) mod4 = false; else mod4 = true; if (Jahr % 100 != 0) mod100 = false; else mod100 = true; if (Jahr % 400 != 0) mod400 = false; else mod400 = true; // Ein Schaltjahr ist das eingegebene Jahr dann, wenn es durch // 4 ganzzahlig teilbar ist. Im Falle, dass es durch 100 und // durch 400 teilbar ist, ist es kein Schaltjahr. // Daher müssen die Tage im Februar entsprechend verändert werden. // Außerdem werden schwachsinnige Tage im Februar (30.Feb.) abgefragt. if (mod4 == true) { TaMo[1] = 29; } if (mod100 == true && mod400 == false) { TaMo[1] = 28; } // Sind die Werte ungleich null? (Das Jahr darf null sein) if (Tag == 0 || Monat == 0) { return "FALSCHE EINGABE"; } // Ist der Tag nicht größer als die maximale Tagesanzahl in diesem Monat? if (Tag > TaMo[Monat-1]) { return "FALSCHE EINGABE"; } // Diese Formel liefert den Wochentag des 1. Jänner eines gegebenen Jahres // Zurückgegeben werden ganzzahlige Werte zwischen 0 und 6 int X = (Jahr + (int) Math.floor((Jahr-1)/4) - (int) Math.floor((Jahr-1)/100) + (int) Math.floor((Jahr-1)/400)) % 7; // Berechnung des Wochentags des gegebenen Datums // In einer For-Schleife werden alle vergangenen Tage // des eingegebenen und der letzten Monate gezählt. for (int i = 0; i < (Monat - 1); ++i) Tag = Tag + TaMo[i]; // Zum 1.1. werden nun alle vergangenen Tage dazuaddiert // Somit gelangt man zum eingegebenen Datum X = (X + Tag)% 7; // Ein Array vom Typ String wird angelegt // Es besteht aus 7 Feldern für die einzelnen Wochentage String Wochentag[]={"13467 123456", "12356 123456", "123456 56", "12356 56", "123456 123456", "1567 123567", "13467 123567" }; // Ausgabe des Wochentages return Wochentag[X]; } }