Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Posibnik_Pascal

.pdf
Скачиваний:
75
Добавлен:
17.02.2016
Размер:
1.49 Mб
Скачать

NumPoints – це кількість точок ламаної, а PolyPoints – це змінна, тип якої найчастіше є масивом записів. Кожний запис складається із двох полів: перше поле задає х- координату, а друге – у-координату чергової точки ламаної.

9.FillPoly(NumPoints:word, var PolyPoints) – процедура зображає зафарбований багатокутник.

 

Зображення дуг, кіл, еліпсів

 

 

 

 

Перед зображенням деяких із наступних фігур треба встановити стиль лінії чи

зафарбування.

 

A

 

10.

Circle(x, y:integer; R:word) – процедура зображає коло з центром

 

 

B

 

 

 

у точці (x, y) і радіусом R.

 

 

11.

Arc(x, y:integer; φ12, R:word) – процедура зображає дугу кола з

φ2

φ1

 

 

центром у точці (x, y) і радіусом R від кута φ1 до кута φ2. Кути

 

 

 

рахуються від додатного напрямку осі ОХ проти годинникової

O(x,

X

 

стрілки та вимірюються в градусах. Якщо φ1 = 0, а φ2 = 359, то

 

 

 

 

буде зображене все коло. На малюнку 2 зображена відповідна

 

 

 

 

дуга АВ, кут ХОА дорівнює φ1, а кут ХОВ дорівнює φ2, ОА = R.

Мал. 2

 

12.

PieSlice(x, y:integer; φ12, R:word) – процедура зображає

 

 

 

 

зафарбований сектор круга з центром у точці (x, y) і радіусом R від кута φ1 до кута φ2. На малюнку 2 це був би сектор ОАВ. Кути рахуються від додатного напрямку осі ОХ проти

годинникової стрілки та вимірюються в градусах. Якщо φ1

= 0 і φ2

= 359, то буде

зафарбований круг.

 

 

 

 

 

 

 

 

13. Ellipse(x, y:integer; φ1,

φ2:word,

a, b:word)

 

C

 

 

 

процедура зображає дугу еліпса з центром у точці

 

 

M

 

 

 

 

 

(x, y) від кута φ1 до кута φ2, a, b – горизонтальна і

 

 

 

 

 

вертикальна

осі еліпса.

Кути

рахуються

від

N

φ2

φ1

 

 

додатного напрямку осі ОХ проти годинникової

A

 

 

X

 

 

 

стрілки та вимірюються в градусах. Якщо φ1 = 0 і

 

O

B

 

φ2 = 359, то буде зображений еліпс. На малюнку 3

 

 

 

 

 

зображена дуга MCN, О(х, у) – центр еліпса, кут

 

 

 

 

 

XOM дорівнює φ1, кут XON дорівнює φ2, АВ = а,

 

D

 

 

 

CD = b.

 

 

 

 

 

 

 

 

 

 

 

 

 

Мал. 3

 

 

14. FillEllipse(x,

y:integer; a,

b:word) – процедура

 

 

 

зображає зафарбований еліпс з центром у точці (x, y), a, b – горизонтальна і вертикальна осі еліпса.

15.Sector(x, y:integer; φ1, φ2:word, a, b:word) – процедура зображає зафарбований сектор еліпса з центром у точці (x, y) від кута φ1 до кута φ2, a, b – горизонтальна і вертикальна осі еліпса. На малюнку 3 MОN – сектор еліпса.

Зафарбування області

16.FloodFill(x, y:integer; color:word) – процедура зафарбовує замкнену область попередньо встановленим стилем, (х, у) – деяка точка, color – колір межі замкненої області. Якщо точка (х, у) розташована всередині області, то зафарбовується вся внутрішня частина області, а якщо точка (х, у) знаходиться за межами області, то зафарбовується вся зовнішня частина області.

Робота з текстом

Відображення тексту в графічному режимі дещо відмінне від текстового режиму. Основна відмінність полягає в тому, що всі дії виконуються тільки із рядковими константами і змінними. Будь-яка числова інформація повинна попередньо перетворюватися в символьну. Друга відмінність – можливість використовувати різні шрифти.

Файли шрифтів мають розширення CHR. Після ініціалізації графічного режиму за замовчуванням встановлюється шрифт DefaultFont. Для формування кожного символу шрифту використовується матриця розміром 8х8. Стандартний набір шрифтів наведений у наступній таблиці. При бажанні користувач може підключити свій шрифт.

141

Файл

Шрифт

№ шрифту

Назва шрифту

 

DefaultFont

0

Матричний шрифт 8х8

 

(за замовчуванням)

 

 

 

trip.chr

TriplexFont

1

Напівжирний шрифт

litt.chr

SmallFont

2

Тонкий шрифт

sans.chr

SansSerifFont

3

Рубаний шрифт

goth.chr

GothicFont

4

Готичний шрифт

Можливість використовувати текст при створенні графічних зображень дозволяє робити написи чи підписи на малюнках. Основними процедурами для виведення тексту є наступні дві.

1.OutTextXY(x, y:integer; Text:string) – процедура виводить значення параметра Text, починаючи з точки (х, у).

2.OutText(Text:string) – процедура виводить значення параметра Text, починаючи з поточного положення вказівника СР.

Уцих процедурах параметр Text – це конкретний рядок або рядкова змінна.

При виведенні числових даних їх спочатку треба перетворити в рядок. Наступний фрагмент програми демонструє як це зробити.

Min := 6.234;

{дійсне число}

Str(Min:6:3, SMin);

{перетворення числа Min у рядок SMin }

OutTextXY(50, 70, ‘Мінімум = ‘ + SMin); {тут + означає конкатенацію}

3.SetTextStyle(Font:word; Direction:word; CharSize:word) – процедура дозволяє встановити шрифт. Параметр Font задає шрифт (№ шрифту) із вищенаведеної таблиці, Direction – орієнтацію (горизонтальна, вертикальна) і напрямок виведення тексту, CharSize – розмір символів. Дана процедура зазвичай використовується перед викликом попередніх двох

процедур.

Щоб взнати розмір символу або рядка по вертикалі та по горизонталі, можна скористатися функціями

TextHeight(Text:string):word;

TextWidth(Text:string):word;

які повертають відповідно висоту і ширину рядків Text в пікселах для поточних значень шрифту і розміру. У штрихових шрифтах розміри букв різні, і, значить, довжина і висота рядка в пікселах залежить не тільки від кількості букв у ньому, але і від їх написання.

Існує ще один спосіб встановлення потрібної величини шрифту. Для цього треба скористатися процедурою

SetUserCharSize(MultX, DivX, MultY, DivY:word).

Першими двома параметрами задається розмір по горизонталі, наступними – по вертикалі. Якщо прийняти за 1 значення ширини символу стандартного шрифту, то відношення MultX / DivX задає ширину символу, а MultY / DivY – висоту. Процедуру SetUserCharSize можна викликати до або після процедури SetTextStyle.

Виведенні рядків на екран можна розташовувати відносно поточного положення вказівника СР. Це виконується з допомогою процедури

SetTextJustify(Horiz, Vert :word).

Позиція вказівника СР може бути для рядків, що будуть виводитися, лівою чи правою межею або центром. Крім того, кожних відображуваний символ може бути розміщений у рядку вище позиції вказівника, нижче або по центру. Розташування рядків і символів на екрані задається за допомогою параметрів Horiz і Vert, можливі значення яких наведені в наступній таблиці.

142

Horiz

Значення

Призначення

LeftText

0

Оголосити поточну позицію вказівника СР лівою межею рядка

CenterText

1

Центрувати рядок відносно поточної позиції вказівника СР

RightText

2

Оголосити поточну позицію вказівника СР правою межею рядка

Vert

Значення

Призначення

BottomText

0

Розташовувати символи нижче позиції вказівника СР

CenterText

1

Центрувати символи по вертикалі відносно позиції вказівника СР

TopText

2

Розташовувати символи вище позиції вказівника СР

Анімаційні ефекти

Анімаційні програми містять рухомі об’єкти. У графічному режимі теж можна створювати ефекти руху. Можна виділити три способи створення ефектів руху.

1.Намалювати графічний об’єкт, а потім очистити екран. Ці дії повторювати стільки разів, скільки потрібно. При цьому графічний об’єкт кожний раз треба зображати на екрані з невеликим зміщення відносно попереднього його виведення на екран.

2.Запам’ятати невеликий фрагмент графічного зображення у буфері. Потім виводити його на екран із буфера кожний раз із невеликим зміщенням. Попереднє виведення із буфера буде перекриватися новим виведенням.

3.Використовувати відео сторінки.

Найкращим і найскладнішим є третій спосіб, а найгіршим – перший. Розглянемо другий спосіб.

При роботі з буфером важливо знати розмір пам’яті, яка необхідна для зберігання графічного фрагменту. Функція

ImageSize(x1, y1, x2, y2 : integer) : word

повертає розмір пам’яті в байтах, яка необхідна для зберігання прямокутної ділянки графічного зображення. Точки (х1, у1) і (х2, у2) є відповідно верхнім лівим і нижнім правим кутами прямокутної ділянки. Зазвичай така ділянка невеликих розмірів і вона повинна містити об’єкт, який будемо рухати. Оскільки для зберігання ділянки зручно використати динамічну пам’ять, то результат функції ImageSize треба використати в якості параметра процедури GetMem.

Збереження образу прямокутного фрагмента в пам’яті виконується процедурою

GetImage(x1, y1, x2, y2 : integer; var BitMap),

де x1, y1, x2, y2 – координати прямокутної ділянки, BitMap – нетипізований параметр, який повинен бути більшим або рівним 6 плюс розмір пам’яті, відведеної для області екрану. Перші два слова параметра BitMap визначають ширину і висоту області екрану, третє слово зарезервоване. Решта параметра BitMap використовується для зберігання двійкового образу прямокутної ділянки. Параметру BitMap співставляється динамічна змінна, для якої виділена пам’ять процедурою GetMem.

Процедура

PutImage(x, y : integer; var BitMap; BitBit : word)

виводить із буфера на екран копію прямокутної ділянки. Точка (х, у) визначає верхній лівий кут для виведення копії, параметр BitMap містить двійковий образ копії, а BitBit визначає спосіб взаємодії копії зображення із зображенням, що вже є на екрані. Взаємодія здійснюється за допомогою логічних операцій, які застосовуються до кожного біта копії та оригіналу зображення. Значенням параметра BitBit є одна із таких констант:

NormalPut = 0;

{заміна наявного зображення на копію}

XorPut = 1;

{операція виключного «або»}

OrPut = 2;

{об’єднувальне «або»}

AndPut = 3;

{логічне «і»}

NotPut = 4;

{інверсія зображення}

 

143

Логічні операції над зображенням дають такі результати. У випадку використання константи NormalPut зображення на екрані знищується і на цьому місці відображається копія із пам’яті. У разі вибору константи NotPut буде виведено копію зображення в інверсному коді – біти 0 заміняються на 1 та навпаки. Використання константи XorPut дає можливість видаляти зображення у тих точках екрану, де розміщено його оригінал. Якщо цю операцію застосувати двічі до тих самих координат, то зображення не зміниться.

Приклади

1. Програма демонструє використання основних графічних примітивів.

Program Example1;

uses Graph, Crt; {підключення модулів} const

{створення власного стилю зафарбування}

Zakraska : FillPatternType = ($00, $90, $bb, $ef, $12, $34, $9a, $cd);

{координати зірки – замкнутого багатокутника}

Zirka : array[1..11] of PointType = ((x:200; y:200), (x:300; y:200), (x:350; y:100), (x:400; y:200), (x:500; y:200), (x:440; y:250), (x:480; y:320),

(x:350; y:270), (x:220; y:320), (x:260; y:250), (x:200; y:200)); Var GrDriver, GrMode: integer; {змінні графічного драйвера і режиму}

i : integer;

begin

 

 

randomize;

{ініціалізація генератора випадкових чисел}

GrDriver := Detect;

 

{визначити драйвер автоматично}

InitGraph(GrDriver, GrMode, ‘c\tp\bgi’);

{ініціалізація графічного режиму}

if GraphResult<>0 then

{ініціалізація неуспішна}

 

begin

 

 

writeln(‘Не ініціалізований графічний режим‘); halt(1);

 

end;

 

{-----------------------------------

ініціалізація успішна----------------------------------------------------

}

{-----------------------------

РІЗНОКОЛЬОРОВА РАМКА-----------------------------------------------

}

 

SetBkColor(14);

{вибір кольору фону}

 

SetLineStyle(CenterLn, 0, ThickWidth);

{вибір стилю лінії}

 

for i := 1 to 10 do

 

 

begin

 

 

SetColor(random(15));

{випадковий вибір кольору}

 

Rectangle(10+i, 10+i, 630 – i, 470 – i);

{прямокутник}

 

end;

 

 

delay(2000);

{затримка}

{-------------------------------------------

КІЛЬЦЕ------------------------------------------------------------

}

 

ClearDevice;

 

 

SetBkColor(11);

{вибір кольору фону}

 

SetLineStyle(0, 0, 1);

{вибір стилю лінії}

 

for i := 0 to 25 do

 

 

begin

 

 

SetColor(random(15));

{випадковий вибір кольору}

 

Circle(300, 200, 50 – i);

{коло}

 

end;

 

 

delay(2000);

{затримка}

{-------------------------------------------

ПАРАЛЕЛЕПІПЕД----------------------------------------------

}

 

ClearDevice;

 

 

SetBkColor(10);

{вибір кольору фону}

 

SetColor(5);

{вибір кольору лінії}

144

SetLineStyle(0, 0, 3);

 

{вибір стилю лінії}

SetFillPattern(Zakraska, 12);

{вибір стилю зафарбування}

Bar3D(200, 300, 400, 400, 100, true);

{паралелепіпед}

delay(2000);

 

{затримка}

{-------------------------------------------

ЗАФАРБОВАНА ЗІРКА---------------------------------------

}

ClearDevice;

 

 

 

SetBkColor(14);

 

{вибір кольору фону}

SetColor(12);

 

{вибір кольору лінії}

DrawPoly(11, Zirka);

 

{зірка}

SetFillStyle(8, 1);

 

{вибір стилю зафарбування}

FloodFill(50, 50, 12);

 

{зафарбування зірки}

delay(2000);

 

{затримка}

{-------------------------------------------

ВИВЕДЕННЯ ТЕКСТУ----------------------------------------

}

ClearDevice;

 

 

 

SetBkColor(14);

 

{вибір кольору фону}

SetColor(12);

 

{вибір кольору}

for i := 0 to 5 do

 

 

 

begin

 

 

 

SetTextStyle(0, 0, i);

{вибір стилю тексту}

OutTextXY(50, 50*(i+1), ‘Горизонталь‘);

{виведення тексту}

end;

 

 

 

SetTextStyle(0, 1, 2);

 

{вибір стилю тексту}

OutTextXY(400, 200, ‘Вертикаль‘);

{виведення тексту}

Readln;

 

{затримка графічного зображення}

CloseGraph;

{закриття графічного режиму}

end.

 

 

 

2. Програма демонструє рух кола по екрану з використанням очищення екрану.

Program Example2;

 

 

 

uses Graph;

{підключення модулів}

 

Var

GrDriver, GrMode: integer;

{змінні графічного драйвера і режиму}

begin

i : integer;

 

 

 

GrDriver := Detect;

 

{визначити драйвер автоматично}

 

 

 

InitGraph(GrDriver, GrMode, ‘c:\bp\bgi’);

{ініціалізація

графічного

режиму}

 

 

 

 

if GraphResult<>0 then

{ініціалізація неуспішна}

 

 

begin

 

 

 

 

writeln(‘Не ініціалізований графічний режим‘); halt(1);

 

 

end;

 

 

 

{-----------------------------------

ініціалізація успішна

----------------------------------------------------

}

 

SetBkColor(14);

 

{вибір кольору фону}

 

 

SetColor(12);

 

{вибір кольору}

 

 

SetLineStyle(0, 0, 3);

 

{вибір стилю лінії}

 

 

for i := 1 to 200 do

 

 

 

 

begin

 

 

 

 

Circle(100+i, 100+i, 50);

 

{коло}

 

 

ClearDevice;

 

{очищення екрану}

 

end;

 

Readln;

{затримка графічного зображення}

CloseGraph;

{закриття графічного режиму}

end.

 

145

3. Програма імітує рух місяця на зоряному небі. Коли зображення місяця сягає межі екрану, напрям його руху змінюється..[8]

Program Example3;

 

 

 

 

 

uses

Graph, Crt;

 

{підключення модулів}

 

Var

GrDriver, GrMode : integer;

{змінні графічного драйвера і режиму}

 

 

x, y,

 

 

{координати об’єкта під час руху}

 

 

dx, dy : integer;

{приріст координат}

 

 

prt : pointer;

{вказівник на область пам’яті, де зберігатиметься зображення}

 

size : word;

{розмір пам’яті, необхідної для збереження зображення}

 

 

leftX, leftY,

 

{координати лівого верхнього і }

 

 

rightX, rightY : integer;

{правого нижнього кута прямокутника,}

 

 

i : integer;

 

 

{який містить зображення}

 

 

 

 

{параметр циклу}

 

{----------------------------------

 

 

зображення зоряного неба----------------------------------------------

 

}

procedure Sky;

 

 

 

 

 

 

begin

randomize;

 

 

{ініціалізація генератора випадкових чисел}

 

 

 

 

SetBkColor(1);

 

 

{вибір кольору фону}

 

 

SetColor(14);

 

 

 

{вибір кольору}

 

 

SetLineStyle(0, 0, 1);

 

 

{вибір стилю лінії}

 

 

for i := 1 to 200 do

 

 

 

 

end;

Circle(random(640), random(480), 1);

{коло}

 

 

 

 

 

 

 

 

{----------------------------------

 

 

зображення місяця на небі----------------------------------------------

 

}

procedure Moon;

 

 

 

 

 

begin

SetColor(14);

 

 

 

{вибір кольору}

 

 

 

 

 

 

 

Arc(450, 100, 270, 90, 50);

 

 

{дуга кола}

 

 

Arc(390, 100, 320, 40, 80);

 

 

 

 

 

SetFillStyle(1, 14);

 

 

{вибір стилю зафарбування}

 

end;

FloodFill(480, 100, 14);

 

 

{зафарбування місяця}

 

 

 

 

 

 

 

 

{----------------------------

 

 

збереження зображення у динамічній пам’яті---------------------------

}

procedure SaveClip;

 

 

 

 

 

begin

leftX := 445; leftY := 45;

 

{координати прямокутника,}

 

 

 

 

 

rightX := 505;

rightY := 155;

 

{який містить місяць}

 

 

size := ImageSize(leftX, leftY, rightX, rightY);

 

 

 

GetMem(prt, size);

 

{виділити пам’ять}

 

 

GetImage(leftX, leftY, rightX, rightY, prt^);

{зберегти зображення у пам’яті}

 

end;

PutImage(leftX, leftY, prt^, xorput);

 

{приховати зображення}

 

 

 

 

 

 

 

 

{--------------------------------------------

 

 

рух місяця-------------------------------------------------------

 

 

}

procedure Move;

 

 

 

 

 

begin

x := leftX;

y := lefty;

 

{стартові координати}

 

 

 

 

 

dx := 10;

dy := 10;

 

{приріст координат}

 

 

repeat

 

 

 

 

 

 

 

x := x+dx;

 

{зміна координат місяця}

 

 

y := y+dy;

 

 

 

 

 

PutImage(x, y, prt^, xorput);

{зобразити фігуру в нових координатах}

 

delay(2000);

 

{затримати рух}

 

146

PutImage(x, y, prt^, xorput);

{сховати фігуру в старих координатах}

if (x>640) or (x<0) then

{якщо фігура сягнула межі екрану,}

dx := -dx;

{змінити напрям її руху}

 

else

 

 

if (y<0) or (y>480) then dy := -dy;

until

keypressed;

 

end;

 

 

{--------------------------------------------

основна програма

-----------------------------------------------}

begin

 

 

GrDriver := Detect;

{визначити драйвер автоматично}

InitGraph(GrDriver, GrMode, ‘c:\tp\bgi’);

{ініціалізація графічного режиму}

Sky;

 

 

Moon;

 

SaveClip;

 

Move;

 

end.

 

 

4.Побудувати графік функції у = |sin x| + cos|x|. [8]

Для зображення графіка функції треба перевести координати його точок у екранні

точки. Щоб графік мав звичний вигляд на екрані, треба для кожної осі координат підбирати відповідний масштаб. Область визначення даної функції - це вся вісь абсцис, а область значень - відрізок [-2; 2]. Якби за одиницю масштабу на осі ординат вибрати один піксел, то відрізок [-2; 2] мав би довжину 5 пікселів, а, отже, графік фактично мав би вигляд прямої. Дуже рідко вибирають за екранну масштабну одиницю 1 піксел. Зазвичай – це декілька пік селів і часто це число кратне 10. Назвемо екранну масштабну одиницю просто масштабом. Зауважимо також, що для кожної із осей координат інколи масштаб вибирають різний.

Система координат графіка відрізняється від системи координат екрану. Загалом, початок першої системи повинен знаходитися в центрі екрану та вісь ординат першої системи має протилежний напрям до осі ординат екрану. Якщо екран складається із 640х480 точок, то початок системи координат графіка буде в точці (320, 240).

При побудові графіка функції у = f(x) аргументу х надають можливих значень, обчислюють можливі у і отримують точки (х, у) графіка. На екрані точками є пари (х-екрану, у-екрану), причому 0 ≤ х-екрану < 640 і 0 ≤ у-екрану < 480 для екрану 640х480. Для побудови точки графіка на екрані спочатку надаємо значення координаті х-екрану із відповідного діапазону. Потім перераховуємо за формулою

х= (х-екрану - х-центру-екрану) / масштаб-осі-х,

хкоординату реального графіка. Далі для знайденого х обчислюємо у = f(x). Наостанок, переводимо у координату в екранний еквівалент за формулою

 

 

у-екрану = у-центру-екрану – масштаб-осі-у * у.

 

Знайдену точку (х-екрану, у-екрану) зображаємо на екрані.

 

Program Example4;

{ графік функції у = |sin x| + cos|x|}

 

uses

Graph, Crt;

 

 

Var

GrDriver, GrMode : integer;

 

 

scale : real;

{масштаб}

 

 

cx, cy : integer;

{координати центру екрану}

 

{--------------------------------

 

аналітична функція, графік якої будується---------------------------

}

function f(x : real) : real; begin

f := abs(sin(x))+cos(abs(x));

end;

147

{----------------------------------------

виведення осей координат----------------------------------------

}

procedure axes;

 

 

begin

SetColor(1);

 

 

 

 

 

 

Line(cx, 0, cx, GetMaxY);

{вісь У}

 

 

Line(0, cy, GetMaxY, cy);

{вісь Х}

 

 

{стрілки на осі Х}

 

 

Line(GetMaxX – 10, cy – 5, GetMaxX, cy);

Line(GetMaxX – 10, cy + 5, GetMaxX, cy);

{стрілки на осі У}

Line(cx, 0, cx – 5, 10);

Line(cx, 0, cx + 5, 10);

{написи на осях}

OutTextXY(GetMaxX – 10, cy + 20, ‘X’); OutTextXY(cx + 10, 10, ‘Y’);

end;

 

 

 

{----------------------------------------

 

розмітка осей координат------------------------------------------

}

procedure graduir;

 

 

var

i, j : real;

{позначки на осях}

 

begin

s : string[7];

{рядок для виведення позначки на осях}

SetColor(1);

 

 

 

 

 

 

j := 0;

{позначка ‘0’ в центрі координат}

 

 

{--------------------------

розмітити вісь Х-------------------------

}

{позначки у вигляді вертикальних рисок} repeat

i := cx+(-j)*scale;

Line(round(i), cy-5, round(i), cy+5);

if j<>0 then {не виводити повторно позначку ‘0’} begin

 

str(-j:6:2, s);

{перетворити числову позначку в текстову}

end;

OutTextXY(round(i)-10, cy+10, s);

{і відобразити її на екрані}

 

 

 

{зобразити позначки на горизонтальній осі}

 

i := cx+j*scale;

 

 

Line(round(i), cy-5, round(i), cy+5);

 

if j<>0

then

 

 

begin

str(j:6:2, s);

{перетворити число на рядок}

 

end;

OutTextXY(round(i)-10, cy+10, s);

 

 

 

 

j := j+pi;

 

 

until j = 8*pi;

 

{позначка вичерпано}

{--------------------------

розмітити вісь У-------------------------

}

j := 0;

 

 

 

repeat

 

 

 

i := cx - j*scale;

{розташування позначки на осі У}

Line(cx+3, round(i), cx-3, round(i));

 

if j<>0

then

 

 

begin

str(j:4:1, s);

{перетворення числа на рядок}

 

{вивести значення, відповідне позначці на вертикальній осі, у межах від 0 до 2}

148

OutTextXY(cx+15, round(i)-2, s);

end;

i := cy+j*scale;

Line(cx+3, round(i), cx-3, round(i)); if j<>0 then

begin

str(-j:4:1, s);

{перетворити число на рядок}

{вивести позначки на вертикальній осі в межах від -2 до 0}

OutTextXY(cx+15, round(i)-2, s); {і відобразити її на екрані}

end;

 

 

j := j+0.5;

{розмітити вертикальну вісь через кожні 0.5 ділень}

end;

until j = 2;

 

 

{діапазон позначок від -2 до 2}

 

 

 

 

 

{--------------------------------------------

 

 

побудова графіка-----------------------------------------------

}

procedure build_graph;

 

 

 

 

var

x0, y0, x1, y1 : integer;

{екранні координати кінців відрізка графіка}

begin

x : real;

 

 

 

 

for x0 := 0 to GetMaxX do

 

{вибір екранної абсциси}

 

 

 

begin

 

 

 

 

 

x := (x0-cx)/scale;

 

{обчислити х координату графіка}

 

y0 := round(cy – scale*f(x));

 

 

if x0>0 then

 

 

 

 

 

Line(x0, y0, x1, y1);

{зобразити відрізок графіка}

 

x1 := x0;

{зберегти координати кінця попереднього відрізка}

 

y1 := y0;

 

 

 

 

end;

end;

 

 

 

 

 

 

 

 

 

{--------------------------------------------

 

 

основна програма----------------------------------------------

}

begin

GrDriver := Detect;

 

 

 

{визначити драйвер автоматично}

 

 

 

 

 

InitGraph(GrDriver, GrMode, ‘c:\tp\bgi’);

{ініціалізація графічного режиму}

 

cx := GetMaxX div 2;

 

{визначити координати центру екрану}

 

cy := GetMaxY div 2;

 

 

 

 

SetBkColor(15);

 

 

{вибір кольору фону}

 

SetColor(1);

 

 

{вибір кольору}

 

OutText(‘ input scale (20 … 100):’);

 

 

gotoxy(27, 1);

 

 

 

 

 

read(scale);

 

 

{ввести масштаб}

 

ClearDevice;

 

 

{очистити екран}

 

axes;

 

 

{зобразити осі координат}

 

graduir;

 

 

{розмітити осі}

 

OutTextXY(10, 30, ‘y=|sin(x)| + cos|x|’); {вивести напис}

end.

build_graph;

 

 

{зобразити графік}

 

 

 

 

 

149

Завдання для виконання

Основний рівень

1.Написати програму зображення малюнка на екрані.

2.Написати програму побудови графіка функції:

1. y = x 2 x 2 ,

x [2, 2] .

2.y = 6x(x2 +13) .

3.y = 1+2xx 2 .

4.y = x3 +3x2 + 2 .

5. y = x ln2 x ,

x > 0 .

6.y = 4x 2 x3 .

7.

y =

x 2

.

x 2

+3

 

 

 

8.y = x 4 2x3 + 3.

9.

y = x ln x,

x > 0

 

1

 

 

 

10.

y = x

Пі

.

 

 

11.

y = x2 ex .

 

12.

y = 8cos2 (

x

12) .

 

 

2

 

13. y = 5x arctg( x 2 ) + 2 . 4

14.y = {x 2 4}.

15.y = [x 2 4].

Підвищений рівень

1. Створити програму зображення фігури.

Вид фігури

Колір фону

Колір ліній

Колір

п/п

штриховки

 

 

 

 

 

 

 

 

 

 

 

1

 

 

1.

жовтий

 

 

 

 

 

фіолетовий

чорний

 

1.

 

2

 

 

 

2.

синій

 

 

 

 

 

 

 

 

 

 

 

1

 

 

1.

світло-сірий

 

2

блакитний

червоний

 

2.

 

 

 

 

2.

білий

 

 

 

 

 

 

 

 

 

 

150

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