Entwickler-Ecke
Sonstiges (Delphi) - Programmieren von Quadratischen Gleichungen
jule1988 - Do 23.11.06 11:55
Titel: Programmieren von Quadratischen Gleichungen
ich hab noch ein großes Problem entdeckt.
Ich soll ein programm entwickeln, dass über Quadratische GLeichungen aus den übergegeben Parametern p und q und der Gleichung x²+px+q die Anzahl der Lösungen ermittelt und diese werte zurückgibt
- struktogramm zu Lösung des Problems
- programmieren des "Rechne" und "Abbrechen" buttons
Danke!!!!!!!!!!
(bin echt hilflos!!)
ZeitGeist87 - Do 23.11.06 12:14
Nullstellenberechnung?
Was hast du denn schon?
Und was kannst du..wo hängst du?
jule1988 - Do 23.11.06 12:33
ich hänge komplett.
Mein Problem ist, dass ich lange krank war. eigentlich liebe ich info, aber ich hab bei DElphi über 3/4 der stunden verpasst.
Ich bekomms also garnicht hin.
Ich weiß es ist viel verlangt hier lösungen für meine Aufgaben zu bekommen.
Ich bemühe mich ja, aber mir fehlen die voraussetzungen und innerhalb von einer woche konnte ich das nicht schaffen,
morgen ist die KLausur und ich hab jetz vor den Aufgaben Kapituliert und Brauche echt hilfe
ZeitGeist87 - Do 23.11.06 12:45
zu viel verlangt is nix
und bis morgen wird schwierig würd ich sagen..aber ich will dir keine falschen hoffnungen machen...
versuchen wirs einfach mal...
weißt du was eine Funktion ist?
Rückgabeparameter einer Funktion?
wie du Parameter übergibst?
Variablen?
mister_x - Do 23.11.06 13:32
Titel: Re: Programmieren von Quadratischen Gleichungen
jule1988 hat folgendes geschrieben: |
ich hab noch ein großes Problem entdeckt.
Ich soll ein programm entwickeln, dass über Quadratische GLeichungen aus den übergegeben Parametern p und q und der Gleichung x²+px+q die Anzahl der Lösungen ermittelt und diese werte zurückgibt
- struktogramm zu Lösung des Problems
- programmieren des "Rechne" und "Abbrechen" buttons
Danke!!!!!!!!!!
(bin echt hilflos!!) |
scho ma von der "Mitternachtsformel" gehört?? :shock:
X1/2=-p/2 + - sqrt((p/2)²-q).......
also
Delphi-Quelltext
1: 2:
| X1:=-p/2 + sqrt(p*p/4 - q);X2:=-p/2 - sqrt(p*p/4 - q); |
MIster_X
DaKirsche - Do 23.11.06 13:36
Moin...
Also du willst bis morgen Delphi lernen?????aha....^^
Naja...zumindest bei deinem PQ-Formel Problem kann ich dir helfen.
Wie die P-Q-Formel aussieht mussich dir bestimmt nicht erklären....
Schaffst du es denn die Werte für P und Q einzulesen?
Die P-Q-Formel in Delphi:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| Procedure TForm1.PQFormelBerechnenClick(Sender: TObject); var x1,x2,Term1,Term2:Real; Loesungen:Integer; begin Term1:= -p/2; Term2:= ((P*P)/4)-q; If (Term2<0) then Loesungen:=0 else if (Term2=0) then Loesungen:=1 else Loesungen:=2; If Loesungen=2 then begin x1:=Term1+sqrt(Term2); x2:=Term1-sqrt(Term2); end; end; |
Also ich denke so irgendwie würde ich es lösen...
//Edit: Quelltext erweitert...danke mister_x^^
mister_x - Do 23.11.06 13:44
DaKirsche hat folgendes geschrieben: |
Moin...
Also du willst bis morgen Delphi lernen?????aha....^^
Naja...zumindest bei deinem PQ-Formel Problem kann ich dir helfen.
Wie die P-Q-Formel aussieht mussich dir bestimmt nicht erklären....
Schaffst du es denn die Werte für P und Q einzulesen?
Die P-Q-Formel in Delphi:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| Procedure TForm1.PQFormelBerechnenClick(Sender: TObject); var x1,x2,Term1,Term2:Real; Loesungen:=0; begin Term1:= -p/2; Term2:= ((P*P)/4)-q; If (Term2<0) then Loesungen:=0 else Loesungen:=2; If Loesungen=2 then begin x1:=Term1+sqrt(Term2); x2:=Term1-sqrt(Term2); end; end; |
Also ich denke so irgendwie würde ich es lösen... |
na wenn unter der wurzel 0 steht gibt es nur eine lösung :lol:
jule1988 - Do 23.11.06 15:36
Danke leute!!!!
Ohne euch wär ich aufgechmissen
F34r0fTh3D4rk - Do 23.11.06 15:39
es gibt in einer quadratischen gleichung doch immer nur zwei nullstellen ? wieso willst du die anzahl der lösung bestimmen, es gibt entweder keine nullstelle (negative zahl unter der wurzel), es gibt eine (sonderfall von 2), oder zwei.
mfg
jule1988 - Do 23.11.06 15:49
sorry, wenn ich mich zu dumm stellen, aber
"//Und hier halt dann die Ausgabe von den Lösungen und Ergebnissen
end;"
was genau muss ich da machen...
(bitte haltet mich nich für bescheuert)
Xion - Do 23.11.06 15:56
am einfachsten mit ShowMessage("Die Werte");
DaKirsche - Do 23.11.06 16:22
da kommt dann z.B. folgendes hin:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Edit1.Text:=FloatToStr(x1); Edit2.Text:=FloatToStr(x2); Edit3.Text:=IntToStr(Loesungen);
Showmessage('Anzahl der Lösungen: ' + IntToStr(Loesungen) + ' X1: ' + FloatToStr(X1) + ' X2: ' + FloatToStr(X2));
|
Dragonclaw - Do 23.11.06 16:24
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| If (Term2<0) then Loesungen:=0 else Loesungen:=2; If Loesungen=2 then begin x1:=Term1+sqrt(Term2); x2:=Term1-sqrt(Term2); end; end; |
würde ich in
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| if (Term2 < 0 ) then Loesungen := 0; if (Term2 = 0 ) then Loesungen := 1; if (Term2 > 0 ) then Loesungen := 2;
if Lösung = 1 then begin x1 := Term1; x2 := Term1; end;
if Lösung = 0 then begin x1 := ''; x2 := ''; end;
If Loesungen = 2 then begin x1:=Term1+sqrt(Term2); x2:=Term1-sqrt(Term2); end; |
DaKirsche - Do 23.11.06 16:33
Warum willst du denn dem Programm mehr arbeit aufdrücken, als nötig?
Du lässt ihn ja jede Schleife durchlaufen, selbst wenn dies nicht mehr nötig wäre....
Bei dir werden jetzt ja immer alle 6 IF-Schleifen druchlaufen....selbst wenn z.B. er nach der 1. Schleife eigentlich schon abbrechen könnte....;)
Dragonclaw - Do 23.11.06 16:44
Naja, ich wollte halt der er versteht was da passiert
Geht natürlich kürzer
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var p,q :real; x1,x2: string; begin if (((P*P)/4)-q < 0 ) then ShowMessage('Das Problem hat keine reale Lösung!'); else ShowMessage('X1:' + floattostr(-p/2+sqrt(((P*P)/4)-q)) + 'X2:' +floattostr(-p/2-sqrt(((P*P)/4)-q))); end; |
F34r0fTh3D4rk - Do 23.11.06 16:56
wobei die variablen x1 und x2 überflüssig sind ;) wenn es ein ergebnis gibt sind eben x1 und x2 identisch, falls du das noch extra handlen willst, musst du das eben noch einmal gesonders abfragen ;)
mfg
mister_x - Do 23.11.06 16:59
F34r0fTh3D4rk hat folgendes geschrieben: |
es gibt in einer quadratischen gleichung doch immer nur zwei nullstellen ? wieso willst du die anzahl der lösung bestimmen, es gibt entweder keine nullstelle (negative zahl unter der wurzel), es gibt eine (sonderfall von 2), oder zwei.
mfg |
warum nich..........
F34r0fTh3D4rk - Do 23.11.06 17:02
weils im grunde immer 2 gibt oder keine, bei polynomen n-ten grades wäre das wieder was anderes.
DaKirsche - Do 23.11.06 17:07
Das will er, da es bestimmt Bestandteil der Aufgabe ist.
Außerdem mag es das Programm nicht, wenn du ihn einfach rechnen lässt....dann die Wurzel aus einer Negativen und schon haste ne Fehlermeldung
Also musst du irgendwo abfragen, ob der Inhalt der Wurzel negativ ist --> Schon prüfst du die Anzahl der Lösungen^^
Dragonclaw - Do 23.11.06 17:08
F34r0fTh3D4rk hat folgendes geschrieben: |
weils im grunde immer 2 gibt oder keine, bei polynomen n-ten grades wäre das wieder was anderes. |
Das ist falsch. Es gibt auch Fälle wo eine Parabel nur eine Nullstelle hat, nämlich wenn der Sattelpunkt, genau auf der X-Achse liegt z. B. Hat f(x) = x^2 nur genau eine Nullstelle, nämlich 0. Das selbe gilt für f(x) = (x+1)^2, da ist die nullstelle bei -1.
F34r0fTh3D4rk - Do 23.11.06 17:11
was ist, wenn ich dir sage, dass das zwei nullstellen sind, die nur die gleiche koordinate haben ? kannst du mir das gegenteil beweisen ?
DaKirsche - Do 23.11.06 17:23
Da hat Fear recht...eine Quadratische Gleichung hat keine oder 2 Lösungen, wenn beide Lösungen den selben Wert hat, so hat die Gleichung trotzdem 2 Lösungen desselben wertes.
mister_x - Do 23.11.06 17:37
Dragonclaw hat folgendes geschrieben: |
F34r0fTh3D4rk hat folgendes geschrieben: | weils im grunde immer 2 gibt oder keine, bei polynomen n-ten grades wäre das wieder was anderes. |
Das ist falsch. Es gibt auch Fälle wo eine Parabel nur eine Nullstelle hat, nämlich wenn der Sattelpunkt, genau auf der X-Achse liegt z. B. Hat f(x) = x^2 nur genau eine Nullstelle, nämlich 0. Das selbe gilt für f(x) = (x+1)^2, da ist die nullstelle bei -1. |
:lol:
es gibt keinen sattel punkt bei ner parabel.......sattelpunkte gibts nur bei X^n n muss ungrad sein
da gibts nurn scheitel........
F34r0fTh3D4rk - Do 23.11.06 17:40
er meint den extrempunkt ;) das ist auch der einzige fall bei dem x1 = x2 :P die pq formel liefter da sogar zwei werte und zwar zwei gleiche ;)
mfg
Martok - Do 23.11.06 17:41
Da hat Fear nicht recht (Sorry, muss sein ;) )
Nullstellen sind definiert als x mit f(x)=0
Damit ist wenn es genau eine Nullstelle gibt (im Scheitelpunkt) eben nur eine Nst da. Sonst müsstest du sagen, x1=x2 und gleichzeitig x1!=x2. Beweis mir das mal ;)
Denn sonst könnte ich genausogut behaupten, sie hätte dann 10000 Nullstellen, die zufälligerweise alle gleich sind.
Natürlich kommen aus der P-Q-Formel 2 Werte raus, aber auch nur, wenn man sich die Diskriminante vorher nicht anguckt.
Aber mein ihr nicht, für eine Info-Arbeit geht das zu weit? Bei einer Mathe-Aufgabe würde ich sowas ja noch verstehen, aber hier....
F34r0fTh3D4rk - Do 23.11.06 17:47
man hätte es ja mal versuchen können, nach dem schema, ich suche mir ne seite und versuche so lange argumente dafür zu finden, bis mir alle glauben ;)
mister_x - Do 23.11.06 18:14
un wie siehts bei ner X^3 Funktion aus......
ich hab mir da en paar gedanken gemacht komm aber irgendwie nich weiter...
also man hat ja dann so eine gleichung
a*X^3+b*X^2+c*X+d=0
=>X^3+b/a*X^2+c/a*X+d/a=0
un
(X-N1)(X-N2)(X-N3)=0//N1,N2,N3 sind die nullstellen.......
=>X^3+b/a*X^2+c/a*X+d/a=(X-N1)(X-N2)(X-N3)
=X^3+b/a*X^2+c/a*X+d/a=X^3+X^2*(-N1-N2-N3)+X*(N1N2+N1N3+N2N3)+(-N1N2N3)
=>
-(N1+N2+N3)=b/a
N1N2+N1N3+N2N3=c/a
-N1N2N3=d/a
un jetzt hat ma ja eigentlich drei gleichungen un 3 variablen
da muss es doch ne Lösung geben.........
habt ihr ne idee......
Dragonclaw - Do 23.11.06 18:29
Also, solange d=0 ist ist das einfach
ax^3+bx^2+cx //x ausklammern
x(ax^2+bx+c) //so eine Nullstelle ist bei x=0, bleiben noch (max.) 2
ax^2+bx+c // dann durch a teilen
x^2+(b/a)x+(c/a)
Dann kannste das einfach wieder in das Programm einfügen und fertig.
Ich überleg mir gerade ne Methode mit d <> 0.
Saubäär - Do 23.11.06 18:31
Wie wärs mit dem Gaußsches Eliminationsverfahren ?
Gruß
Bäär
mister_x - Do 23.11.06 18:35
Dragonclaw hat folgendes geschrieben: |
Also, solange d=0 ist ist das einfach
ax^3+bx^2+cx //x ausklammern
x(ax^2+bx+c) //so eine Nullstelle ist bei x=0, bleiben noch (max.) 2
ax^2+bx+c // dann durch a teilen
x^2+(b/a)x+(c/a)
Dann kannste das einfach wieder in das Programm einfügen und fertig.
Ich überleg mir gerade ne Methode mit d <> 0. |
8)
des hab ich auch noch hingekriegt......
aber wenns d nich 0 is dann wirds eben en bissle schwieriger................ :)
mister_x - Do 23.11.06 18:35
Saubäär hat folgendes geschrieben: |
Wie wärs mit dem Gaußsches Eliminationsverfahren ?
Gruß
Bäär |
wasn das???
mister_x - Do 23.11.06 18:41
is ja cool der anfang is ja genau des was ich gemacht hab....... :D
aber was is des fürn Lösungansatz den versteh ich nich.....
wulfskin - Do 23.11.06 18:46
Saubäär hat folgendes geschrieben: |
Wie wärs mit dem Gaußsches Eliminationsverfahren ?
Gruß
Bäär |
Einfach mal irgend ein Begriff in den Raum werfen, der nur indirekt mit dem Thema zu tun hat. :evil: Damit kann man lineare Gleichungssysteme (also mehrere Gleichungen) lösen und nicht eine Gleichung dritten Grades.
Aber ich glaube für die Frage sind die Antworten bis hierher völlig ausreichend!
mister_x - Do 23.11.06 18:58
aber für meine frage nicht.........
wulfskin - Do 23.11.06 19:51
mister_x hat folgendes geschrieben: |
aber für meine frage nicht......... |
Einfach mal lesen (und verstehen !!!) was FearOfTheDark drei Beiträge weiter oben schreibt...
mister_x - Do 23.11.06 20:14
wulfskin hat folgendes geschrieben: |
mister_x hat folgendes geschrieben: | aber für meine frage nicht......... | Einfach mal lesen (und verstehen !!!) was FearOfTheDark drei Beiträge weiter oben schreibt... |
=)
na dann erklär mir ma was auf de.wikipedia.org/wiki/Kubische_Gleichung steht...............
Dragonclaw - Do 23.11.06 20:35
Lösen der kubischen Gleichung 9x³ + 3x² + 9x + 5 = 0
————————————————————————————————————————————————————————
Die kubische Gleichung wird zunächst durch Division mit 9 auf die Normalform
x³ + rx² + sx + t = 0 gebracht.
x³ + 0,3333333333333333x² + x + 0,5555555555555556 = 0
Durch die Substitution x = y - r/3 wird die Gleichung in eine reduzierte Form
y³ + py + q = 0 gebracht, in der kein quadratisches Glied mehr auftritt.
(y - 0,1111111111111111)³ + 0,3333333333333333(y - 0,1111111111111111)² + (y - 0,1111111111111111) + 0,5555555555555556 = 0
Die neuen Koeffizienten können bequemer auch direkt berechnet werden:
p = s - r²/3 = 0,962962962962963
q = 2r³/27 - rs/3 + t = 0,44718792866941015
y³ + 0,962962962962963y + 0,44718792866941015 = 0
Aus der Gleichung liest man also ab:
p = 0,962962962962963 q = 0,44718792866941015
Nun muß der Wert R = (q/2)²+(p/3)³ betrachtet werden.
Ist R > 0, so hat die kubische Gleichung eine reelle und zwei komplexe Lösungen,
ist R = 0, hat sie drei reelle Lösungen, von denen zwei zusammenfallen,
und im Falle R < 0 drei verschiedene reelle Lösungen.
Für die ersten beiden Fälle verwendet man die Lösungsformel von Cardano/Tartaglia,
im dritten Fall, dem sogenannten "casus irreducibilis", löst man mithilfe
trigonometrischer Funktionen.
Im Falle dieser Gleichung ist R = 0,08306660570035057.
Da R nicht negativ ist, kann die Gleichung mit der Cardanischen Formel gelöst werden:
T = sqr((q/2)²+(p/3)³) = sqr(R) = 0,28821277851675936
u = kubikwurzel(-q/2 + T) = 0,40128506332213787
v = kubikwurzel(-q/2 - T) = -0,7998993325682543
y = u + v = -0,3986142692461164
1
y = -(u + v)/2 - ((u - v)/2)*sqr(3)·î = 0,1993071346230582 - 1,0402562014705437·î
2
y = -(u + v)/2 + ((u - v)/2)*sqr(3)·î = 0,1993071346230582 + 1,0402562014705437·î
3
Die Substitution x = y - r/3 wird durch Subtraktion von r/3 rückgängig gemacht.
r=0,3333333333333333 ist der quadratische Koeffizient der kubischen Gleichung.
Damit ergeben sich, der Größe nach geordnet, diese Lösungen:
x = -0,5097253803572276
1
x = 0,08819602351194719 - 1,0402562014705439·î
2
x = 0,08819602351194719 + 1,0402562014705439·î
3
x2 und x3 sind NICHT Real..., daher hat die Funktion nur EINE Nullstelle
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!