Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_del_2.doc
Скачиваний:
1
Добавлен:
25.11.2019
Размер:
206.34 Кб
Скачать

Лабораторна робота №2 Тема: Побудова графіка функції.

Підготовка до лабораторної роботи

  1. По рекомендованій літературі вивчити графічні засоби Delphi|.

  2. Розробити алгоритми і скласти програми вирішення завдання.

Завдання до роботи

Створити програму виведення тексту і малювання у формі графіків функцій. Варіанти завдань приведені в таблиці 1.

Таблиця1. Варіанти завдань

Графік функції у(x)

Графік функції у(x)

Функція

x початкове

x кінцеве

Функція

x початкове

x кінцеве

1

sin(x)

0

6

7

sin(x)*exp(x)

0

6

2

cos(x)

0

6

8

cos(x)*exp(x)

0

6

3

sin(x)+sin(2x)

0

6

9

sin(x)*exp(-х)

0

6

4

sin(x) -sin(2x)

0

6

10

cos(x)*exp(-х)

0

6

5

sin(x)+cos(2x)

0

6

11

exp(x)

0

2

6

sin(x) -cos(2x)

0

6

12

exp(-х)

0

2

Приклад виконання

Створити програму малювання у формі графіка функції з пояснюючим текстом. Функція - синус. Програма передбачає три варіанти малювання графіка:

  1. Крапками за допомогою властивості Pixels (графік в лівій верхній частині вікна).

  2. Лініями з використанням методу LineTo (графік в нижній лівій частині вікна).

  3. З використанням компоненту TChart (у правій частині вікна).

На мал. 1 представлено вікно форми на початку конструювання. У формі розміщені наступні компоненти:

  1. Кнопка BitBtn1 (Графіка) з сторінки Additional. Вона викликає побудову графіків у вікні.

  2. Кнопка BitBtn2 (Закрити) з сторінки Additional. Дублює кнопку закриття вікна Windows.

  3. TChart1. Компонент побудови графіків з сторінки Additional.

Мал.1. Вікно форми на етапі конструювання

Для підготовки TChart до роботи використовується вбудований редактор властивостей цього компоненту, що викликається подвійним клацанням по компоненту. На мал. 2 зліва представлено вікно цього редактора. В ньому на закладці Series потрібно натисненням кнопки Add добавити принаймні одну серію даних для побудови графіка. Решту параметрів компоненту можна залишити без зміни. При цьому виникає вікно для вибору способу відображення графіка, показане на малюнку справа.

Мал.2. Вибір серії для TChart

Після вибору виду графіка вікно редактора набуває виду мал.3, а біля компоненту TChart у вікні форми відображається зразковий вид представлення графіка (див. мал. 4 зліва). За умовчанням в правій частині компоненту відображається легенда - стовпчик з обчисленими значеннями функції. За бажанням легенду можна видалити. Для цього слід знову викликати редактор властивостей TChart, на вкладці Legend якого вимкнути прапорець Visible. Вікно форми прийме вигляд, показаний на малюнку справа.

Мал.3. Вікно редактора TChart після вибору серії

Мал.4. Вікно форми після вибору серії

Лістинг модуля форми

unit L2new;

interface

uses

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

Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, Buttons;

type

TForm1 = class(TForm)

BitBtn1: TBitBtn;

BitBtn2: TBitBtn;

Chart1: TChart;

Series1: TLineSeries;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

// функція, графік якої необхідно побудувати

Function f(x:real):real;

begin

f:=sin(x);

end;

// процедура побудови графіків

procedure TForm1.BitBtn1Click(Sender: TObject);

var

wr,hr:integer; //ширина і висота робочої області

xmax,xmin,ymax,ymin,dx:real;//максимальні і мінімальні знрчення аргумента,

//функції та крок по х

mx,my:real; // коефіціенти масштабу по осях х та у

x,y:real;//аргумент та значення функції в точці

fx1,fx2:integer;//координати по х вісі х

fy11,fy12:integer;//координати по y початку і кінця 1-ї робочої області

fy21,fy22:integer;//координати по y початку і кінця 2-ї робочої області

fy01,fy02:integer; //координата у початку осі х для 1-ї та 2-ї робочої області

begin

wr:=Chart1.Left-10;//обчислення ширини робочої області

hr:=BitBtn1.Top-10; // обчислення висоти робочої області

// задавання фластивостец методу Font

with Form1.Canvas.Font do

Begin

Name:='Arial';

Size:=12;

Style:=[fsItalic,fsBold,fsUnderLine];

Color:=clBlue;

end;

//Вивід на екран текстового повідомлення в 1-щу область

Canvas.TextOut(10,10,'Графік функції з Pixels');

fx1:=10;// відстань від лівого краю форми до осі у

fx2:=wr; //координата по х кінця осі х

fy22:=hr; //координата по у кінця осі у для 2-ї робочої області

fy11:=10+Canvas.Font.Size+10; // координата по у початку осі у для 1-ї області

fy12:=Round((hr-10-20)/2); // координата по у кінця осі у для 1-ї області

// вивід на екран осі у для 1-ї області синім кольором

Canvas.MoveTo(fx1,fy11);

Canvas.Pen.Color:=clBlue;

Canvas.LineTo(fx1,fy12);

fy01:=Round((fy12-fy11)/2+fy11);//координата у початку осі х для 1-ї області

// вивід на екран осі х для 1-ї області

Canvas.MoveTo(fx1,fy01);

Canvas.LineTo(fx2,fy01);

//Вивід на екран текстового повідомлення в 2-гу область

Canvas.TextOut(10,fy12+20,'Графік функції з LineTo');

fy21:=fy12+20+Canvas.Font.Size+10;//координати по y початку осі у для 2-ї обл.

// вивід на екран осі у для 2-ї області червоним кольором

Canvas.MoveTo(fx1,fy21);

Canvas.Pen.Color:=clRed;

Canvas.LineTo(fx1,hr);

fy02:=Round((fy22-fy21)/2+fy21);//координата у початку осі х для 2-ї області

// вивід на екран осі х для 2-ї області

Canvas.MoveTo(fx1,fy02);

Canvas.LineTo(fx2,fy02);

// Побудова графіків функції

xmin:=0; // мінімальне значення аргумента

xmax:=6*pi; // максимальне значення аргумента

dx:=xmax/100;// крок по осі х

mx:=(fx2-fx1)/(xmax-xmin); // масштаб по осі х

ymin:=f(xmin);

ymax:=f(xmin);

x:=xmin;

repeat //знаходження максимального і мінімального значення функції

y:=f(x);

if y<ymin then ymin:=y;

if y>ymax then ymax:=y;

x:=x+dx;

until (x>=xmax);

// знаходження масштабу для осі у

if (ymin<0) and (ymax<0) then my:=(fy12-fy11)/(2*(ymax-ymin))

else

if abs(ymin)>ymax then my:=(fy12-fy11)/(2*abs(ymin))

else my:=(fy12-fy11)/(2*abs(ymax));

// Побудова графіку функції з Pixels

x:=xmin;

repeat

y:=f(x);

Canvas.Pixels[fx1+Round(x*mx), fy01-Round(y*my)]:=clblack;

x:=x+dx;

until (x>=xmax);

// Графік функції з LineTo

x:=xmin;

Canvas.Pen.Color:=clGreen;

Canvas.MoveTo(fx1,round(fy02-f(xmin)*my));

x:=x+dx;

repeat

y:=f(x);

Canvas.LineTo(fx1+Round(x*mx), fy02-Round(y*my));

x:=x+dx;

until (x>=xmax);

// Графік в компоненті Chart

x:=xmin;

repeat

y:=f(x);

Chart1.Series[0].AddXY(x,y,'',clred);

x:=x+dx;

until (x>=xmax);

end;

end.

На мал.5 представлено вікно працюючого проекту. Воно виникає при натисненні кнопки Графік. У вікні видно графіки однієї і тієї ж функції, побудовані різними способами:

  1. З використанням властивості Pixels (вгорі зліва).

  2. З використанням методу LineTo (внизу зліва).

  3. За допомогою компоненту TChart (справа).

Мал.5. Вікно працюючого працюючого проекту

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]