1148 | notcheck | Musiknoten ueberpruefen | ||||||||
| ||||||||||
Abzugebende Files: notcheck.txt, notcheck.java |
Musiknoten und eine Tonart werden eingelesen; es wird überprüft, ob die Noten in dieser Tonart vorkommen.
Ihr Programm soll zwei Strings einlesen, von denen der erste Musiknoten enthalten soll und der zweite die Tonart angibt. Ihr Programm soll (neben der üblichen Syntax\-Kontrolle) überprüfen, ob die eingelesenen Noten in der angegebenen Tonart vorkommen. In der Ausgabe werden jene Noten, die nicht in der Tonleiter vorkommen, durch Klammern gekennzeichnet.
Erlaubte Zeichen für die Noten sind "c","d","e","f","g","a","h" und das Halbtonzeichen "#" (z.B. f#=fis). Der zweite String hat das Format Note-Tonart (Dur oder moll) (z.B. c-Dur, f#-moll).
Um die vorkommenden Noten pro Tonart zu berechnen, verwenden Sie folgende Angaben:
Für jede Tonart sind die entsprechenden Abstände (Intervalle) einzuhalten:
Dur 1 1 1/2 1 1 1 1/2 moll 1 1/2 1 1 1/2 1 1 Chrom. Tonleiter c c# d d# e f f# g g# a a# h z.B. c-Dur c d e f g a h z.B. e-moll e f# g a h c d
Lesen Sie zuerst den String ein, der die Noten enthält. Dieser darf nur aus den oben genannten Zeichen bestehen, wobei nur Kleinbuchstaben erlaubt sind. Halbtonschritte müssen mit dem Zeichen "#" gekennzeichnet werden, das der Note nachgestellt wird. Das Zeichen "b" ist nicht erlaubt! Der String darf maximal 30 Zeichen lang werden. Es sind keine Trennzeichen zwischen den Noten erlaubt.
Der zweite String besteht aus einer Note (wie oben), gefolgt von einem Bindestrich und einer der Tonarten "Dur" oder "moll". Beachten Sie, dass "Dur" mit groaem "D" geschrieben werden muss, "moll" aber klein.
Bei korrekten Eingabedaten soll Ihr Programm die eingelesenen Noten ausgeben, wobei jene Noten, die nicht in der angegebenen Tonart vorkommen, in runde Klammern gesetzt werden sollen. Achtung: Wenn mehrere Noten hintereinander nicht in der Tonart vorkommen, so ist nur eine Klammer zu öffnen und zu schlieaen. [FALSCH: ah(c#)(d#)e RICHTIG: ah(c#d#)e]. Die einzelnen Noten sind sonst nicht zu trennen; die Ausgabe besteht also aus einem String.
Geben Sie danach einen Zeilenvorschub aus.
Sind die eingegebenen Daten nicht korrekt (z.B. zu lang, falsche Zeichen), so soll Ihr Programm die Meldung "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.
Eingabedaten |
ahcg#f#d a-moll
ahcg#f#d c-Dur ahckde d-Dur |
Ausgabedaten |
ahc(g#f#)d
ahc(g#f#)d FALSCHE EINGABE |
Bemerkung: 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 notcheck < notcheck.i1 > notcheck.out1
Das erzeugte File notcheck.out1 können Sie dann mit dem mitgelieferten Outputfile notcheck.o1 vergleichen.