– другие методы вычерчивания дуги, окружности, хорды, эллипса, прямоугольника, сектора, многоугольника и т.д., см. [1, 2].
Форма приложения с исходными данными и результатами расчета показана на рис. 2.4.
Рис. 2.4. Программа циклического алгоритма и рисование графика функции с использованием PaintBox
Формируем процедуры обработки нажатия кнопок и компилируем программу. Текст модуля приводим ниже:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, Grids, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
StringGrid1: TStringGrid;
PaintBox1: TPaintBox;
Label4: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var X, Xn, Xk, dX, Y : real;
// процедура формирования заголовка таблицы
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0]:=' X';
StringGrid1.Cells[1,0]:=' Y';
end;
// процедура закрытие приложения
procedure TForm1.Button4Click(Sender: TObject);
begin
Close
end;
// процедура обработки кнопки "О программе"
procedure TForm1.Button3Click(Sender: TObject);
begin
Application.MessageBox('Программу выполнил студент '+
' группы ЛО-11 Макаров В.В.', 'О программе')
end;
// процедура обработки кнопки "Решение"
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
Xn:= StrToFloat(Edit1.Text); // Чтение Хнач
Xk:= StrToFloat(Edit2.Text); // Чтение Хкон
dX:= StrToFloat(Edit3.Text); // Чтение шага по Х
X:=Xn;
i:=1;
while X<=Xk do // цикл вывода значений X и Y в таблицу
begin
Y:=sin(X);
StringGrid1.RowCount:=i+1;
StringGrid1.Cells[0,i]:=FloatToStrF(X,ffFixed,6,2);
StringGrid1.Cells[1,i]:=FloatToStrF(Y,ffFixed,6,3);
X:=X+dX;
i:=i+1;
end;
end;
// процедура обработки кнопки "График"
procedure TForm1.Button2Click(Sender: TObject);
var
i, n : integer;
// минимальное и максимальное значения Х
maxX, minX : real;
// минимальное и максимальное значения Y
maxY, minY : real;
begin
PaintBox1.Refresh; // обновление изображения PaintBox1
PaintBox1.Canvas.Pen.Width:=2; // толщина пера 2 пиксела
// рисование границ PaintBox1
PaintBox1.Canvas.MoveTo(0,0);
PaintBox1.Canvas.LineTo(0,PaintBox1.Height);
PaintBox1.Canvas.LineTo(PaintBox1.Width,PaintBox1.Height);
PaintBox1.Canvas.LineTo(PaintBox1.Width,0);
PaintBox1.Canvas.LineTo(0,0);
minX:=StrToFloat(Edit1.Text);
maxX:=StrToFloat(Edit2.Text);
// отображение минимального значения Х
Label8.Caption:=Edit1.Text;
// отображение максимального значения Х
Label9.Caption:=Edit2.Text;
n:=StringGrid1.RowCount-1;
maxY:=StrToFloat(StringGrid1.Cells[1,1]);
for i:=2 to n do
if maxY<StrToFloat(StringGrid1.Cells[1,i]) then
maxY:=StrToFloat(StringGrid1.Cells[1,i]);
minY:=StrToFloat(StringGrid1.Cells[1,1]);
for i:=2 to n do
if minY>StrToFloat(StringGrid1.Cells[1,i]) then
minY:=StrToFloat(StringGrid1.Cells[1,i]);
// отображение максимального значения Y
Label6.Caption:=FloatToStrF(maxY,ffFixed,6,3);
// отображение минимального значения Y
Label7.Caption:=FloatToStrF(minY,ffFixed,6,3);
PaintBox1.Canvas.Pen.Width:=3; // толщина пера 3 пиксела
//перемещение пера в начальную точку графика
PaintBox1.Canvas.MoveTo(Trunc((StrToFloat(StringGrid1.
Cells[0,1])-minX)/(maxX-minX)*PaintBox1.Width),
Trunc((maxY-StrToFloat(StringGrid1.Cells[1,1]))/(maxY-minY)*PaintBox1.Height));
//рисование графика
for i:=1 to n do
begin
PaintBox1.Canvas.LineTo(Trunc((StrToFloat(StringGrid1.
Cells [0,i])-minX)/(maxX-minX)*PaintBox1.Width),
Trunc((maxY-StrToFloat(StringGrid1.Cells[1,i]))/
(maxY-minY) *PaintBox1.Height));
end;
end;
end.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.