Лабораторная работа № 6

на тему «Построение диаграмм и графиков функций» для ст-тов 1 курса ПИЭ факультета ИиИТ

Цель работы: приобретение практических навыков по построению  диаграмм и графиков функций.

Используемые программные средства: Borland Delphi.

 

                               Теоретические сведения. Работа с компонентами

 

Компонент-диаграмма Chart типа TChart предназначен для работы с графиками и диаграммами различных типов и служит для графического представления результатов. Компонент находится на панели Additional Палитры компонентов и имеет пиктограмму .

Компонент  содержит  большое  количество  разнообразных  свойств,  многие    из

которых являются объектами и имеют свои свойства. Установка значений этих свойств выполняется с помощью редактора Editing Chart (рис. 6.1) во время разработки программы (приложения) либо при обращении к свойствам компонента во время ее выполнения. Всю работу по отображению графиков, построению и разметке координатных осей, сетки, подписей и т.д. берет на себя компонент Chart. Разработчику программы требуется задать тип диаграммы и источник данных.

Для представления данных, заданных таблично или с использованием функции, в виде линии, используется переменная Series1 типа TLineSeries, которая описывает последовательность значений, отображающихся на диаграмме.

Добавление новой точки к серии выполняется с помощью метода Add:

function  AddXY(Const      AXValue,AYValue:Double;      

Const AXLabel:String; AColor:TColor),

где AXValue, AYValue параметры, определяющие координаты точки по  осям

OX и OY;

AXLabel необязательный параметр;

AColor цвет группы, к которой принадлежит точка.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Рис. 6.1. Окно редактора Editing Chart

Аналогично для добавления нового сектора в круговой диаграмме так же можно воспользоваться функцией Add:

function   Add(Const   PieValue:Double;  

Const      APieLabel:String; AColor: TColor)

где PieValue величина сектора данных , APieLabel необязательный параметр, AColor цвет сектора.

Связь между диаграммой и программным кодом происходит следующим образом. При создании каждой серии данных с помощью редактора Editing Chart, в разделе TForm1 появляется новая переменная Series<n> (где <n> – номер серии) соответствующего типа. Например, для отображения серии данных в виде точек, переменная Series1 будет иметь тип TPointSeries (точечное представление). Некоторые свойства компонента Chart приведены в табл. 6.1.

Таблица 6.1

Свойства компонента Chart

 

Title.Text

задание заголовка диаграммы

Title.Aligment

выравнивание заголовка

<NameAxis>.Automatic

автоматическое определение параметров по оси

<NameAxis>.Minimum

задание минимального значения по оси

<NameAxis>.Maximum

задание максимального значения по оси

<NameAxis>.Increment

задание шага разметки по оси

 

Под <NameAxis> понимается нижняя (BottomAxis), левая   (LeftAxis),

правая (RightAxis) или верхняя (TopAxis) координатная ось.

 

6.2. Порядок выполнения работы

 

Изучить  компонент   TChart  и его   свойства,   выполнить  контрольные примеры и задания соответствующего варианта.

Контрольный пример 6.1

 Составить  программу,  отображающую  графики   функций    и  в интервале [a, b] с заданным шагом h.

Решение.

1.  Открыть новый проект Delphi: File New Application.

2.    На форме расположить следующие компоненты: три компонента Edit, три компонента Label, компонент Chart и компонент Button и установить для них следующие свойства:

Label1.Caption = a' Label2.Caption = b' Label3.Caption = h' Edit1.Text = '' Edit2.Text = '' Edit3.Text = ''

Button1.Caption = 'Построить'

Для изменения параметров компонента Chart необходимо два раза щелкнуть на нем левой кнопкой мыши (или один раз правой кнопкой и в контекстном меню выбрать пункт Edit Chart). В открывшемся окне редактирования Editing Chart1 создать два объекта Series1 и Series2, щелкнув на кнопке Add, находящейся на вкладке Series. В качестве типа графика выбрать Line, отключив трехмерное представление с помощью переключателя 3D. Для изменения имен серий (на f1 и f2) используется кнопка Title. Редактирование завершается нажатием кнопки Close. Первоначально на графиках отображаются случайные значения.

3.   Для решения задачи запишем обработчик событий Button1.Click, щелкнув на компоненте Button1 (кнопка Построить) два раза левой кнопкой мыши.  Текст соответствующей процедуры имеет вид:

procedure TForm1.Button1Click(Sender: TObject); var a,b,h:double;

var x,f1,f2:double; begin

//удаление всех значений в ряду данных

Series1.Clear;

Series2.Clear;

//задание значений границ и шага a:=StrToFloat(Edit1.Text); b:=StrToFloat(Edit2.Text); h:=StrToFloat(Edit3.Text);

//расчет значений функций

x:=a; repeat

f1:=sin(x);

Series1.AddXY(x,f1,'',clRed); f2:=cos(x);

Series2.AddXY(x,f2,'',clBlue); x:=x+h;

until x>b;

//задание названия диаграммы Chart1.Title.Text.Clear; Chart1.Title.Text.Add('Графики функций f1 и f2.

Шаг = '+FloatToStr(h));

//установка параметров нижней оси Chart1.BottomAxis.Automatic:=false; Chart1.BottomAxis.Minimum:=a; Chart1.BottomAxis.Maximum:=b;

Chart1.BottomAxis.Increment:=(Chart1.BottomAxis.Maximum

-Chart1.BottomAxis.Minimum)/2;

 

//установка параметров левой оси Chart1.LeftAxis.Automatic:=false; Chart1.LeftAxis.Minimum:=-1; Chart1.LeftAxis.Maximum:=1; Chart1.LeftAxis.Increment:=0.5;

end;

4.  Запустить проект на компиляцию и выполнение.

5.    Задать значения a = 0, b = 6.28, h = 0.1 и нажать кнопку Построить. График зависимостей будет иметь вид, показанный на рис. 6.2.


Рис. 6.2. Результат выполнения программы для контрольного примера 6.1

Контрольный пример 6.2

Построить  график  функции,   заданной  таблично.  Для   ввода   значений использовать компонент StringGrid.

Решение.

1.  Открыть новый проект Delphi: File New Application.

2.   На форме расположить следующие компоненты: компонент Edit, компонент Label, компонент Chart, компонент CheckBox, компонент StringGrid и два компонента Button.

3.  Установить в Object Inspector следующие свойства компонентов:

Label1.Caption = 'N'

Button1.Caption = 'Таблица'

Button2.Caption = 'Построить'

Edit1.Text = ''

StringGrid1.Options

goEditing = true

StringGrid1.ColCount = 2

StringGrid1.FixedCols = 0

CheckBox1.Caption = 'Точки'

Для компонента Chart, используя EditingChart1, создать объект   Series1,

выбрав в качестве типа графика Line.

4.        Запишем   обработчики   событий   Button1.Click (кнопка   Таблица)      и

Button2.Click (кнопка Построить), текст которых приведен ниже:

procedure TForm1.Button1Click(Sender: TObject); begin

StringGrid1.RowCount:=StrToInt(Edit1.Text)+1; StringGrid1.Cells[0,0]:='x'; StringGrid1.Cells[1,0]:='y';

end;

 

procedure TForm1.Button2Click(Sender: TObject); var i,j:longint;

begin

Series1.Clear;

for i:=1 to StringGrid1.RowCount-1 do

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

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

Chart1.Title.Text.Clear; end;

5.   Для отображения точек на графике использовался метод Visible компонента типа TSeriesPointer, входящего в состав компонента Chart. Обработчик соответствующего события имеет вид:

procedure TForm1.CheckBox1Click(Sender: TObject); begin

if CheckBox1.Checked=true then Series1.Pointer.Visible:=true else Series1.Pointer.Visible:=false;

end;

6.  Запустить проект на компиляцию и выполнение.

7.  Задать значение для N = 6 и заполнить таблицу следующими значениями:

 

x

0

3

4

7

10

12

y

0

14

-4

10

12

7

8.    После нажатия на кнопку Построить отобразится графическая зависимость исходных данных. При изменении состояния переключателя Точки график имеет вид "линия с точкой" как показано на рис. 6.3.

 

 

 

 

 

 

 

 

 

 

Рис. 6.3. Результат выполнения программы для контрольного примера 6.2

 

Контрольный пример 6.3

Построить круговую диаграмму реализации следующей продукции: гречка - 20%, пшено - 35%, рис - 45%. Использовать компонент типа T PieSeries  (круговая диаграмма).

Решение.

1.  Открыть новый проект Delphi: File New Application .

2.    На форме расположить следующие компоненты: три компонента Edit, три компонента Label, компонент Chart, компонент Button. В качестве типа графика выбрать Pie.

Для решения задачи запишем обработчик событий Button1.Click, щелкнув на компоненте Button1 (кнопка Построить) два раза левой кнопкой мыши. Текст соответствующей процедуры имеет вид:

procedure TForm1.Button1Click(Sender: TObject); var a,b,c:real;

begin a:=strtofloat(edit1.Text); b:=strtofloat(edit2.Text); c:=strtofloat(edit3.Text);

With Series1 do  // with – оператор присоединения (with

<переменная> do   <оператор>) Begin

Clear ;

AddPie(  a, ‘гречка’ , clRed ) ; AddPie(  b, 'пшено',  clyellow ) ; AddPie(  c, 'рис', clGreen ) ;


end;

Контрольный пример 6.4

Построить график функции вводятся с клавиатуры.

Решение.


 

r = sin kj


 

в полярной системе координат  k  и  j


 

1.  Открыть новый проект Delphi: File New Application .

2.    На  форме  расположить  следующие  компоненты:  четыре  компонента Edit,

четыре  компонента  Label,  (график  рисуется  на  форме,  перерисовывается при

изменении параметра n в Edit1 (рис. 6.4)).

procedure TForm1.FormPaint(Sender: TObject); const

XScale = 200;         // масштаб по горизонтали XShift = XScale;      // сдвиг по горизонтали YScale = 200;                // масштаб по вертикали YShift = YScale;             // сдвиг по вертикали

ER = 2;               // радиус круга

var

n, i, X, Y: Integer;

r, fi, fi_0, fi_n, h, k: Real; begin

try

n  :=  StrToInt(Edit1.Text); k := StrToFloat(Edit4.Text);

fi_0 := StrToFloat(Edit2.Text); fi_n := StrToFloat(Edit3.Text);

h := Abs(fi_n - fi_0) / n;          // шаг аргумента

with Canvas do begin

Pen.Color := clNavy;              // цвет карандаша

Brush. Color := clLime;            // цвет заливки

end;

for i := 0 to n do begin

fi := fi_0 + i * h;              // расчет текущего значения аргументаr := Sin(k * fi);     // расчет текущего значения функции

X := Round(XScale * r * Cos(fi) + XShift);      

//преобразование

Y := Round(YScale * r * Sin(fi) + YShift);

//координат

Canvas.Ellipse(X - ER, Y - ER, X + ER, Y + ER);    

//рисуем эллипс (в нашем случае круг) end;

except

on e: EConvertError do

MessageDlg('Нужно вводить числа', mtError, [mbOK], 0);

// обработка ошибки ввода числа

else

raise;


end; end;

При изменении пользователем параметра n в компоненте Edit1

перерисовывается.

 procedure TForm1.Edit1Change(Sender: TObject);

 begin

Invalidate;          // перерисовка формы

end;

 

procedure TForm1.Edit4Change(Sender: TObject); begin

Caption := Format('График функции  r=Sin( kj )',

 [Edit4.Text]);

Edit1Change(Self); end;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 6.4. Результат выполнения программы для контрольного примера 6.3

                 6.3. Контрольные вопросы

 

1.  С какой целью применяется компонент Chart?

2.  Можно ли в Object Inspector устанавливать свойства отображения осей?

3.    Можно ли на форме располагать два компонента Chart? Если нет то почему?

4.  Разрешается ли во выполнении программы изменять тип диаграммы?

5.    Какие параметры задаются на панели Legend в Editing Chart и какие параметры графика можно редактировать с помощью нее?

                 Варианты заданий

Вариант 1

Задание 1. Построить на одном графике функции f1  = ex и f2 = lnx f2  = ln(x)

на интервале [0,1;1]. Шаг h = 0.01.

Задание   2.   В   полярной   системе   координат   построить   график спирали

Архимеда

Вариант 2

Задание 1. Построить на одном графике функции f1   =  x3 и  f2 = |x|  на интервале

[-10, 10].

Задание 2. В полярной системе координат построить график улитки  Паскаля

r = 2a cosj .

Вариант 3

 

Задание  1.  Построить  на  одном  графике  три    функции: f1  = x,  f2  = x2,   f3 = x3

  на интервале [-20, 20] .

Задание   2.   В   полярной   системе   координат   построить   график спирали

Галилея

Вариант 4

Задание 1. Построить на одном графике две функции, заданные таблично.

Значения функций задаются с помощью компонента StringGrid.

Задание  2.  В  полярной  системе  координат  построить  график   строфоиды

  для a = 1.

 

Вариант 5

Задание 1. Построить график  функции y = ax2 + bx + c. Значения параметров

a, b, с задаются с клавиатуры (использовать компонент Edit).

Задание  2.  В  полярной  системе  координат  построить  график   кардиоиды

r = 2a(1- cosj ) для a = 3

Вариант 6

Задание    1.   Построить   зависимость . Предусмотреть  возможность  задания  параметров I 0 и a. Результат представить в    графическом виде (компонент Chart) и табличном (компонент StringGrid).

Задание 2. В полярной системе координат построить график логарифмической спирали  для a = 2.

Вариант 7

Задание 1. Построить круговую диаграмму реализации следующей продукции: кофе – 20%, чай – 35%, напитки – 45%. Использовать компонент типа TPieSeries (круговая диаграмма).

Задание 2. В полярной системе координат построить график спирали  «жезл»

   для a = 4 .

                                                       Вариант 8

Задание 1. Построить графики реализации книг в двух книжных магазинах по месяцам. Использовать компонент типа TPieSeries (круговая диаграмма).

Задание 2. В полярной системе координат построить график

гиперболической спирали