palpalo Geschrieben 21. November 2007 Geschrieben 21. November 2007 weisst denn einer wie ich diese Pseudocode programm mit c++ besser gesagt in microsoft visual studio programieren kann, welche die nullstelle einer polynom mit Bairstow-Verfahren erechnet? j=n b0 = f(n) b1 = 0 q0 = 0 q1 = 0 For j = n - 1 To 0 Step -1 b2 = b1 b1 = b0 b0 = f(j) - a1 * b1 - a0 * b2 q2 = q1 q1 = q0 q0 = b2 - a1 * q1 - a0 * q2 Next j M = -a0 * q1 - a1 * q0 D = q0 * q0 - M * q1 da1 = (b0 * q1 - b1 * q0) / D da0 = (b1 * M - b0 * q0) / D a1 = a1 - da1 a0 = a0 - da0[/PHP] danke vorraus Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Wurde dir nicht schon in deinem ersten Thread gesagt, dass das Abladen von Aufgabenstellungen ohne erkennbare Eigeninitiative wenig Aussicht auf Erfolg hat? Wo genau liegt denn das Problem? Wenn du hinter jede Zuweisung ein Semikolon packst, bist du doch fast fertig. Das einzig "schwierige" daran ist doch die Schleife. Zitieren
qat Geschrieben 22. November 2007 Geschrieben 22. November 2007 Machs dir doch nicht so schwer Klotzkopp, und antworte einfach auf seine Frage: Ja. Zitieren
palpalo Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Wurde dir nicht schon in deinem ersten Thread gesagt, dass das Abladen von Aufgabenstellungen ohne erkennbare Eigeninitiative wenig Aussicht auf Erfolg hat? Wo genau liegt denn das Problem? Wenn du hinter jede Zuweisung ein Semikolon packst, bist du doch fast fertig. Das einzig "schwierige" daran ist doch die Schleife. also erstmal danke für die antwort, aber mit der programierung habe gar kein erfahrung sonst hätte ich auch die frage nicht gestellt bzw. um die hilfe nicht gebeten. Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 aber mit der programierung habe gar kein erfahrung Dann ist diese Aufgabe nichts für dich. Der Sinn dieses Forums ist nicht, anderen die Lösung für Aufgaben vorzusagen, die sie selbst nicht lösen können. Sinn solcher Aufgaben ist nämlich meistens, dass du lernst, wie man solche Probleme löst, wie man also genau diese Erfahrung bekommt, die dir fehlt. Darum bringt es nichts, wenn man fertige Lösungen hinklatscht. Bei konkreten Fragen wird hier immer gern geholfen. Es sollte nur erkennbar sein, dass du etwas lernen willst, und nicht nur auf einfachem Wege an eine Komplettlösung kommen willst. Zitieren
palpalo Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Es sollte nur erkennbar sein, dass du etwas lernen willst, und nicht nur auf einfachem Wege an eine Komplettlösung kommen willst. natürlich will ich lernen will ok, j=n; b0 = f(n); b1 = 0; q0 = 0; q1 = 0; For j = n - 1 To 0 Step -1 b2 = b1; b1 = b0; b0 = f(j) - a1 * b1 - a0 * b2; q2 = q1; q1 = q0; q0 = b2 - a1 * q1 - a0 * q2; Next j; M = -a0 * q1 - a1 * q0; D = q0 * q0 - M * q1; da1 = (b0 * q1 - b1 * q0) / D; da0 = (b1 * M - b0 * q0) / D; a1 = a1 - da1; a0 = a0 - da0; [/PHP] hab über all simikolen geschrieben, bei c sollte auch typ von variablen festgelegt werden, da es sich um komplexe nullstellen handel muss typ float sein oder double. also die variablen müssen definiert werden etwa so [PHP] int j=n; // hier muss int sein, weil n nehme ich an das es für anzahl der koeffizienten ist float b0 = f(n); // definition von variablen für Integrationen float b1 = 0; float q0 = 0; float q1 = 0; float M, D,da1,da2; // Diese Variable sollen auch vor erst definiert werden For j = n - 1 To 0 Step -1 b2 = b1; b1 = b0; b0 = f(j) - a1 * b1 - a0 * b2; q2 = q1; q1 = q0; q0 = b2 - a1 * q1 - a0 * q2; Next j; M = -a0 * q1 - a1 * q0; D = q0 * q0 - M * q1; da1 = (b0 * q1 - b1 * q0) / D; da0 = (b1 * M - b0 * q0) / D; //Ab hier soll es ausgabe sein und mit c sieht so aus cout << a1 = a1 - da1; cout << a0 = a0 - da0; wie würde mit schleife gehen, eventuell so was for(j = n - 1;j=0;i--) { b2 = b1; b1 = b0; b0 = f(j) - a1 * b1 - a0 * b2; q2 = q1; q1 = q0; q0 = b2 - a1 * q1 - a0 * q2; return j; [/PHP] für fehler bzw. hilfreiche ansätze wäre ich froh. Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 for(j = n - 1;j=0;i--) { b2 = b1; b1 = b0; b0 = f(j) - a1 * b1 - a0 * b2; q2 = q1; q1 = q0; q0 = b2 - a1 * q1 - a0 * q2; return j; [/PHP] Der Schleifenkopf sollte so aussehen: for( j=n-1; j>=0; --i ) Die return-Anweisung ist hier falsch, die muss weg. Ein explizites Next brauchst du in C++ nicht, das geschieht automatisch durch den Scope der Schleife. Außerdem muss der gesamte Code noch in eine Funktion gepackt werden - wenn das Programm sonst nichts tun soll, bietet sich main an. Und eine Funktion f brauchst du natürlich auch noch. Zitieren
palpalo Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 ok habs so versucht, aber irgend wie klappt noch nicht #include <iostream> using namespace std; int main() { int n; int j=n; int i; char f; float b0 = f(n); float b1 = 0; float q0 = 0; float q1 = 0; float a0,a1,b2,q2,da0; float M, D,da1,da2; for( j=n-1; j>=0; --i ) { b2 = b1; b1 = b0; b0 = f(j) - a1 * b1 - a0 * b2; q2 = q1; q1 = q0; q0 = b2 - a1 * q1 - a0 * q2; } M = -a0 * q1 - a1 * q0; D = q0 * q0 - M * q1; da1 = (b0 * q1 - b1 * q0) / D; da0 = (b1 * M - b0 * q0) / D; a1 = a1 - da1; a0 = a0 - da0; }[/PHP] Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 irgend wie klappt noch nicht ...ist keine ausreichende Fehlerbeschreibung. Ich sagte, du brauchst eine Funktion f. Irgendwie muss dein Programm doch auch wissen, zu welcher Funktion es die Nullstellen ermitteln soll, oder? Außerdem musst du n (die Iterationstiefe) mit irgendeinem Wert vorbelegen. Zitieren
palpalo Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 #include <iostream> using namespace std; int main() { // Variablen Definition bzw. Intialisierung int n=100; int j=n; int i; char f;//=x^3-13*x^2+65*x-125; float b0 = f(n); float b1 = 0; float q0 = 0; float q1 = 0; float a0,a1,b2,q2,da0; float M, D,da1,da2; for( j=n-1; j>=0; --i ) { b2 = b1; b1 = b0; b0 = f(j) - a1 * b1 - a0 * b2; q2 = q1; q1 = q0; q0 = b2 - a1 * q1 - a0 * q2; } M = -a0 * q1 - a1 * q0; D = q0 * q0 - M * q1; da1 = (b0 * q1 - b1 * q0) / D; da0 = (b1 * M - b0 * q0) / D; a1 = a1 - da1; a0 = a0 - da0; cout << a1 <<"\t\t" << a0; }[/PHP] wie übergebe ich den funktion direkt an variable f, als quasi als vordefinierter funktion ohne eingabe aufforderun. mit der fehler dass ich meinte war, das programm wie es bis jetzt aussieht nicht macht. Edit: f habe ich char defienirt, weil die funktion ja auch zeichen beinhaltet, ist denn so richtig? Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Edit: f habe ich char defienirt, weil die funktion ja auch zeichen beinhaltet, ist denn so richtig?Nein, das ist Unsinn. Mit Texten kannst du nicht rechnen. Und versuch erst gar nicht, den Benutzer die Funktion eingeben zu lassen. Dazu brauchst du einen Parser, und davon bist du sehr, sehr weit entfernt. Deine Funktion f muss in etwa so aussehen: float f(float x) { return x*x*x-13*x*x+65*x-125; }[/code] Die Funktion muss vor der main-Funktion stehen. ^ ist in C und C++ kein Potenzoperator, sondern steht für bitweise-exklusiv-oder. a1 und a0 musst du übrigens auch initialisieren, ich vermute, mit den Koeffizienten des Polynoms. Ich glaube außerdem, dass das nur ein Teil des Algorithmus ist. Ehrlich gesagt, dir fehlen die elementarsten Grundlagen, um diese Aufgabe zu lösen. Du solltest dir für den Anfang eine einfachere Aufgabe suchen. Man könnte dir jetzt in vielen einzelnen Schritten erklären, was du tun musst, aber das wäre in etwa so, als wollte man jemandem, der nicht weiß, an welchem Ende man einen Hammer anfasst, oder was ein Ziegelstein ist, erklären, wie man ein Haus baut. Zitieren
palpalo Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 a1 und a0 musst du übrigens auch initialisieren, ich vermute, mit den Koeffizienten des Polynoms. a1 und a0 sind variablen für nullstellen ausgabe, also für reele und komplexe nullstellen ausgabe, ob ein teil der algorithmus fehl mag sein, hab die mir durch such gefunden, steht in wikipedia Bairstow-Verfahren - Wikipedia Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 a1 und a0 sind variablen für nullstellen ausgabe, also für reele und komplexe nullstellen ausgabe a1 und a0 sind nicht die Nullstellen: Das Programmbeispiel in Pseudocode beschreibt einen einzelnen Iterationsschritt, bei dem die Koeffizienten a0 und a1 des quadratischen Polynoms durch zwei Korrekturen da0 und da1 verbessert werden ob ein teil der algorithmus fehl mag sein Auch das steht da: Das Programmbeispiel in Pseudocode beschreibt einen einzelnen Iterationsschritt, bei dem die Koeffizienten a0 und a1 des quadratischen Polynoms durch zwei Korrekturen da0 und da1 verbessert werden Auf jeden Fall musst du in deinem Code a1 und a0 initialisieren, sonst kann das nicht funktionieren. Zitieren
palpalo Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 also er kommt immer der fehler dass der Ausdruck ergibt kein funktion, die argumente übernimmt. und zwar bei zeile der zeilen . . . float b0 = f(n); . . . b0 = f(j) - a1 * b1 - a0 * b2; [/PHP] hast du eventuell vorschlag wie es lösen kann. Zitieren
Klotzkopp Geschrieben 22. November 2007 Geschrieben 22. November 2007 Ich habe mich bezüglich der Bedeutung von f und n geirrt: Das Feld (Array) f() enthält das Polynom, wobei in f(n) der Koeffizient von xn steht. Du brauchst also keine Funktion f, sondern ein Array: float f[] = { -125.0f, 65.0f, -13.0f, 1.0f }; Und statt der runden Klammern benutzt du einfach eckige. Zitieren
palpalo Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 jein, a1 und a0 sind die start werte für Integration, ok a1=5+6*i ==> quasi a1=5+6 und a0 wäre dann kunjegierte von a1 a0=5-6 und muss ich die vorher intialiesieren Zitieren
palpalo Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Ich habe mich bezüglich der Bedeutung von f und n geirrt: n steht für anzahl der koeffizienten, ob man ein polnom 5 erade oder so berechnen will. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.