3128 Transpo Transponieren von Musiknoten
Kategorie:Musik
Klasse:mittel
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Transpo.txt, Transpo.java, *.java , 377.txt, 616.txt

Kurzbeschreibung:

Musiknoten und eine Tonart werden eingelesen; es wird überprüft, ob die Noten in dieser Tonart vorkommen. Die Noten werden in eine andere Tonart transponiert.

Allgemeine Hinweise:

Aufgabenstellung:

Ihr Programm soll drei Strings einlesen, von denen der erste Musiknoten ent- halten soll und der zweite die Tonart angibt, in der diese Noten liegen. Als dritter String wird eine Tonart eingelesen, in die diese Noten transponiert werden sollen. Ihr Programm soll überprüfen, ob die eingelesenen Noten in der angegebenen Tonart vorkommen. Für jene Noten, die in der ersten Tonart nicht vorkommen, ist die nächsthöhere richtige Note zu bestimmen und diese zu transponieren.

Erlaubte Zeichen für die Noten sind "c","d","e","f","g","a","h" und das Halbtonzeichen "#" (z.B. f#=fis). Der zweite und der dritte String haben 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

Eingabedaten:

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 und der dritte String bestehen aus einer Note (wie oben), gefolgt von einem Bindestrich und einer der Tonarten "Dur" oder "moll". Beachten Sie, daß "Dur" mit großem "D" geschrieben werden muß, "moll" aber klein.

Ausgabedaten:

Bei korrekten Eingabedaten soll Ihr Programm die transponierten Noten liefern. Die einzelnen Noten sind sonst nicht zu trennen; die Ausgabe besteht also aus einem String. Es dürfen nur Kleinbuchstaben ausgegeben werden.

Geben Sie danach einen Zeilenvorschub aus.

Fehlerbehandlung:

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. Es sind aber auf jeden Fall alle drei Strings einzulesen.

Beispiele:

Eingabedaten
cde c-Dur a-moll

d#fg e-moll c-Dur

Ausgabedaten
ahc

cde


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 Transpo < Transpo.i1 > Transpo.out1

Das erzeugte File Transpo.out1 können Sie dann mit dem mitgelieferten Outputfile Transpo.o1 vergleichen.