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:
-
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 Transpo.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.3.1_1) 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 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
|
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.