program Bezier_krivka;

uses crt, graph;

var
 grDriver: Integer;
 grMode: Integer;
 ErrCode: Integer;
x0, x1, x2, x3, y1, y2, y3, y0, t: real;
i: integer;

function PP (x0,x1,x2,x3,t: real): integer;   {p0,p1,p2,p3}
begin
     PP:=round ((x0*(1-t)*(1-t)*(1-t)) + (x1*3*t*(1-t)*(1-t)) + (x2*3*t*t*(1-t)) + (x3*t*t*t));
end;

begin
 grDriver := Detect;
 InitGraph(grDriver, grMode,' ');
 ErrCode := GraphResult;
 if ErrCode = grOk then
 begin  { Do graphics }

     x0:=0; y0:=0; x1:=120; y1:=200; x2:=400; y2:=200; x3:=640; y3:=0; t:=0;
     for i:=0 to 1000 do begin
         t:=t+0.001;
         PutPixel(PP(x0,x1,x2,x3,t), PP(y0,y1,y2,y3,t), white);
     end;
   Readln;
   CloseGraph;
 end
 else
   Writeln('Graphics error:', GraphErrorMsg(ErrCode));
end.
