unit Taylor;

interface

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

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  u,v:integer;

implementation

{$R *.dfm}


Procedure Koordinatensystem(Paintbox1:TPaintbox);
var n,m:integer;

begin
  u:=Paintbox1.clientwidth;      //Breite
  v:=Paintbox1.clientheight;     //Hhe
  PaintBox1.Canvas.Brush.Color := clwhite;
  PaintBox1.Canvas.pen.color := clwhite;
  PaintBox1.Canvas.Rectangle(0,0,u,v);
  PaintBox1.Canvas.pen.color := clblack;
  with Paintbox1.Canvas do
    begin
    for n:=-5 to 3 do                              {Gitterpunkte}
      begin
      Moveto((u div 8)*5+n*50,(v div 2)-3);
      Lineto((u div 8)*5+n*50,(v div 2)+4);
      end;
    for n:=-5 to 5 do
      begin
      Moveto((u div 8)*5-3,((v div 2)+n*50));
      Lineto((u div 8)*5+4,((v div 2)+n*50));
      end;
    for n:=-5 to 3 do begin
    for m:=-5 to 5 do begin
    pixels[(u div 8)*5+n*50,(v div 2)+m*50]:=clred
    end;
    end;

    Moveto(0,v div 2);             {Achsen}
    Lineto(u,v div 2);
    Moveto(u,v div 2);
    Lineto(u-10,(v div 2)-5);
    Moveto(u,v div 2);
    Lineto(u-10,(v div 2)+5);
    Moveto((u div 8)*5,0);
    Lineto((u div 8)*5,v);
    Moveto((u div 8)*5,0);
    Lineto((u div 8)*5-5,10);
    Moveto((u div 8)*5,0);
    Lineto((u div 8)*5+5,10);
    end;
    
end;

Procedure Expofu(Paintbox1:TPaintbox);                  {Exponentialfunktion}
var p,q:integer;
    x,y:extended;
begin
  u:=Paintbox1.clientwidth;      //Breite
  v:=Paintbox1.clientheight;     //Hhe
  x:=-6;
  while x<=4 do
  begin
    y:=exp(x);
    p:=round((u div 8)*5+x*50);
    q:=round((v div 2)-y*10);
    Paintbox1.Canvas.Pixels[p,q]:=clblue;
    x:=x+0.002;
end;
end;

function fak(k:integer):integer;
var i:integer;
begin
  if k=0 then result:=1 else
  begin
  result:=1;
  for i:=1 to k do
  result:=result*i;
  end;
end;

Procedure TaylorPol(Paintbox1:TPaintbox);                  {Taylorpolynom}
var k,p,q:integer;
    x,y:extended;
begin
  u:=Paintbox1.clientwidth;      //Breite
  v:=Paintbox1.clientheight;     //Hhe
  x:=-6;

  while x<=4 do
  begin
  for k:=0 to 2 do
      y:=(exp(0)/fak(k))*Power(x,k);
      p:=round((u div 8)*5+x*50);
      q:=round((v div 2)-y*10);
      Paintbox1.Canvas.Pixels[p,q]:=clred;
      x:=x+0.002;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  close
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Koordinatensystem(Paintbox1);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  expofu(Paintbox1);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  TaylorPol(paintbox1);
end;

end.
