EPROG-LU - Aufgabe 3126 (7 Segment LED Anzeige)
3126 |
Anzeige |
7 Segment LED Anzeige |
Kategorie: | Elektrotechnik |
Klasse: | mittel |
Eingabe: | siehe Spezifikation |
Ausgabe: | siehe Spezifikation |
|
Abzugebende Files: Anzeige.txt, Anzeige.java, *.java |
Kurzbeschreibung:
Die Balken der 7-Segment-Anzeige einer Digital-Uhr werden "angesteuert",
umein eingelesenes Datum samt Uhrzeit auszugeben.
Allgemeine Hinweise:
-
Sie haben Lösungen (und Spezifikationen) aus der 1. Runde von anderen Studenten erhalten,
die Ihnen Ihre Aufgabe erleichtern sollen. Wählen Sie eine Lösung aus, die Ihnen hinsichtlich Lesbarkeit, Programmierstil,
Korrektheit und Verwendbarkeit am besten erscheint. Verwenden Sie
diese Lösung in Ihrem Programm. Sie können auch die anderen Lösungen einsetzen.
- Merken Sie sich die Lösungsnummer des ausgewählten Beispieles für die Abgabe. Diese Nummer müssen Sie bei der Abgabe angeben. Geben Sie nur jene Lösungsnummer an, die Sie auch wirklich ausgewählt haben.
-
Erstellen Sie für alle Lösungen zu diesem Beispiel (siehe: "Abzugebende Files") ein File mit dem Namen <number>.txt. und schreiben in dieses File ein Review (=Kritik) zu der Lösung. Diese Reviews erhalten dann die TeilnehmerIn von dem/der die Lösung stammt. Beachten Sie das bitte bei der Form Ihrer Kritik.
-
Sie können für die Lösung der gewählten Aufgabe eine oder mehrere Klassen programmieren. Die Klasse Anzeige.java muß aber die Methode main enthalten. Weiters müssen alle abgegebenen Klassenfiles in demselben Verzeichnis vorliegen, Pfadangaben sind nicht gestattet.
-
Achten Sie auf die korrekten Konventionen der Groß/Kleinschreibung bei
Klassen und Methoden!
[Wir tun das jetzt auch :-)]
-
Falls Ihre Lösung einen Exit Code zurueckliefert, so
achten Sie darauf, dass dieser den Wert 0 hat.
Bei allen anderen Werten können Probleme bei der Bewertung und in weiterer
Folge unbeabsichtigte Punkteabzüge auftreten.
- Ihre Lösung darf nur genau jene Ausgabedaten liefern, die in der
Spezifikation verlangt werden. Die Ausgaben Ihrer Lösung werden automatisch mit Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
- Testen Sie Ihre Lösung vor der Abgabe mit der mitgelieferten Eingabedatei. Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihrer Lösung mit der ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihre Lösung auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Klassen, die Packages oder Klassen ausserhalb der verwendeten Übungsumgebung (Java2, Standard Edition, Version 1.5.0) verwenden, können von uns
nicht getestet werden und werden daher mit 0 Punkten bewertet!
- Schreiben Sie Ihre Klasse(n) möglichst allgemein und kommentieren
Sie diese gut. Erstellen Sie weiters eine übersichtliche und
verständliche Dokumentation. Damit erhöhen Sie Ihre Chancen,
daß andere Studenten in der nächsten Runde Ihre Lösung
wählen und Ihnen damit zu Zusatzpunkten verhelfen!
Aufgabenstellung:
Ihr Programm soll ein Datum und eine Uhrzeit einlesen und daraus
Zahlenkolonnen berechnen, die angeben, welche Segmente einer sechsstelligen
Sieben-Segment-Anzeige man aktivieren muß, um den Wochentag und die Zeit anzuzeigen.
Die Anzeige sieht folgendermaßen aus:
Die Balken jeder Ziffer sind wie folgt numeriert:
Nummern werden auf der Anzeige wie folgt dargestellt:
Die ersten zwei Ziffern der Anzeige sollen verwendet werden, um den Wochentag
anzuzeigen. (MO, DI, MI, DO, FR, SA bzw. SO). Dabei müssen klarerweise manche Buchstaben stililiert werden; verwenden Sie folgende Zahlenkolonnen für die Darstellung der Buchstaben:
A -> 123567
D -> 123456
F -> 1567
I -> 56
M -> 12356
O -> 123456
R -> 123567
S -> 13467
Für jede Ziffer der darzustellenden Zeit soll eine Kolonne geliefert werden,
die angibt, welche Segmente aufleuchten sollen. Dabei sollen die Ziffern
jeder Kolonne aufsteigend sortiert sein. 1 wird z.B. als 23 codiert.
Für die Ermittlung des Wochentages können Sie folgende Formel benutzen;
diese
liefert den Wochentag des 1. Jüanner eines gegebenen Jahres. Daraus können
Sie
dann den Wochentag des gegebenen Datums ermitteln.
Wochentag 1.1. = (Jahr + floor((Jahr-1)/4) - floor((Jahr-1)/100) +
+ floor((Jahr-1)/400)) mod 7
wobei floor(x) für die größte ganze Zahl <= x steht.
Diese Formel liefert 0 für Sonntag, 1 für Montag, ... , 6 für Samstag.
Eingabedaten:
Lesen Sie einen String ein, der das Datum und die Uhrzeit enthält. Dieser
String muß in einem der folgenden Formate vorliegen:
"TTMMJJHHMM" oder "Tag*Monat*Jahr*Stunde*Minute", wobei * für ein
beliebiges
Trennzeichen (keine Ziffer, kein Buchstabe) steht und alle Trennzeichen
identisch sein müssen.
2-Stellige Jahresangaben sind im 20. Jahrhundert angesiedelt. 93 -> 1993
Hierbei ist zu beachten, daß im ersten Fall jede der Komponenten Tag, Monat,
Jahr, Stunden und Minuten zweistellig angegeben sein muß, also
gegebenenfalls mit führender Null.
Das Datum und die Zeit müssen gültig sein (z.B. kein 30. Februar).
Ausgabedaten:
Bei korrekten Eingabedaten soll Ihr Programm die sechs Zahlenkolonnen ausgeben, die zur Darstellung von Wochentag und Uhrzeit notwendig sind. Die Uhrzeit wird immer mit 4 Stellen ausgegeben, gegebenenfalls wird bei Stunde bzw. Minute eine 0 vorangeschrieben. Trennen
Sie die sechs Strings durch jeweils ein Leerzeichen und geben Sie am Ende
einen Zeilenvorschub aus.
Fehlerbehandlung:
Entsprechen die eingelesenen Daten nicht den Bedingungen, so geben Sie die
Meldung "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, aus.
Beispiele:
Ausgabedaten
|
12356 56 123456 12347 23 12457
|
Testen:
Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und
müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie
bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung
können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei
erzeugen:
java Anzeige < Anzeige.i1 > Anzeige.out1
Das erzeugte File Anzeige.out1 können Sie dann mit dem mitgelieferten Outputfile Anzeige.o1 vergleichen.