Aufgabe 6.2

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 6.2

  1. In welcher Reihenfolge sollen die Koeffizienten angenommen werden? Einerseits macht es Sinn, dass bei getKoeffizient(0) der Koeffizient nullter Ordnung zurückgegeben wird, andererseits ist bei den Beispielen von PolynomLoeserInterface der erste Koeffzient immer der, der höchsten Ordnung.
  2. Warum ist der Constructor PolynomInterface(int[]koeff) auskommentiert? Muss man den nicht implementieren? Reicht der Constructor Polynom(int[]koeff)?

Von groß nach klein.

Dann bau deinen Konstruktor doch so, dass er die Koeffizienten umgekehrt in ein Array füllt, so das Index = Grad.

Weil du sonst einen Konstrukter PolynomInterface implementieren müsstet, was sich aber als schwierig herausstellen wird wenn die Klasse Polynom heißt. Was haben wir gelernt über Klassen und Konstrukter Namen?

nicht reicht, sondern genau das.


getKoeffizient(0) gibt den Koeffizienten 0ter Ordnung zurück, das siehst du richtig! wegen dem Polynominterface hab ich bei Marc angefragt, antwort (sinngemäß): „der aufbau eines Programms muss nicht immer logisch sein. Alles was unlogisch erscheint ist zwecks Übung!“ du ,musst halt das StringArray das du ausliest einmal invertieren und in ein intArray packen, sollte ja nicht die welt sein!

ganz einfach, weil interfaces keine Konstruktoren enthalten dürfen!


Exakt der Konstruktor steht nur im Interface, damit ihr ihn nicht vergesst oder andere schreibt. Faktisch kann man eine Klasse nicht dazu zwingenen ienen bestimmten Konstruktor zu haben, aber andeuten kann man es :wink:


Stimmt, Interfaces können ja gar keinen Constructor besitzen. Also wenn ich euch richtig verstanden hab, dann ist beim Polynom-Constructor index==grad korrekt? Oder ist es vielleicht auch egal, weil eh nur der PolynomLoeser am Schluss getestet wird?


Jop, ich habe dafür bereits im ProblemLoeser ein neues Array2 gemacht, dass die Auslesedaten im Array1 in umgekehrter Reihenfolge ausliesst, und dann dieses Array 2 an Polynom(Array2) übergibt.

Dadurch kommts gleich richtig an … Array2[0] entspricht hoch ‘0’.


Getestet wird beides,wiedus machst is egal am Schluss muss es funktionieren, aber ich persönlich tu mich leichter mitm denken wenn Grad = index is und nicht umgekehrt


Mal ne Frage zum Horner:
Nehmen wir an, wir haben P_3 = 4x³ + 3x² + 2x + 1
ist dann P_2 = 3x² + 2x + 1
und P_1 = 2x + 1
und P_0 = 1

Bei getKoeffizient() steht im Kommentar:
Kommt der Grad nicht in dem Polynom vor, entspricht das dem Koeffizienten 0.
Soll das jetzt heißen
return 0
oder eher
return a[0]
?

Und die letzte Frage :wink:
Bei der String zu Polynom Funktion ist die Form
i:a_i,a_(i-1),…,a_1,a_0:x
Habt ihr da das i benutzt? Ist es nicht schon anhand der Anzahl der Koeffizienten klar wie hoch der Grad ist?

Bin krank und deswegen ein bissl verwirrt :wink:
Danke für eure Hilfe ^^


soll das Berechnen beim “PolynomLoeser” von der Methode im “Polynom” übernommen werden oder nochmal extra in der “PolynomLoeser” implementiert werden ?

Ich habs jetzt mal ersteres gemacht.


Ich denke mal, man soll schon die Klasse Polynom verwenden, sonst wäre es wohl kaum in derselben Aufgabe. Polynom ist eben eine Klasse zur Berechnung von Polynomen und PolynomLoeser die Anwendung derselben.


Hallo allerseits!

Ich versuche grade, den String auszulesen.

Ich kann ihn zwar mit parseInt() konvertieren, aber zum Zerlegen brauche ich laut Internet entweder die Klasse StringBuffer oder den StringTokenizer. Kann mir schon irgend jemand sagen, wie ich den StringBuffer in berechne() einbauen muss, damit er mir mehr ausgibt als Fehlermeldungen? Momentan kann ich noch nicht auf diese Klasse zugreifen…


Schau dir mal die Funktion String.split() an. Damit brauchst du keinen StringBuffer oder StringTokenizer. Wenn du sie umbedingt benutzen willst, dann schreib doch mal die Fehlermeldungen.

PS: Kann mir niemand auf meine Frage antworten?


Noya: Eigentlich könntest du den Grad auch aus der Anzahl der Koeffizienten ableiten, aber falls auch fehlerhafte Strings übergeben werde oder Koeffizienten 0 sind, könnte das nicht ganz optimal sein. Ich weiß leider gerade selbst nicht, ob der Testcase so etwas überprüft, ich glaube aber nicht. Persönlich werde ich mit gültigen Strings testen, da in der Aufgabenstellung keine Behandlung von Fehleingaben gefordert war.

HTH.


zur ersten Frage, der Koeffizient bei einem Grad der nicht vorkommt ist 0.

zur zweiten Frage, weder das i hab ich benutzt noch ist es klar wie ich hoch der Grad ist auf Grund der Anzahl der Koeffizienten. Grund (z.B. Beispiel 3) es werden führende Nullen mit übergeben also 0x^6 + … der Grad des Polynoms ist somit nicht 6 wie das i oder die Anzahl der Koeffs suggerieren möchte.
Ich hab dieses DAU-bedingte Problem so gemanaged, dass im Polynomkonstruktor, solche führenden 0-Koeffs erst übersprungen werden bevor die koeffs letztendlich den Koeffizienten zugewiesen werden, dann hauts auch mit dem richtig getMaxGrad() hin (Beispiel 3.: 5 statt angegebene 6).


@yogan: Es könnte ja zum Beispiel auch ein String der Form: 2:3,4,5,6,7,8:2 sein. Dann wäre es auch seltsam zu sagen, der höchste Grad ist 2. Naja wird schon passen, danke :wink:

@Der Ich: Merci, jetzt versteh ich die Formulierung. Autsch.

Versteh ich das Horner-Schema jetzt richtig oder falsch? (Siehe mein Beispiel oben…)
Danke an Alle :wink:


Dein Hornerschema ist falsch. In deinem beispiel müssten die einzelnen teile so aussehen:
P’_0=4
P’_1=4x+3
P’_2=4x^2+3x+2
P’_3=4x^3+3x^2+2x+1


klick

Ah, okay, danke :wink:


kann es sein, dass das BEISPIEL3 falschherum angegeben ist? wenn ich den string gemäß dem schema i:ai,a_(i-1)… einlesen lasse bekomme ich P(-1) = -7. wenn ich dagegen die koeffs reihenfolge umdrehe krieg ich P(-1) = -19, was mit der im interface angegebenen lösung übereinstimmt. bei den anderen beispielen bekomme ich die angegebene lösung aber bei “normaler” reihenfolge


Beispiel 3 ist in der richtigen Reihenfolge; zumindest funktioniert es bei mir einwandfrei.

Gibt es uU Probleme bei der Entfernung der 0 vorne ? Der max grad ist ja daher 5 und nicht 6 … vielleichts gibts da irgendwelche Verdreher bei deiner Umsetzung.