4112 symbdiff Symbolisches Differenzieren
Kategorie:Mathematik
Klasse:schwer
Eingabe:Siehe Spezifikation
Ausgabe:Siehe Spezifikation
Abzugebende Files: symbdiff.txt, Main.java, symbdiff/*.java , 4698.txt, 4729.txt

Kurzbeschreibung:

Eine Funktion soll differenziert werden.

Aufgabenbeschreibung:

Eine Funktion wird eingelesen, soll differenziert und vereinfacht und ausgegeben werden. Die Funktion darf aus einzelnen Termen bestehen, die eine der folgenden Formen haben müssen:

Differentationsregeln:

(<Koeffizient><x><Exponent>)' => <Koeffizient>*<Exponent><x><Exponent>-1 für <Exponent> größer als 1

(<Koeffizient><x>1)' oder (<Koeffizient><x>)' => <Koeffizient>

(<Zahl>)' => fällt gänzlich weg

e(<Zahl><x>)' => <Zahl>e(<Zahl><x>)

sin(<Zahl><x>)' => <Zahl>cos(<Zahl><x>)

cos(<Zahl><x>)' => -<Zahl>sin(<Zahl><x>)

(Ist bei e, sin oder cos keine Zahl vor der Variable <x> wird die erste <Zahl> (also die innere Ableitung) bei der Berechnung der Ableitung weggelassen)

(Term1+Term2)' => Term1' + Term2'

(Term1-Term2)' => Term1' - Term2'

BEACHTE:

Eine Funktion darf aus maximal 6 Termen bestehen.

Vereinfacht soll nur anhand folgender Regeln werden:

  1. Alle Terme, die bis auf den Koeffizienten gleich sind, sollen zusammengefasst werden, indem die Koeffizienten addiert bzw. subtrahiert werden.
  2. Beim Zusammenfassen von Termen gilt: Terme werden an jene Stelle "vorgezogen" an der sie vor der Vereinfachung als erstes aufgetreten sind.

Eingabedaten:

Eine Funktion, die aus den zuvor spezifizierten Termen bestehen darf. Innerhalb der Funktion sind keine Leerzeichen erlaubt. Differenziert wird nach nach dem ersten erkannten (deutschen) Alphabetszeichen (keine Umlaute), das nicht eine höhere Funktion (wie sin, cos, e) darstellt. Außer dieser Variable sind keine andersnamigen Variablen erlaubt.

Ausgabedaten:

Ausgegeben wird die resultierende Funktion, die laut vorigen Regeln differenziert und vereinfacht wurde. Kürzt sich alles heraus wird einfach 0 ausgegeben. Geben Sie am Ende einen Zeilenvorschub aus.

Fehlerbehandlung:

Genügt die Eingabe nicht den Erfordernissen, ist nur eine Fehlermeldung FALSCHE EINGABE gefolgt von einem Zeilenvorschub auszugeben.

Beispiele:

Eingabedaten
cos(3a)+3a2+5a2-4a3+cos(3a)

e(s)+e(s)-cos(3x

Ausgabedaten
-6sin(3a)+16a-12a2

FALSCHE EINGABE


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 Main < symbdiff.i1 > symbdiff.out1

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