Лабораторная работа: Построения графиков с TСhart
Цель лабораторной работы: изучить возможности построения графиков с помощью компонента отображения графической информации TСhart. Написать и отладить программу построения на экране графика заданной функции.
Задание: Написать и отладить программу построение графика функции.
В качестве f(x) использовать по выбору: sh(x), x2, ex.
Блок – схемы алгоритма программы
На рисунках 1-7 представлен алгоритм поставленной задачи
Текст программы
Далее приведен текст программы на языке программирования Object Pascal, реализующей выполнение поставленной задачи.
unit laba77888888888888888;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, TeeProcs, TeEngine, Chart, Buttons, StdCtrls, Series, math,matfu;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
BitBtn1: TBitBtn;
Chart1: TChart;
Label6: TLabel;
Edit6: TEdit;
Label7: TLabel;
Edit7: TEdit;
Series1: TLineSeries;
RadioGroup1: TRadioGroup;
Series2: TLineSeries;
Series3: TLineSeries;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
fun = function(x:extended):extended; // Объявление типа функция
var
Form1: TForm1;
Xmin,Xmax,Ymin,Ymax,Hx,Hy,h : extended;
u: integer;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin {Установка начальных параметров координатных осей}
Xmin:=0;
Xmax:=0;
Ymin:=0;
Ymax:=0;
Hx:=0;
Hy:=0;
h:=0.01; // Установка шага расчета таблицы {Вывод данных в окна однострочных редакторов}
Edit1.Text:=FloatToStr(Xmin); Edit2.Text:=FloatToStr(Xmax);
Edit3.Text:=FloatToStr(Ymin);
Edit4.Text:=FloatToStr(Ymax);
Edit5.Text:=FloatToStr(Hx);
Edit6.Text:=FloatToStr(Hy);
Edit7.Text:=FloatToStr(h);
Chart1.BottomAxis.Automatic:=False;// Отключение автоматического определения Chart1.BottomAxis.Minimum:=Xmin; // Установка левой границы нижней оси Chart1.BottomAxis.Maximum:=Xmax; // Установка правой границы нижней оси Chart1.LeftAxis.Automatic:=False; // Отключение автоматического определения Chart1.LeftAxis.Minimum:=Ymin; // Установка нижней границы левой оси Chart1.LeftAxis.Maximum:=Ymax; // Установка верхней границы левой оси Chart1.BottomAxis.Increment:=Hx; // Установка шага разметки по нижней оси Chart1.LeftAxis.Increment:=Hy; // Установка шага разметки по левой оси button2.hide; end;
procedure TForm1.Button1Click(Sender: TObject);
begin {Чтение даннных из окон однострочных редакторов} Xmin:=StrToFloat(Edit1.Text); Xmax:=StrToFloat(Edit2.Text);
Ymin:=StrToFloat(Edit3.Text);
Ymax:=StrToFloat(Edit4.Text);
Hx:=StrToFloat(Edit5.Text);
Hy:=StrToFloat(Edit6.Text);
Chart1.BottomAxis.Minimum:=Xmin; // Установка левой границы нижней оси Chart1.BottomAxis.Maximum:=Xmax; // Установка правой границы нижней оси
Chart1.LeftAxis.Minimum:=Ymin; // Установка нижней границы левой оси Chart1.LeftAxis.Maximum:=Ymax; // Установка верхней границы левой оси Chart1.BottomAxis.Increment:=Hx; // Установка шага разметки по нижней оси Chart1.LeftAxis.Increment:=Hy; // Установка шага разметки по левой оси button2.Show; end;
procedure TForm1.Button2Click(Sender: TObject);
var x,y1,j: extended;
y: array [1..3] of extended;
f: fun;
begin
{Очистка графиков} Series1.Clear;
Series2.Clear;
Series3.Clear;
Xmin:=StrToFloat(Edit1.Text);
Xmax:=StrToFloat(Edit2.Text);
h:=StrToFloat(Edit7.Text); // Шаг расчета таблицы для графика x:=Xmin; // Начальное значение по оси X case RadioGroup1.ItemIndex of
0: u:=1;
1: u:=2;
2: u:=3;
end;
x:=Xmin;
y[u]:=0;
repeat
If (x>0.5) and (x<10) then
begin
if u=1 then
y[u]:=e(x);
if u=2 then
y[u]:=x2(x);
if u=3 then
y[u]:=sh(x);
y1:=exp(y[u]-abs(x));
Series1.AddXY(x,y1,'',clTeeColor); // Вывод точки на график //x:=x+h;
end;
x:=x+h;
until (x>Xmax);
x:=Xmin;
y[u]:=0;
repeat
j:=x;
if (x>0.1) and (x<0.5) then
begin
if u=1 then
y[u]:=e(j);
if u=2 then
y[u]:=x2(j);
if u=3 then
y[u]:=sh(j);
y1:=sqrt(abs(y[u]+x));
Series2.AddXY(x,y1,'',clTeeColor); // Вывод точки на график end;
x:=x+h;
until (x>Xmax);
x:=Xmin;
y[u]:=0;
repeat
if (x<0.1) or (x>10) then
begin
if u=1 then
y[u]:=e(x);
if u=2 then
y[u]:=x2(x);
if u=3 then
y[u]:=sh(x);
y1:=2*y[u]*y[u];
Series3.AddXY(x,y1,'',clTeeColor); // Вывод точки на график end;
x:=x+h;
until (x>Xmax);
end; end. unit matfu;
interface
Function e(x:extended) : extended; // Функция для вычисления тангенса Function Sh(x:extended) : extended; // Функция для вычисления гиперболического синуса Function x2(x:extended) : extended; // Функция для вычисления квадрата синуса implementation
Function e;
begin
Result:=exp(x);
end;
Function sh;
begin
Result:=(exp(x)-exp(-x))/2;
end;
Function x2;
begin
Result:=x*x;
end;
end. |
Инструкция пользователю
Данная программа рисует график выбранной пользователем функции. Для того, чтобы программа нарисовала график функции, вам необходимо заполнить все поля числами, нажать кнопку «Разметить», выбрать функцию, нажать кнопку «Построить график». После чего вы сможете увидеть результ работы. Для выхода из программы используйте кнопку «Close».
Инструкция программисту
Методы обработки событий:
1) procedure FormCreate(Sender: TObject); метод обработки события OnCreate компонента Main_Form
2) procedure Button1Click(Sender: TObject); метод обработки события OnClick компонента Button1
3) procedure Button2Click(Sender: TObject); метод обработки события OnClick компонента Button2
В программе используется модуль matfu, который необходим для вычисления значений функций. Алгоритм его работы представлен на рис. 4-6
Используемые в программе переменные и компоненты интерфейса представлены в таблице 1.
Таблица 1
Имя переменной |
Тип/Класс |
Назначение |
Label1 |
TLabel |
Пояснительная надпись Xmin |
Label2 |
TLabel |
Пояснительная надпись Xmax |
Label3 |
TLabel |
Пояснительная надпись Ymin |
Label4 |
TLabel |
Пояснительная надпись Ymax |
Label5 |
TLabel |
Пояснительная надпись о шаге по оси Х |
Label6 |
TLabel |
Пояснительная надпись о шаге по оси У |
Label7 |
TLabel |
Пояснительная надпись о шаге расчета таблицы |
Edit1 |
TEdit |
Поле для ввода Xmin |
Edit2 |
TEdit |
Поле для ввода Xmax |
Edit3 |
TEdit |
Поле для ввода Ymin |
Edit4 |
TEdit |
Поле для ввода Ymax |
Edit5 |
TEdit |
Поле для ввода шага по оси Х |
Edit6 |
TEdit |
Поле для ввода шага по оси У |
Edit7 |
TEdit |
Поле для ввода шага расчета таблицы |
Button1 |
TButton |
Кнопка служащая для выполнения разметки сетки |
Button2 |
TButton |
Кнопка служащая для построение графика выбранной функции |
BitBtn |
TBitBtn |
Кнопка служащая для выхода из программы |
Chart1 |
TChart |
компонента отображения графической информации |
Series1 |
TLineSeries |
специальный двумерный массив |
RadioGroup1 |
TRadioGroup |
Переключатель между функциями |
Xmin |
Extended |
Минимальное значение Х |
Xmax |
Extended |
Максимальное значение Х |
Ymin |
Extended |
Минимальное значение У |
Ymax |
Extended |
Минимальное значение У |
Hx |
Extended |
Шаг разметки по оси Х |
Hy |
Extended |
Шаг разметки по оси У |
H |
Extended |
Шаг расчета таблицы |
U |
Extended |
Переменная для переключения между функциями |
Тестовый пример
На рисунке 4 изображен тестовый пример работы программы.
Рисунок 8 – Тестовый пример работы программы, формирующей ведомость об успеваемости студентов
Вывод
Выполнив данную лабораторную работу я изучил возможности построения графиков с помощью компонента отображения графической информации TСhart. Написал и отладил программу построения на экране графика заданной функции.