1206 |
divpoly |
Division von zwei Polynomen |
Kategorie: | Mathematik |
Klasse: | schwer |
Eingabe: | String |
Ausgabe: | String |
|
Abzugebende Files: divpoly.txt, divpoly.java |
Kurzbeschreibung:
Es sollen 2 Polynome durcheinander dividiert, und Ergebnis sowie Rest ausgegeben werden.
Allgemeine Hinweise:
-
Ihr Programm darf nur genau jene Ausgabedaten liefern, die in der Spezifikation
verlangt werden. Die Ausgaben Ihres Programmes werden automatisch mit
Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
-
Testen Sie Ihr Programm vor der Abgabe mit der mitgelieferten Eingabedatei.
Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihres Programmes mit der
ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihr
Programm auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Programme, 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 mit 0 Punkten bewertet!
-
Schreiben Sie Ihr Programm möglichst allgemein und kommentieren Sie es gut.
Erstellen Sie weiters eine übersichtliche und verständliche Dokumentation.
Damit erhöhen Sie Ihre Chancen, daß andere Studenten in den nächsten Runden
Ihr Programm wählen und Ihnen damit zu Zusatzpunkten verhelfen!
Aufgabenstellung:
Entwickeln Sie ein Programm, welches zwei Polynome in Stringform einliest.
Bsp. für ein solches Polynom: x2-3x+2
Es bedeutet dabei 'x2' -> x hoch 2 ; 2 ist der Grad des Gliedes
'3x' -> 3 mal x ; 3 ist der Koeffizient des Gliedes
Die durchzuführende Polynomdivision erfolgt analog zur Division zweier Zahlen.
Hier ein Beispiel:
Das Ergebnis ist x2-3x+2 und der Rest beträgt x .
Vorgangsweise:
Ermitteln Sie zuerst, wie oft das erste Glied des Nenner-Polynoms (2x)
im ersten Glied des Zähler-Polynoms (2x3) enthalten ist ( -> x2). Dies
ist zugleich der erste Teil der Lösung.
Das Nenner-Polynom wird nun mit dem erhaltenen Wert multipliziert ( -> 2x3+x2),
die Vorzeichen werden invertiert ( -> -2x3-x2) und das Ergebnis vom
Zähler-Polynom subtrahiert. Das ergibt im obigen Bsp. (-6x2+2x+2).
Nun werden dieselben Vorgänge weiter wiederholt, bis das Ergebnis der
Subtraktion kleiner als das Nenner-Polynom ist. Der verbleibende Ausdruck ist
der Rest der Division.
Eingabedaten:
Lesen Sie die beiden Polynome als Strings ein.
Der Grad der Polynome soll 1 stellig sein (0-9) und die Koeffizienten der
einzelnen Glieder (ganzzahlig) maximal 3 stellig.
Die eingelesenen Strings sollen max. 40 Zeichen lang sein.
Die Polynome sollen in oben beschriebener Form eingegeben werden.
Erlaubte Zeichen: Ziffern (0-9), '+', '-', und 'x'
Das Nenner-Polynom darf nicht höheren Grades sein als das Zähler-Polynom.
Ausgabedaten:
Bei korrekten Eingaben soll Ihr Programm das Ergebnis der Division und den
durch ein Leerzeichen getrennten Divisionsrest ausgeben (gefolgt von einem
Zeilenvorschub).
Ist der Divisionsrest Null so geben Sie 0 aus.
Die Ergebnis-Polynome sollen nach Koeffizienten absteigend sortiert werden.
Fehlerbehandlung:
Sämtliche Eingabedatensätze sind immer vollständig einzulesen.
Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.
Sind die Datentypen bei allen Eingaben richtig, die
eingegebenen Daten aber inhaltlich nicht korrekt (z.B. zweites
Polynom gleich 0) oder erfüllen nicht die
Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.
Beispiele:
Eingabedaten
|
2x3-5x-2+2x+2 2x+1
2x3-5x2+2x+2 2x+1
|
Ausgabedaten
|
FALSCHE EINGABE
x2-3x+2.5 -0.5
|
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 divpoly < divpoly.i1 > divpoly.out1
Das erzeugte File divpoly.out1 können Sie dann mit dem mitgelieferten Outputfile divpoly.o1 vergleichen.