Programming Java


Praktikum Nr. 1:

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,
			. . .
		  }

Variante 2 mit switch/case ohne break:
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
}


Testen:
Testen Sie den 01.01.1900, es muss ein Montag sein
Testen Sie den 01.03.1900, es muss ein Donnerstag sein
Testen Sie den 01.01.1904, es muss ein Freitag sein
Testen Sie den 01.03.1904, es muss ein Dienstag sein


A. Beck