Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Quadratische und Lineare Funktion (https://www.delphipraxis.net/14200-quadratische-und-lineare-funktion.html)

Fr34k 4. Jan 2004 17:25


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');

Niels 4. Jan 2004 18:31

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:
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');
Bei der linearen Gleichung einfach:

Delphi-Quellcode:
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');
MfG Niels :thuimb:

[edit 1+2+3]wer schreiben kann ist klar im Vorteil[/edit]
[edit 4]irgendwie war der tag heut doch zu viel[/edit]

Fr34k 4. Jan 2004 18:59

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!

Nikolas 4. Jan 2004 19:09

Re: Quadratische und Lineare Funktion
 
Zitat:

x=ax²+bx+c
meinst du
Delphi-Quellcode:
f(x)=ax²+bx+c ??
Wenn du das die Funktion so angeben willst, machs lieber mit einem Label. Etwa so:
Delphi-Quellcode:
 labelergebniss.caption:='f(x)='+(edita.text)+'x²'+(editb.text)+'x'+(edit3.text)..

Toxman

Edit: Blödsinn verbessert

Niels 4. Jan 2004 19:18

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:
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;
So und jetzt zu deinem anderen Problem:

Delphi-Quellcode:
Edit1.Text := 'f(x) = ' + FloatToStrF(a,ffFixed,100,2) + 'x^2 + ' + FloatToStrF(a,ffFixed,100,2) + 'x + ' + FloatToStrF(c,ffFixed,100,2);
MfG Niels

Fr34k 5. Jan 2004 16:28

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?

Niels 5. Jan 2004 17:08

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:
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);
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:

MfG Niels

-lx- 31. Okt 2005 18:13

Re: Quadratische und Lineare Funktion
 
Hallo...


zu der Quadratischen Funktion habe ich eine Frage:

Delphi-Quellcode:
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.
Und zwar sobald ich die Werte eingebe und diese Prozedur aufrufe, sagt er: "Ungültiger Gleitkommaopperand" .

Ich weis nicht Recht wo der Fehler liegen kann... :cry:


mfg
Cya

ichbins 31. Okt 2005 18:20

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)

zecke 31. Okt 2005 18:23

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 16:43 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz