Name: Peter Lukezic Matr.nr.: 0002887 Email: PETER.L@GMX.AT Beispiel: 3126 Anzeige Kurzbeschreibung: Das Progarmm liest Datum und eine Uhrzeit ein und berechnet daraus Zahlenkolonnen, die angeben, welche Segmente einer sechsstelligen 7-Segment-Anzeige aktiviert sein müssen, um ein Wochentagskürzel und die Zeit anzugeben. Die Klasse "datum" liest einen String ein. Dieser String soll ein Datum enthalten, das entweder dem Format "TTMMJJssmm" oder dem Format "Tag*Monat*Jahr*Stunde*Minute" entspricht, wobei bei letzterem Fall "*" für ein beliebiges Trennzeichen steht, wobei alle Trennzeichen identisch sein müssen und für jeden Teil des Strings ein- oder zweistellige Daten erlaubt sind. Daraufhin wird die Länge dieses Strings in eine Variable geschrieben, sowie der String auch auf ein Array bestehend aus den einzelnen Zeichen aufgespalten wird. Die eigentlich Unterscheidungmethodik des Strings anhand dessen Länge wird nun vorgenommen. Die Vorgehensweise selbst ist immer die gleiche: 1) es wird geprüft ob die Trennzeichen immer die gleichen sind 2) es wird geprüft ob die restlichen Zeichen Zahlen sind, und falls dies so ist werden die Characters in Zahlen umgewandelt und Datum/Zeit berechnet. 3) falls keines der Datumsformate "passt", wird die Prüfvariable "datumOk" auf false gesetzt, woraufhin es zur Ausgabe von "FALSCHE EINGABE" kommt. - Die erste Möglichkeit ist nun, dass der Eingabestring die Länge 9 hat. Dann kann er nur die Form T/M/J/s/m haben. - Die zweite Möglichkeit ist, dass der Eingabestring die Länge 10 aufweist. Dann kann es sich dabei um das Format "TTMMJJssmm", "TT/M/J/s/m", "T/MM/J/s/m", "T/M/JJ/s/m", "T/M/J/ss/m" oder "T/M/J/s/mm" handeln. Deswegen wird zuerst geprüft, ob der String nur aus Zahlen besteht. Ist dies nicht der Fall, wird die Prüfvariable ddmmjj auf false gesetzt woraufhin die übrigen 5 Varianten ausgetestet werden. - Die dritte Möglichkeit ist, dass der Eingabestring die Länge 11 besitzt. Es wird dann mit folgenden Formaten verglichen: "TT/MM/J/s/m", "TT/M/JJ/s/m", "TT/M/J/ss/m", "TT/M/J/s/mm", "T/MM/JJ/s/m", "T/MM/J/ss/m", "T/MM/J/s/mm", "T/M/JJ/ss/m", "T/M/JJ/s/m" oder "T/M/J/ss/mm". - Die vierte Möglichkeit ist, dass der Eingabestring aus 12 Zeichen besteht. Das wären folgende Formate: "TT/MM/JJ/s/m", "TT/MM/J/ss/m", "TT/MM/J/s/mm", "TT/M/JJ/ss/m", "TT/M/JJ/s/mm", "TT/M/J/ss/mm", "T/MM/JJ/ss/m", "T/MM/JJ/s/mm", "T/MM/J/ss/mm" oder "T/M/JJ/ss/mm". - Die fünfte Möglichkeit ist, dass die Länge des Eingabestrings 13 ist. Also folgende Formate wären möglich und werden abgeprüft: "TT/MM/JJ/ss/m", "TT/MM/JJ/s/mm", "TT/MM/J/ss/mm", "TT/M/JJ/ss/mm" oder "T/MM/JJ/ss/mm". - Die sechste und letzte Möglichkeit wieder ist eine Länge des Eingabestrings von 14 Zeichen. Dies könnte nur dieses Format sein "TT/MM/JJ/ss/mm". Das eingegebene Jahr wird laut Angabe immer auf das Jahr 20. Jahrhundert bezogen. Das Jahr darf somit nur zwischen 1900 und 1999, das Monat zwischen 1 und 12, und der Tag abhängig vom Monat zwischen 1 und 28, 1 und 29, 1 und 30 oder 1 und 31 liegen. Die Stunden dürfen zwischen 1 und 24, die Minuten zwischen 1 und 60 liegen. Nach dieser Überprüfung wird der Wochentag des ersten Jänners des entsprechenden Jahres mit folgender Formel Wochentag 1.1. = (Jahr + floor((Jahr-1/4) - floor((Jahr-1/100) + floor((Jahr-1/400)) mod 7 bestimmt. Das gibt 0 für Sonntag, 1 für Montag ... 6 für Samstag. Dann wird ein Objekt kalender erzeugt um das Datum auf ein mögliches Schaltjahr zu untersuchen und anschließend den berechneten Wochentag auszugeben. Eine weitere kleine Überprüfung stellt den Stunden bzw. Minuten, falls diese nur einstellig sind eine Null voran. Dieses 6-stellige Ergebnis der datum-Klasse wird nun in der main-Methode der Klasse Anzeige weiterverarbeitet. Es wird jedes Zeichen einzeln mit den möglichen Zeichen verglichen, und bei Gleichheit die entsprechenden Positionen der 7-Segment-Anzeige ausgegeben.