1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure Grafik;
function F(x:real):real;
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.F(x: real): real;
begin
f:=cos(x);
end;
procedure TForm1.FormPaint(Sender: TObject);
Begin
Grafik;
end;
procedure TForm1.Grafik;
Const a=-10;b=10;dx=0.01;
Var h,w,i,t1:integer;
x,y,mh,mw,y1,y2,t:real;
begin
w:=Form1.ClientWidth div 2-5; //середина по оси X
h:=Form1.ClientHeight div 2-5; //середина по оси Y
Form1.Canvas.MoveTo(w,5); //начальная точка оси Y
Form1.Canvas.LineTo(w,h*2-3); //ось Y
Form1.Canvas.MoveTo(5,h); //начальная точка оси X
Form1.Canvas.LineTo(w*2-5,h); //ось X
Form1.Canvas.TextOut(w+14,1,'Y'); //Вывод "Y"
Form1.Canvas.TextOut(w*2-10,h-20,'X'); //Вывод "X"
Form1.Canvas.TextOut(w-8,h+3,'0'); //Точка 0
x:=a; //начальное значение x
y1:=f(x);y2:=f(x); //делаем max и min первые значения фукнции
While x<=b do //пока не дошли до верхней границы x
Begin
t:=f(x); //вычисляем значение функции в точке x
if t>y1 then y1:=t; //если значение в данной точке больше max делаем это значение max
if t<y2 then y2:=t; //если значение в данной точке меньше min делаем это значение min
x:=x+dx; //увеличиваем x на шаг
End;
mw:=(w*2-10)/abs(b-a); //маштаб по x
mh:=(h*2-10)/abs(y1-y2); //маштаб по y
i:=round(y2);
While i<=round(y1) do // засечки оси y с полож-ми знач-ми
Begin
if i<>0 then Form1.Canvas.TextOut(w+3,h-round(i*mh)-7,IntToStr(i));
Form1.Canvas.MoveTo(w-5,h-round(i*mh));
Form1.Canvas.LineTo(w+2,h-round(i*mh));
inc(i,1);
End;
i:=a;
While i<abs(a+b) div 2 do // засечки оси x с отр-ми знач-ми
Begin
Form1.Canvas.TextOut(w+round(i*mw),h+3,IntToStr(i));
Form1.Canvas.TextOut(w+round(i*mw)+5,h-8,'|');
inc(i);
End;
i:=1;
While i<=b do // засечки оси x с полож-ми знач-ми
Begin
Form1.Canvas.TextOut(w+round(i*mw)-10,h+3,IntToStr(i));
Form1.Canvas.TextOut(w+round(i*mw)-7,h-8,'|');
inc(i);
End;
x:=a; //начальное значение x
While x<=b do //построение графика
Begin
y:=f(x); //вычисляем значение функции в точке x
Form1.Canvas.Pixels[w+round(x*mw),h-round(y*mh)]:=clGreen; //прорисовываем точку [x,y]
x:=x+dx; //увеличиваем x1 на шаг
End;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
Form1.Canvas.Rectangle(0,0,Form1.ClientWidth,Form1.ClientHeight);
Grafik;
end;
end. |