Aufgabe 6.2


mal ne dumme frage, für die klasse polynom.java.

angenommen ich hab ein array

a[0]=0;
a[1]=0;
a[2]=0;
a[3]=1;
a[4]=0;
a[5]=2;
a[6]=2;
a[7]=0;
a[8]=0;

so also 0,0,0,1,0,2,2,0,0. was ist dann der maximal grad? ist der vier?


5

Dein Array ist derzeit falsch rum eingelesen. Du musst von der anderen Seite beginnen.


wieso andersrum? und warum ist der grad bitte 5? das sind doch die koeffizienten. also

1x^3+2x+2x^0


Also ich wuerde sagen, wenn das Array dem Konstruktor von Polynom uebergeben wird repraesentiert er folgendes Polynom:

0x^0+0x^1+0x^2 + 1x^3 + 0x^4 + 2x^5 + 2x^6 + 0x^7 + 0*x^8

das entpricht in etwas lesbarer Form:
2x^6 + 2x^5+x^3

Das Polynom hat dann wohl den Grad 6.


Gut, ich bin einfach mal von der Schreibweise in PolynomLoeser ausgegangen:

Bsp: 0,3,-1,4,6,5,-12
Zusammenstellung: a_i,a_(i-1),…,a_1,a_0

Aber sollte wohl was anderes darstellen. Ansonsten, nur das Array betrachtet selbstverständlich Grad 6.


um auch hier wieder meister marc sinngemäß zitieren zu dürfen:

die Klasse Polynom erhält die Koeffizienten in der Reihenfolge a0 a1 … bis an also von kleinem Grad nach großem Grad in dem Fall Wäre es Polynom Grad 6 was es auch ist. Daher ist es die Aufgabe in PolynomLoeser den String zu zerteilen, die Koeffizienten reihenfolge zu invertieren und dann an Polynom zu geben. Polynom hat noch als zusatzaufgabe dann die führenden 0en von Grad 7 und Grad 8 abzuschneiden, da sonst getMaxGrad() 8 zurückgeben würde, es kommt zwar das richtige Ergebnis raus, aber ein falsche Grad würde man danach fragen :wink:


ok, alles gut und schön, aber das array muss nicht zwingend invertiert werden. wenn mein höchster grad z.b. im array[0] steht gelange ich zu ihm über “array.length - getMaxGrad()”. und maxgrad könnte schauen wie viele führende nuller im array sind und dann die array.length - führende nuller machen. kommt auch zum erfolg…

aber ich hab noch mal ne dumme frage: was haben berechne() und berechneHorner() gemein? soll berechne() die emthode berechneHorner() aufrufen? oder soll nur berechneHorner() das horner schema anwenden, während berechne() es einfach iterativ löst?


Du könntest es vermutlich so lösen, würdest nur uU Punktabzüge erhalten, da du die Aufgabenstellung nicht umgesetzt hast:

“[…] int-Feld akzeptieren, in dem an der Stelle i der i-te Koeffizient des Polynoms […]”

Zweiter Fall sollte stimme, berechne() soll berechneHorner() aufrufen.


danke…

…na super, weil ich auch die angaben nicht lese, naja jetzt muss ichs wohl invertieren.

finds halt nur blöd, wenn wir immer in einem so kleinen toleranzbereich arbeiten müssen. wenn es doch auch so funktioniert, was ist dann daran auszusetzen? wir sollten wirklich mehr freiheiten haben


Ich nehme an, dass die Testcases diesmal Polynom und PolynomLoeser einzeln testen und nicht nur deren Zusammenspiel. Wenn du also davon ausgehst, dass dein Polynom die Koeffizienten andersrum bekommt, würden alle Test auf Polynom fehlschlagen.


So ist das nunmal mit Objektorientierten denken, jede einzelne Komponente muss da tun, was man von ihr erwartet (bzw von ihr verlangt ist)

fast fertig (glaub ich)
Hallo zusammen,

ich hab ein kleines Verständnis-/Vorstellungsproblem: Ich sehe die Verknüpfung von Polynom und PolynomLoeser nicht. Beide Klassen erfüllen jedoch schonmal ihren Zweck: Polynom berechnet mit Horner einen Wert während PolynomLoeser einen gegeben String in die entsprechenden Teile zerteilt.
Soll aus PolynomLoeser der Teil mit den Koeffizienten an Polynom übergeben werden? Was geschieht mit der übergeben Stelle x und dem Grad i? Soll die Berechnung des Horner-Wertes die Methoden getMaxGrad() und getKoeffizient() in irgendeiner Weiße verwenden?

Vielen Dank für etwaige Erklärungen :slight_smile:


Ja.

Damit wird f(x) berechnet.

Ist nicht nötig.


naja PolynomLoeser zerteilt den String so, dass du die entsprechenden Koeffizienten an Polynom weitergeben kannst, und schlussendlich das ergebnis ausgeben kannst! (hast du doch richtg verstanden!)

ob du getmagrad() und getkaffee() in deinem Polynom verwendest ist Geschmackssache spätesten wenn die Terme in diesen Funktionen 1 Zeile überschreiten würdest du die Methoden verwenden! (schöner ist natürlich die methode zu verwenden!)

ganz fertig (glaub ich)
Danke mrjazz und Absurd-Mind. Gesagt - getan: Ausgabe der PolynomLoeser() ist jetzt also

829
122223
-19
82447

Damit dürfte ich fertig sein (vielleicht bau ich noch die main() in PolynomLoeser so um, dass sie auch Parameter entsprechend der Berechnungsvorschrift auswertet…)
Danke nochmals!


Selbst wenn die Terme recht kurz sind, ist die Methode vorzuziehen. Denn dann ist es sauber gekapselt und wenn du die Speicherung deiner Koeffizienten aendern solltest, dann musst du das nur in getMaxGrad und getKoeffizient aendern, ansonsten ueberall da, wo du diese Methoden quasi ersetzt hast.
Wenn man sich jetzt schon angewoehnt sauber zu programmieren und die dafuer vorgesehenen Methoden zu verwenden, dann kann das nur von Vorteil sein. :wink:


Hallo, ich stehe grad etwas auf dem Schlauch :frowning:

Und zwar, meine Polynom.java und meine PolynomLoeser.java machen beide einzeln was sie sollen, allerdings weiss ich nicht, wie ich das im PolynomLoeser.java errechnete Array der Koeffizienten an die Polynom.java übergeben soll :-/

Kann mir jemand da etwas auf die Sprünge helfen, danke schon mal :slight_smile:


in der methode von polynomloeser einfach ein polynom erstellen lassen und dann mit polynomname.berechne(x) ausrechnen lassen und dann returnen.


Ja aber da fehlt ja irgendwie immer noch die Verbindung zwischen der Polnom.java und der PolynomLoeser.java


PolynomLoeser zieht aus einem String, ein Polynom, dass dann anhand von Polynom ausgerechnet wird, was gibt es da nicht zu verstehen?