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

2.6. Разработка приложения Delphi, реализующего           циклический  алгоритм.    Построение  графика  с           использованием компонента Chart

Разработать приложение, позволяющее вычислять значение функции y(x)=-x cos(x/2) на интервале от хн до хк с шагом . В главной форме должны находиться поля ввода значений хн, хк, , таблица вывода значений аргумента и функции, график функции, кнопка «Решение», кнопка «График», кнопка «О программе», кнопка «Выход».

При нажатии кнопки «Решение» программа должна считать исходные данные, вычислить значение функции, поместить значения аргумента и функции в таблицу.

При нажатии кнопки «График» программа должна считать значения аргумента и функции из таблицы, вывести график функции.

Вставляем в пустую форму компонент Edit1 для ввода значения хн, компонент Edit2 для ввода значения хк, компонент Edit3 для ввода значения , четыре кнопки Button1-Button4 для запуска соответствующих процедур, таблицу StringGrid1 для вывода значений аргумента и функции, компонент Chart1 для выводы графика функции.

Познакомимся с новым компонентом Chart. Основными свойствами и методами Chart являются:

–  SeriesList – массив серий, которые выполняют построение каждого графика, номера серий начинаются с нуля;

–  AddX, AddY, AddXY – методы добавления новых точек в график функции.

Компонент Chart автоматически масштабирует окно вывода графика. При нажатии на левую кнопку мыши в графической области изменяется масштаб графика, при нажатии на правую кнопку – смещается координата центра графической области.

Форма приложения с исходными данными и результатами расчета показана на рис. 2.5.

Рис. 2.5. Программа циклического алгоритма и вывода           графика функции с использованием Chart

Формируем процедуры обработки нажатия кнопок и компилируем программу. Текст модуля приводим ниже:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,

Forms,  Dialogs, Grids, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart,

Series;

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;

Label4: TLabel;

Chart1: TChart;

Series1: TLineSeries;

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:=-X*cos(X/2);

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;

begin

n:=StringGrid1.RowCount-1;

//очистка графической области

Chart1.SeriesList[0].Clear;

//рисование графика

for i:=1 to n do

begin

Chart1.SeriesList[0].AddXY(StrToFloat(StringGrid1.Cells[0,i]),

StrToFloat(StringGrid1.Cells[1,i]),'',clRed);

end;

end;

end.

2.7. Простейшие приемы работы с одномерными массивами