Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schnittpunkt Quadartische Gleichung und lineare Funktion (https://www.delphipraxis.net/130655-schnittpunkt-quadartische-gleichung-und-lineare-funktion.html)

Benni28 11. Mär 2009 19:46


Schnittpunkt Quadartische Gleichung und lineare Funktion
 
Hallo,

ich will ein Programm mit Delphi programmieren, welches den bzw. die Schnittpunkte einer Quadratischen Gleichung und einer linearen Funktion bestimmt. Die Quadratische Gleichung will ich in der Form: y=ax²+bx+c angeben und die lineare Funktion in der Form: y=mx+n. Die Parameter m,n,a,b, und c will ich einlesen lassen. Die Graphen sollen in ein Koordinatensystem gezeichnet werden und der bzw. die Schnittpunkte hervor gehoben werden. Die Spezialfälle, also keine Schnittpunkte oder nur ein Schnittpunkt (wäre dann die Tangente an der Quadratischen Funktion), muss ich auch berücksichtigen. Leider hab ich noch ein paar Probleme mit Delphi und bräuchte deswegen ein wenig Hilfe. Vielleicht hat ja jemand schon mal so ein ähnliches Programm geschrieben. Über Hilfe wäre ich sehr dankbar.

Beste Grüße und im voraus vielen Dank...

mr_emre_d 11. Mär 2009 20:44

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
Weißt du wie das klingt ??

"Ich kenne mich mit Delphi nicht aus" (ist noch ok)
"Und trotzdem möchte ich keine Selbstinitiative zeigen" (sick)
"Deshalb bitte ich euch, mir fertige Codestücke zu liefern,
damit ich ne gute Note bekomme" (-> sicher nicht)

So wird (/ kann) dir keiner helfen.

Falls du Probleme an bestimmten Stellen hast, dann frag ruhig.

MfG

quendolineDD 11. Mär 2009 20:52

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
Herzlich willkommen in der DP.

Wenn du konktrete Fragen hast, sind wir dir gerne bereit zu helfen. Jedoch für Leute, die lediglich nur fertigen Code verlangen, haben wir kein Verständnis. Der Schlüssel liegt in der Eigeninitiative, Ansätze zu finden und auch so einen Lerneffekt zu erzielen.

Da dein Eingangspost mangels obigen und #2 genannten Sachen meinen Doktrinen verstößt, empfängst du auch von mir keine Lösung.
Falls du im Entstehungsprozess ernsthafte Fragen hast, dann stelle diese bitte und wir sind gern bereit, Hilfestellung zu leisten. Ebenso enthält das Forum mitsamt seinen gespeicherten Threads und der Code Library ein gewaltiges Kompensium an Informationen, welche du nutzen kannst. Und ich bin mir sicher, Teilprobleme aus deinem Gesamtproblem sind hier zu 100% behandelt und schon gelöst.

Mit freundlichen Grüßen

Edit:

Jedoch will ich dir ein paar Ansätze für deinen Denkprozess liefern. Bedenke, was du realisieren willst. Somit musst du eine Eingabeschnittstelle schaffen, wo die quadratische und die lineare Gleichung eingetragen werden. Diese müssen dann geparst werden. Die daraus extrahierten Gleichungen können nun in einem beliebigen Bereich gezeichnet werden (zB auf ein TPaintBox). Die Berechung der Schnittstelle basiert auf mathematischen Prinzipien, die leicht umzusetzen sind.

jfheins 11. Mär 2009 22:36

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
Also bei der Mathematik kann ich dir ein wenig weiterhelfen:

Parabel war ja Y = ax² + bx + c und die Gerade war Y = mx + n

Wenn sie sich schneiden (oder berühren) sind X und Y Werte gleich.

Gleichsetzen liefert:

ax² + bx + c = mx + b

umformen liefert

ax² + (b - m) * x + (c - b) = 0

Was das Problem aus die Suche der Nullstellen einer quadratischen Gleichung reduziert. Die X-Werte einfach mit einer geigneten Lösungsformel ausrechnen und fertig ;)

R2009 12. Mär 2009 05:15

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
Hi,

auf das Formular zeichnen mit canvas.moveto(x0,y0) und canvas.lineto(x1,y1).
Wenn du das ganz komfortabel machen willst schreib dir eine Prozedur.

Delphi-Quellcode:
procedure linie(can:tobject;x1,y1,x2,y2:integer);
   Begin
     (can as tcanvas).moveto(x1,y1);
     (can as tcanvas).lineto(x2,y2);
   end;
Aufruf mit:
linie(canvas,100,100,200,200);

So jetzt haben wir dir, glaube ich genug geholfen. Den Rest machst du selber!

Viel Spass!

R2009 12. Mär 2009 05:18

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
Hi,

bei der Prozedur linie repräsentiert der erste Parameter die Zeichenläche auf die du zeichnen willst.
Die nächsten beiden Zahlen sind die Startkoordinaten und die letzten beiden die Endkoordinaten der Linie.

Viel Spass

R2009 12. Mär 2009 05:45

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
Hi,

hier auch noch die entsprechende Routine für den Kreis.

Delphi-Quellcode:
procedure Kreis(can:tobject;x1,y1,r1:integer);
   Begin
     (can as tcanvas).Ellipse(x1-r1,y1-r1,x1+r1,y1+r1);
   end;
x1,y1 --> Mittelpunkt de Kreises.
r1 --> Radius.

So das wars jetzt auf dem Silbertablett.
Es wäre nett wenn du das Ergebnis deiner Arbeit hier publizieren könntest!
Bemerkung:
Ich hab dir nur geholfen um dir einen Anschubser zu geben.
Vielleicht bekommst du jetzt etwas Lust einiges selbst zu probieren.
Ansonsten gibts hier jede Menge Tutorials.

Viel Spass!

Benni28 12. Mär 2009 14:25

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
es ist nicht so, dass ich überhaupt nichts machen will und nur einen quelltext geliefert haben möchte, hab mich da bestimmt unklar ausgedrückt...
also ich hab jetzt schon mal mit der image-komponente ein koordinatensystem gezeichnet...vielleicht kann mir jemand bei der zeichnung der graphen und bei den schnittstellen helfen...wie ich die schnittstellen dann farblich hervor hebe in dem koordinatensystem, weiß ich leider gar nicht...ich füg mal meine bisherige arbeit an
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    bild: TImage;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Bearbeiten1: TMenuItem;
    Hilfe1: TMenuItem;
    Sc1: TMenuItem;
    Schnittpunkteberechnen1: TMenuItem;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Lschen1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure Schnittpunkteberechnen1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  function f(x:real):real;
  function g(z:real):real;

var
  Form1: TForm1;
  a,b,c,m,n,x,y:real;
  xb,yb,xm,ym,k,ymax,xmax:word;

implementation

{$R *.dfm}

function f(x:real):real;
begin
f:=a*x*x+b*x+c*x
end;

function g(z:real):real;
begin
g:=m*z+n
end;

procedure loeschen;
begin
with form1.bild.canvas do
begin
brush.color:=clwhite;
pen.color:=clwhite;
rectangle(0,0,form1.bild.width,form1.bild.height);
end;
end;

procedure koordinatensystem;
var i :integer;
begin
k:=30;
xm:=form1.bild.width div 2;
ym:=form1.bild.height div 2;
xmax:=form1.bild.width;
ymax:=form1.bild.height;
with form1.bild.canvas do
begin
moveto (8,ym); lineto (xmax-8,ym);
moveto (xm,8); lineto (xm,ymax-8);
font.name:='Arial';
font.size:=8;
xb:=xm-8*k;
for i:=-8 to 8 do
begin
moveto (xb,ym); lineto (xb,ym+3);
textout (xb-3,ym+8,inttostr(i));
xb:=xb+k;
end;
yb:=ym+8*k;
for i:=-8 to 8 do
begin
moveto (xm,yb);lineto (xm+3,yb);
if i<>0 then textout (xm+8,yb-8,inttostr(i));
yb:=yb-k;
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
koordinatensystem;
x:=-10;
repeat
y:=f(x);
xb:=round(xm+x*k);
yb:=round(ym-y*k);
bild.canvas.pixels[xb,yb]:=clblack;
x:=x+0.001;
until x>10
end;

procedure TForm1.Schnittpunkteberechnen1Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
c:=strtofloat(edit3.text);
m:=strtofloat(edit4.text);
n:=strtofloat(edit5.text);
end;

end.

Benni28 13. Mär 2009 13:49

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
hallo alle zusammen, also die quadratische funktion wird jetzt schon gezeichnet...aber die lineare funktion nicht, muss irgendwo ein fehler drin sein, vielleicht könnte jemand mal drüber schaun und mir sagen, was ich falsch mache...im voraus schonmal danke
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    bild: TImage;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Bearbeiten1: TMenuItem;
    Hilfe1: TMenuItem;
    Sc1: TMenuItem;
    Schnittpunkteberechnen1: TMenuItem;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Lschen1: TMenuItem;
    Edit4: TEdit;
    Edit5: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    procedure Lschen1Click(Sender: TObject);
    procedure Schnittpunkteberechnen1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  function f(x:real):real;
  function g(x:real):real;

var
  Form1: TForm1;
  a,b,c,n,m,x,y:real;
  xb,yb,xm,ym,k,ymax,xmax:word;

implementation

{$R *.dfm}

function f(x:real):real;
begin
f:=a*x*x+b*x+c*x
end;

function g(x:real):real;
begin
g:=m*x+n;
end;

procedure loeschen;
begin
with form1.bild.canvas do
begin
brush.color:=clwhite;
pen.color:=clwhite;
rectangle(0,0,form1.bild.width,form1.bild.height);
end;
end;

procedure koordinatensystem;
var i :integer;
begin
k:=30;
xm:=form1.bild.width div 2;
ym:=form1.bild.height div 2;
xmax:=form1.bild.width;
ymax:=form1.bild.height;
with form1.bild.canvas do
begin
moveto (10,ym); lineto (xmax-10,ym);
moveto (xm,10); lineto (xm,ymax-10);
font.name:='Arial';
font.size:=8;
xb:=xm-5*k;
for i:=-5 to 5 do
begin
moveto (xb,ym); lineto (xb,ym+3);
textout (xb-3,ym+5,inttostr(i));
xb:=xb+k;
end;
yb:=ym+5*k;
for i:=-5 to 5 do
begin
moveto (xm,yb);lineto (xm+3,yb);
if i<>0 then textout (xm+5,yb-5,inttostr(i));
yb:=yb-k;
end;
end;
end;

procedure TForm1.Lschen1Click(Sender: TObject);
begin
loeschen;
end;

procedure TForm1.Schnittpunkteberechnen1Click(Sender: TObject);
begin
a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
c:=strtofloat(edit3.text);
m:=strtofloat(edit4.text);
n:=strtofloat(edit5.text);
koordinatensystem;
x:=-5;
repeat
y:=f(x);
xb:=round(xm+x*k);
yb:=round(ym-y*k);
bild.canvas.pixels[xb,yb]:=clblack;
x:=x+0.001;
until x>5
x:=-5;
repeat
y:=g(x);
xb:=round(xm+x*k);
yb:=round(ym-y*k);
bild.canvas.pixels[xb,yb]:=clblack;
x:=x+0.001;
until x>5
end;

end.

Benni28 16. Mär 2009 14:57

Re: Schnittpunkt Quadartische Gleichung und lineare Funktion
 
Thread kann geschlossen werden...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:34 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