![]() |
Quadratische und Lineare Funktion
Hallo! :-D
Wie kann man die Schnittpunkte einer quadratischen bzw. linearen Funktion (also maximal x²) berechnen? Für die Quadratische nehme ich die Formel: x = (b+/- sqrt((b*b)-(4*a*c)))/(2*a) Für die Lineare nimmt man die Formel: x = -n/m Nun weiß ich nicht wie ich das umsetzen kann?! Darin darf ja einmal der Radikant (also der Wert unter der Wurzel) nicht kleiner Null werden und bei der Division darf der Nenner ja auch nicht Null werden! Könnte mir da bitte jemand helfen und die Berechnung aufschreiben? Außerdem bräuchte ich noch Hilfe zu der Ausagbe einer allgemeinen Funktion. Wenn ich die Werte (a2,a1,a0) in Edit(1-3) eingegeben habe, möchte ich diese gern in einem eigenen Edit4 Feld wieder zusammengefasst ausgeben in der Form x=a2x²+a1x+a0 Ich wäre euch sehr dankbar, wenn Ihr mir helfen könntet! Erste Anfänge von mir waren so (funktioniert leider nicht):
Delphi-Quellcode:
a2:=strtofloat(edit1.text); // Eingabe
a1:=strtofloat(edit2.text); // Eingabe a0:=strtofloat(edit3.Text); // Eingabe rad:=sqrt((a2*a2)-(4*a1*a0)); // Formel x1:=(a1-rad)/(-2*a2); // Formel x2:=(a1+rad)/(-2*a2); // Formel // Ausgabe edit4.text:=floattostr(a2)+'x²'+floattostr(a1)+'x'+floattostr(a0); // Nullstellen if rad>=0 then begin edit6.text:=floattostrF(x1,ffFixed,100,2); edit11.text:=floattostrF(x2,ffFixed,100,2); end else showmessage ('Radikant < 0, somit keine Nullstellen'); |
Re: Quadratische und lineare Funktion
Moin!
Du hast dich jetzt komisch ausgedrückt. Willst du die Nullstelle einer quadratischen und einer lineraren Funktion? (das wäre ja das was du gefragt hast) Dann musst du die lineare von der quadratischen subtrahieren und dann mit der quadratischen Lösungsformel die 0-Stellen dieser Hilfsgleichung berechnen. Oder willst du die Nullstellen von quadratischen bzw lineraren Funktionen? (das hast du zwar nicht gesagt warscheinlich aber gemeint) Es gibt mehrere Möglichkeiten. Du kannst die Formel eingeben lassen und dann parsen. Du kannst aber auch 3 Edits nehmen (so wie du's jetzt hast) und dann z.B. folgenden Quellcode:
Delphi-Quellcode:
Bei der linearen Gleichung einfach:
var
rad, a, b, c, x1, x2: Real; a := StrtoFloat(Edit1.Text); // ax^2 + bx + c b := StrToFloat(Edit2.Text); c := StrToFloat(Edit3.Text); rad := sqr(b/(2*a))-(c/a); // Radikant if rad >= 0 then begin x1:=-(b/a)/2 + sqrt(rad); // 1. NS x2:=-(b/a)/2 - sqrt(rad); // 2. NS Edit6.Text := FloatToStrF(x1,ffFixed,100,2); Edit11.Text := FloatToStrF(x2,ffFixed,100,2); end else ShowMessage('Radikant < 0, somit keine Nullstellen');
Delphi-Quellcode:
MfG Niels :thuimb:
var
m, n: Real; m := StrtoFloat(Edit1.Text); // mx + n n := StrToFloat(Edit2.Text); if m <> 0 then Edit6.Text := FloatToStrF(-n/m,ffFixed,100,2) else ShowMessage('Gleichung parallel zur X-Achse, somit keine Nullstellen'); [edit 1+2+3]wer schreiben kann ist klar im Vorteil[/edit] [edit 4]irgendwie war der tag heut doch zu viel[/edit] |
Re: Quadratische und Lineare Funktion
vielen Dank erstmal! Hast mir bis jetzt schon sehr geholfen! :thuimb:
Hätte da aber noch paar Fragen. Kannst du mir auch mit dem Problem bezüglich der 0 unter dem Bruchstrich helfen! Denn wenn aus deiner Source der Wert von "a" = 0 ist, dann stürzt das Programm ab! Wie kann man diesen Fehler berücksichtigen? Und hättest du auch eine Lösung für das Problem mit der allgemeinen Darstellung der Funktion? Wenn ich die Werte für a,b,c mit Edit 1,2,3 eingelesen habe, dann möchte ich diese gern zusammengefasst in der Form x=ax²+bx+c in einem eigenen Edit-Feld wieder ausgeben! Ich habe dafür aber absolut keine Idee mehr, weil meine anderen Versuche schon fehlgeschlagen sind! |
Re: Quadratische und Lineare Funktion
Zitat:
Delphi-Quellcode:
Wenn du das die Funktion so angeben willst, machs lieber mit einem Label. Etwa so:
f(x)=ax²+bx+c ??
Delphi-Quellcode:
labelergebniss.caption:='f(x)='+(edita.text)+'x²'+(editb.text)+'x'+(edit3.text)..
Toxman Edit: Blödsinn verbessert |
Re: Quadratische und Lineare Funktion
Moin!
Jo mit der 0 das hatte ich vergessen....aber dann isses ja keine quadratische Gleichung mehr...aber der Vollständigkeit halber:
Delphi-Quellcode:
So und jetzt zu deinem anderen Problem:
var
rad, a, b, c, x1, x2: Real; a := StrtoFloat(Edit1.Text); // ax^2 + bx + c b := StrToFloat(Edit2.Text); c := StrToFloat(Edit3.Text); if a <> 0 then begin rad := sqr(b/(2*a))-(c/a); // Radikant if rad >= 0 then begin x1:=-(b/a)/2 + sqrt(rad); // 1. NS x2:=-(b/a)/2 - sqrt(rad); // 2. NS Edit6.Text := FloatToStrF(x1,ffFixed,100,2); Edit11.Text := FloatToStrF(x2,ffFixed,100,2); end else ShowMessage('Radikant < 0, somit keine Nullstellen'); end else begin if b <> 0 then Edit6.Text := FloatToStrF(-c/b,ffFixed,100,2) else ShowMessage('Gleichung parallel zur X-Achse, somit keine Nullstellen'); end;
Delphi-Quellcode:
MfG Niels
Edit1.Text := 'f(x) = ' + FloatToStrF(a,ffFixed,100,2) + 'x^2 + ' + FloatToStrF(a,ffFixed,100,2) + 'x + ' + FloatToStrF(c,ffFixed,100,2);
|
Re: Quadratische und Lineare Funktion
Danke @ Toxman und @Niels!
Aber eins habt Ihr bei eurer Ausgabe nicht beachtet! Was ist, wenn ein negativer Wert eingegeben wird? Dann steht, nach eurer Ausgabeart, ja immernoch ein '+' vor dem dann erscheinenden '-'! Kann man das unterbinden und das '+' entfernen, wenn ein negativer Wert eingegeben wird? |
Re: Quadratische und Lineare Funktion
Moin!
Es gibt mehrere Möglichkeiten. Du kannst dir ne Funktion schreiben für die Ausgabe...das könnte so aussehen:
Delphi-Quellcode:
Ist nicht getestet, müsste aber funzen. Ansonsten haste hier jetzt wenigstens nen Ansatz und weißt wie's geht. Das ist jetzt nicht negativ gemeint, aber du könntest dir echt mal selbst Gedanken über deine Probleme machen und dann sagen wo's hängt. :warn:
function zahlAusgabe(zahl: Real): string;
begin if zahl = abs(zahl) then result := '+ ' + FloatToStrF(abs(zahl),ffFixed,100,2) else result := '- ' + FloatToStrF(abs(zahl),ffFixed,100,2); end; ... //irgendwo dann später im Code Edit1.Text := 'f(x) = ' + FloatToStrF(a,ffFixed,100,2) + 'x^2 ' + zahlAusgabe(b) + 'x ' + zahlAusgabe(c); MfG Niels |
Re: Quadratische und Lineare Funktion
Hallo...
zu der Quadratischen Funktion habe ich eine Frage:
Delphi-Quellcode:
Und zwar sobald ich die Werte eingebe und diese Prozedur aufrufe, sagt er: "Ungültiger Gleitkommaopperand" .
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Ea: TEdit; Eb: TEdit; Ec: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; a,b,c,x1,x2: Real ; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin a:= StrToFloat(Ea.Text) ; b:= StrToFloat(Eb.Text) ; c:= StrToFloat(Ec.Text) ; x1:= ( (-b) + (sqrt( (b*b) - (4 * a * c))) ) / (2 * c) ; x2:= ( (-b) - (sqrt( (b*b) - (4 * a * c))) ) / (2 * c) ; ShowMessage('FloatToStr(x1) ; FloatToStr(x2)') ; end; end. Ich weis nicht Recht wo der Fehler liegen kann... :cry: mfg Cya |
Re: Quadratische und Lineare Funktion
Du gehtst einfach davon aus, dass der Radikant größer als Null ist. Falls die Parabel komplett über/unter der X-achse liegt, kommt der Fehler, weil der Radikant dann negativ ist und du aus negativen Zahlen keine Wurzel ziehen kannst.
es gibt ja auch die Möglichkeit, dass eine oder keine Nullstelle gibt. (Mathemathik, 9. Klasse) |
Re: Quadratische und Lineare Funktion
Ist es nicht notwendig Math einzubinden?
(Ab welchen Rechnungen muss die denn rein?, dachte immer wenns bei sqrt losgeht gehört die dazu :/) edit: Was die Vorredner schon gesagt haben: Es wäre Vorteilhaft eine Division durch null oder ähnliches abzufangen. Ist auch nicht allzuschwer. Beispiele müsste es genug per Forumsuche geben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz