Lösen Sie ein einfaches algorithmisches Problem durch ein kleines
Javaprogramm. Das Programm erhalte seine Daten über die Kommandozeile
und gebe die Ergebnisse auf der Standardausgabe aus.
Programm zur Ermittlung des Wochentages zu einem gegebenen Datum nach
dem 1.1.1900
- Der 1.1.1900 war ein Montag
- Schaltjahre sind alle durch 4 aber nicht durch 100 teilbaren Jahre aber die durch 400 teilbaren Jahre sind wieder Schaltjahre. Es reicht, wenn Sie nur Schaltjahre im Zeitraum 1900..2099 beachten. In diesem Zeitraum (außer 1900) ist jedes durch 4 teilbare Jahr ein Schaltjahr.
- Das Jahr 2000 ist somit ein Schaltjahr.
Lösungsvorschlag (1900..2099): Addieren Sie alle Tage seit dem 1.1.1900. Dividiert man diese Summe durch 7, ergibt der ganzzahlige Rest (Modulodivision, wie in c %) eine Zahl zwischen 0 und 6 , die die Bestimmung des Wochentages ermöglicht.
((jahr-1900)*365 + (jahr-1900)/4 + tageDerVollstMonate + Tag)%7
Die Berechnung der Tage der vollst. Monate des laufenden Jahres kann wie folgt geschehen:
Variante 1:
// Berechnung mit constanten Ausdruecken // Die Berechnung der Summen erfolgt durch den Compiler, nicht zur Laufzeit // Fuer die Berechnungen wird kein Code generiert. int DaysMonth[]={0, // es gibt keinen Monat 0 0, // bei einem Datum in Jan. ist kein Monat vollst. vergangen 31, // im Febr. ist der Januar vollst. vergangen 31+28, 31+28+31, 31+28+31+30, . . . }
switch (monat) { case 12: tage+=30; // bei einem Datum im Dez. ist der Nov. vollst. vergangen case 11: tage+=31; // bei einem Datum im Nov. ist der Okt. vollst. vergangen case 10: tage+=30; // bei einem Datum im Okt. ist der Sept. vollst. vergangen ... case 2: tage+=31; // bei einem Datum im Feb. ist der Jan. vollst. vergangen case 1: tage+=tag; // der aktuelle Tag des fraglichen Datums }