Code:
unit TweedeGraadsFunctie;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
KnopWissen: TButton;
GroupBox1: TGroupBox;
ScrollBara: TScrollBar;
ScrollBarb: TScrollBar;
ScrollBarc: TScrollBar;
KnopReset: TButton;
KnopTekenF: TButton;
GroupBox2: TGroupBox;
Panel1: TPanel;
Label1: TLabel;
KnopNulpuntenNumeriek: TButton;
KnopExtremeWaardeParaboolABCformule: TButton;
KnopNulpuntenParaboolABCformule: TButton;
GroupBox3: TGroupBox;
ScrollBard: TScrollBar;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
KnopTekenG: TButton;
Uit_fx: TEdit;
Uit_gx: TEdit;
Uit_a: TEdit;
Uit_b: TEdit;
Uit_c: TEdit;
Uit_NE: TEdit; {Nulpunten Exact}
Uit_EE: TEdit;
Uit_NN1: TEdit;
KnopFunctiegenerator: TButton;
KnopStopGenereren: TButton;
KnopRaaklijnenExact: TButton;
Uit_NN2: TEdit;
Panel6: TPanel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Uit_d: TEdit;
KnopExtremeWaarden: TButton;
Uit_EW: TEdit; {Nulpunten Numeriek}
procedure FormActivate(Sender: TObject);
procedure KnopWissenClick(Sender: TObject);
procedure ScrollBaraScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure ScrollBarbScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure ScrollBarcScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure KnopResetClick(Sender: TObject);
procedure KnopTekenFClick(Sender: TObject);
procedure KnopNulpuntenNumeriekClick(Sender: TObject);
procedure KnopExtremeWaardeParaboolABCformuleClick(Sender: TObject);
procedure KnopNulpuntenParaboolABCformuleClick(Sender: TObject);
procedure ScrollBardScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
procedure KnopTekenGClick(Sender: TObject);
procedure KnopFunctiegeneratorClick(Sender: TObject);
procedure KnopStopGenererenClick(Sender: TObject);
procedure KnopRaaklijnenExactClick(Sender: TObject);
procedure KnopExtremeWaardenClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure plaatspixel(x,y: real; Kleur: TColor);
procedure ToonFunctievoorschrift;
procedure TekenAssenstelsel;
procedure plotten(k:char);
procedure wissen;
function f(x:real):real;
function g(x:real):real;
function r(x:real):real;
end;
const dint=10; dmin=-dint div 2; dmax=-dmin;
interval=0.001; m=10; pix=696;
x0=m+(pix div 2); y0=m+(pix div 2);
KleurRectangle=clGray; KleurAssen=clPurple;
var
Form1 : TForm1;
stoppen : boolean;
gereset : boolean;
doorgaan : boolean;
x,y,xmax,ymax,aa,bb : real;
a,b,c,d : integer;
implementation
{$R *.dfm}
function Tform1.f(x:real):real;
begin
f:=d*x*x*x+a*x*x+b*x+c;
end;
function Tform1.g(x:real):real;
begin
g:=3*d*x*x+2*a*x+b;
end;
function Tform1.r(x:real):real;
begin
r:=(aa*x)+bb;
end;
Procedure TForm1.ToonFunctievoorschrift;
var t4,t1,t2,t3 : char;
S4,S1,S2,S3 : string[20];
g4,g1,g2,g3 : string[3];
e4,e1,e2 : string[2];
begin
if d<=1 then t4:='-';
if d=0 then t4:=' ';
if d>0 then t4:=' ';
if a<=1 then t1:='-';
if a=0 then t1:=' ';
if a>0 then t1:='+';
if b<=1 then t2:='-';
if b=0 then t2:=' ';
if b>0 then t2:='+';
if c<=1 then t3:='-';
if c=0 then t3:=' ';
if c>0 then t3:='+';
if ((d>=-1) and (d<=1)) then g4:=' ' else
if d>1 then g4:=IntToStr(d)else g4:=IntToStr(-d);
if ((a>=-1) and (a<=1)) then g1:=' ' else
if a>1 then g1:=IntToStr(a)else g1:=IntToStr(-a);
if ((b>=-1) and (b<=1)) then g2:=' ' else
if b>1 then g2:=IntToStr(b)else g2:=IntToStr(-b);
if c=0 then g3:=' ' else
if c>=1 then g3:=IntToStr(c)else g3:=IntToStr(-c);
if d=0 then e4:=' ' else e4:='x'+#179;
if a=0 then e1:=' ' else e1:='x'+#178;
if b=0 then e2:=' ' else e2:='x';
S4:=t4+g4+e4;
S1:=t1+g1+e1;
S2:=t2+g2+e2;
S3:=t3+g3;
Uit_fx.Text:='y='+S4+S1+S2+S3;
if d<=1 then t4:='-';
if d=0 then t4:=' ';
if d>0 then t4:=' ';
if a<=1 then t1:='-';
if a=0 then t1:=' ';
if a>0 then t1:='+';
if b<=1 then t2:='-';
if b=0 then t2:=' ';
if b>0 then t2:='+';
if ((d>-1) and (d<1)) then g4:=' ' else
if d>=1 then g4:=IntToStr(3*d)else g4:=IntToStr(-3*d);
if ((a>-1) and (a<1)) then g1:=' ' else
if a>=1 then g1:=IntToStr(2*a)else g1:=IntToStr(-2*a);
if ((b>-1) and (b<1)) then g2:=' ' else
if b>=1 then g2:=IntToStr(b)else g2:=IntToStr(-b);
if d=0 then e4:=' ' else e4:='x'+#178;
if a=0 then e1:=' ' else e1:='x';
S4:=t4+g4+e4;
S1:=t1+g1+e1;
S2:=t2+g2;
Uit_gx.Text:='y='+S4+S1+S2;
end;
procedure TForm1.KnopTekenFClick(Sender: TObject);
begin
doorgaan:=false; plotten('f');
end;
procedure TForm1.KnopTekenGClick(Sender: TObject);
begin
doorgaan:=false; plotten('g');
end;
procedure TForm1.KnopWissenClick(Sender: TObject);
begin
wissen; stoppen:=true; doorgaan:=false;
end;
procedure TForm1.KnopResetClick(Sender: TObject);
begin
d:=0; Uit_d.Text:=IntToStr(d);
a:=0; Uit_a.Text:=IntToStr(a);
b:=0; Uit_b.Text:=IntToStr(b);
c:=0; Uit_c.Text:=IntToStr(c);
gereset:=true;
doorgaan:=false;
ToonFunctievoorschrift;
end;
procedure TForm1.KnopNulpuntenParaboolABCformuleClick(Sender: TObject);
var Dis,x1,x2 : real;
begin
doorgaan:=false;
if a<>0 then Dis:=((b*b)-(4*a*c));
if ((Dis>=0) and (a<>0) and (d=0)) then
begin
x1:=(-b-sqrt(Dis))/(2*a);
x2:=(-b+sqrt(Dis))/(2*a);
Uit_NE.Text:=
FloatToStrF(x1,ffFixed,1,2)+' '+
FloatToStrF(x2,ffFixed,1,2);
end;
if D<0 then Uit_NE.Text:=
'Er zijn geen nulpunten';
if a=0 then Uit_NE.Text:=
'Deze methode is alleen mogelijk als a<>0';
if d<>0 then Uit_NE.Text:=
'Deze methode is alleen mogelijk als d=0';
end;
procedure TForm1.KnopExtremeWaardeParaboolABCformuleClick(Sender: TObject);
var x1,x2 : real;
begin
doorgaan:=false;
if ((a<>0) and (d=0)) then
begin
ymax:=f(-b/(2*a));
Uit_EE.Text:=
FloatToStrF(-b/(2*a),ffFixed,1,2)+' '+
FloatToStrF(ymax,ffFixed,1,2);
end else
if a=0 then
Uit_EE.Text:=
'Deze methode is alleen mogelijk als a<>0';
if d<>0 then
Uit_EE.Text:=
'Deze methode is alleen mogelijk als d=0';
end;
procedure TForm1.KnopNulpuntenNumeriekClick(Sender: TObject);
const max=100;
type NulpuntenGeheugen = array[1..max] of real;
var N : NulpuntenGeheugen;
m,x,y,dx: real;
i,s : integer;
Ns : string;
kleur : TColor;
begin
wissen; doorgaan:=false; for i:=1 to max do N[i]:=0;
i:=1; dx:=0.01; m:=5*dx; x:=dmin; s:=0; Ns:=' '; kleur:=clBlue;
while x<=dmax do
begin
y:=f(x);
plaatspixel(x,y,kleur);
sleep(s);
if ((y>-m) and (y<m)) then
begin
N[i]:=x; inc(i); Ns:=Ns+FloatToStrF(x,ffFixed,1,2)+' ';
Uit_NN1.text:=' ... zoeken ... '+
FloatToStrF(x,ffFixed,1,2)+' '+
FloatToStrF(y,ffFixed,1,2);
s:=500;
end;
if not ((y>-m) and (y<m)) then s:=0;
x:=x+dx;
end;
Uit_NN2.text:=' '+IntToStr(i-1);
Uit_NN1.text:=Ns;
plotten('f');
end;
procedure TForm1.KnopRaaklijnenExactClick(Sender: TObject);
const dxx=0.1;
var xx: real;
begin
xx:=dmin;
while xx<=dmax do
begin
aa:=g(xx); bb:=f(xx)-(xx*g(xx));
plotten('r');
xx:=xx+dxx;
end;
end;
procedure TForm1.KnopFunctiegeneratorClick(Sender: TObject);
const max=5;
begin
while doorgaan do
begin
Randomize;
d:=Random(max)-(max div 2);
a:=Random(max)-(max div 2);
b:=Random(max)-(max div 2);
c:=Random(max)-(max div 2);
Uit_a.text:=IntToStr(a); Uit_b.text:=IntToStr(b);
Uit_c.text:=IntToStr(c); Uit_d.text:=IntToStr(d);
plotten('f'); plotten('g');
sleep(350); wissen;
end;
end;
procedure TForm1.KnopStopGenererenClick(Sender: TObject);
begin
doorgaan:=not doorgaan;
end;
procedure TForm1.TekenAssenstelsel;
var i : integer;
begin
for i:=1 to pix do Canvas.Pixels[x0-(pix div 2)+i,y0]:=KleurAssen;;
for i:=1 to pix do Canvas.Pixels[x0-(pix div 2)+i,y0+pix div 2]:=KleurRectangle;
for i:=1 to pix do Canvas.Pixels[x0-(pix div 2)+i,y0-pix div 2]:=KleurRectangle;
for i:=1 to pix do Canvas.Pixels[x0,y0-(pix div 2)+i]:=KleurAssen;
for i:=1 to pix do Canvas.Pixels[x0- pix div 2,y0-(pix div 2)+i]:=KleurRectangle;
for i:=1 to pix do Canvas.Pixels[x0+ pix div 2,y0-(pix div 2)+i]:=KleurRectangle;
Canvas.TextOut(pix,(pix div 2)-5,'x'); Canvas.TextOut(m+(pix div 2)+5,m+1,'y');
end;
procedure TForm1.wissen;
begin
Canvas.Rectangle(m,m,m+pix+1,m+pix+1);
Canvas.Refresh; TekenAssenstelsel;
end;
procedure Tform1.plaatspixel(x,y: real; kleur: TColor);
var p,q : integer; Sx, Sy : real;
begin
application.processmessages;
Sx:=pix div (dmax-dmin); Sy:=(pix div 2) div dmax;
if x<(dmin+2*interval) then TekenAssenstelsel;
p:=x0+ROUND(x*Sx);
q:=y0-ROUND(y*Sy);
if ((p>m) and (p<m+pix) and (q>m) and (q<m+pix)) then
Canvas.Pixels[p,q]:=kleur;
end;
procedure TForm1.plotten(k:char);
var kleur: TColor;
begin
x:=dmin;
While ((x<=dmax) and (not stoppen)) do
begin
if k='f' then begin y:=f(x); kleur:=clPurple; end;
if k='g' then begin y:=g(x); kleur:=clRed; end;
if k='r' then begin y:=r(x); kleur:=clGreen; end;
x:=x+interval;
plaatspixel(x,y,kleur);
end;
stoppen:=false; ToonFunctievoorschrift;
end;
procedure TForm1.KnopExtremeWaardenClick(Sender: TObject);
var dis,aa,bb,cc,x1,x2,y1,y2: real;
begin
doorgaan:=false;
if d<>0 then
begin
aa:=3*d; bb:=2*a; cc:=b;
if aa<>0 then dis:=((bb*bb)-(4*aa*cc));
if ((dis>=0) and (a<>0)) then
begin
x1:=(-bb-sqrt(dis))/(2*aa); y1:=f(x1);
x2:=(-bb+sqrt(dis))/(2*aa); y2:=f(x2);
end;
if dis >=0 then
Uit_EW.Text:=FloatToStrF(x1,ffFixed,1,2)+' '+
FloatToStrF(y1,ffFixed,1,2)+' '+
FloatToStrF(x2,ffFixed,1,2)+' '+
FloatToStrF(y2,ffFixed,1,2);
if dis<0 then Uit_EW.Text:='... er is/zijn geen extreme waarde(n)';
end;
if ((d=0) and (a<>0)) then
begin
aa:=a; bb:=b;
x1:=-bb/(2*aa); y1:=f(x1);
Uit_EW.Text:=FloatToStrF(x1,ffFixed,1,2)+' '+
FloatToStrF(y1,ffFixed,1,2);
end;
end;
procedure TForm1.ScrollBardScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
doorgaan:=false; if gereset then ScrollPos:=d;
d:=ScrollPos; Uit_d.Text:=IntToStr(d);
gereset:=false; ToonFunctievoorschrift;
end;
procedure TForm1.ScrollBaraScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
doorgaan:=false; if gereset then ScrollPos:=a;
a:=ScrollPos; Uit_a.Text:=IntToStr(a); plotten('f');
gereset:=false; ToonFunctievoorschrift;
end;
procedure TForm1.ScrollBarbScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
doorgaan:=false; if gereset then ScrollPos:=b;
b:=ScrollPos; Uit_b.Text:=IntToStr(b);
gereset:=false; ToonFunctievoorschrift;
end;
procedure TForm1.ScrollBarcScroll(Sender: TObject; ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
doorgaan:=false; if gereset then ScrollPos:=c;
c:=ScrollPos; Uit_c.Text:=IntToStr(c);
gereset:=false; ToonFunctievoorschrift;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
application.processmessages;
stoppen:=false; gereset:=false;
doorgaan:=true;
d:=0; Uit_d.Text:=IntToStr(d);
a:=0; Uit_a.Text:=IntToStr(a);
b:=0; Uit_b.Text:=IntToStr(b);
c:=0; Uit_c.Text:=IntToStr(c);
ToonFunctievoorschrift;
wissen;
end;
end.
Bookmarks