AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Quadratische und Lineare Funktion

Ein Thema von Fr34k · begonnen am 4. Jan 2004 · letzter Beitrag vom 31. Okt 2005
Antwort Antwort
Seite 1 von 2  1 2      
Fr34k

Registriert seit: 4. Jan 2004
11 Beiträge
 
#1

Quadratische und Lineare Funktion

  Alt 4. Jan 2004, 18:25
Hallo!
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)+''+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');
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#2

Re: Quadratische und lineare Funktion

  Alt 4. Jan 2004, 19:31
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

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

Registriert seit: 4. Jan 2004
11 Beiträge
 
#3

Re: Quadratische und Lineare Funktion

  Alt 4. Jan 2004, 19:59
vielen Dank erstmal! Hast mir bis jetzt schon sehr geholfen!
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!
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Quadratische und Lineare Funktion

  Alt 4. Jan 2004, 20:09
Zitat:
x=ax²+bx+c
meinst du f(x)=ax²+bx+c ?? Wenn du das die Funktion so angeben willst, machs lieber mit einem Label. Etwa so:
 labelergebniss.caption:='f(x)='+(edita.text)+''+(editb.text)+'x'+(edit3.text)..
Toxman

Edit: Blödsinn verbessert
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#5

Re: Quadratische und Lineare Funktion

  Alt 4. Jan 2004, 20:18
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:

Edit1.Text := 'f(x) = ' + FloatToStrF(a,ffFixed,100,2) + 'x^2 + ' + FloatToStrF(a,ffFixed,100,2) + 'x + ' + FloatToStrF(c,ffFixed,100,2); MfG Niels
  Mit Zitat antworten Zitat
Fr34k

Registriert seit: 4. Jan 2004
11 Beiträge
 
#6

Re: Quadratische und Lineare Funktion

  Alt 5. Jan 2004, 17:28
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?
  Mit Zitat antworten Zitat
Niels

Registriert seit: 25. Okt 2003
192 Beiträge
 
#7

Re: Quadratische und Lineare Funktion

  Alt 5. Jan 2004, 18:08
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.

MfG Niels
  Mit Zitat antworten Zitat
-lx-
(Gast)

n/a Beiträge
 
#8

Re: Quadratische und Lineare Funktion

  Alt 31. Okt 2005, 19:13
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...


mfg
Cya
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Quadratische und Lineare Funktion

  Alt 31. Okt 2005, 19:20
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)
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von zecke
zecke

Registriert seit: 17. Jan 2004
494 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Quadratische und Lineare Funktion

  Alt 31. Okt 2005, 19:23
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.
mfg zecke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
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