Программирование в среде Delphi. Практикум к лабораторным работам по курсу «Информатика», страница 2

–  другие методы вычерчивания дуги, окружности, хорды, эллипса, прямоугольника, сектора, многоугольника и т.д., см. [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.