Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Процедури для оформлення та виведення тексту



Для відображення інформації в середовищі АЛГО виділено робоче поле висотою 2000 точок. Горизонтальний розмір цього поля дорівнює роздільній здатності монітора по горизонталі. Для зручності надалі називатимемо робоче поле аркушем. Частину аркуша видно у вікні виведення. За допомогою вертикального та горизонтального повзунків можна переглядати весь аркуш. Виведення текстової інформації та побудова зображень здійснюється на аркуші, а не безпосередньо на екрані монітора.

Для побудови окремих елементів зображення потрібно вказувати їхні координати. Початком координат вважають верхній лівий куток аркуша. Вісь Х направлена зліва направо, Y – зверху вниз. Для всіх графічних операцій першою вказують координату Х, другою – Y.

Якщо координати при побудові зображення виходять за межі аркуша, то інформація за межами аркуша ігнорується. Виняток становлять оператори ReadLn та WriteLn. При спробі виведення за нижню межу аркуша все зображення посувається вгору на величину висоти символу.

Під час виведення текстової чи графічної інформації необхідно вказати, куди саме виводити: вгорі, посередині чи внизу, а також колір тексту, ліній та заповнення. Вказувати цю інформацію в кожному операторі було б дуже незручно. Тому система запам’ятовує значення координат точки, в якій завершилося виведення інформації та параметри вибраних інструментів. Ці значення називають активними. У момент запуску програми на виконання активні координати стають рівні (0,0) (верхній лівий куток екрану), встановлюється чорний олівець одиничної товщини та чорний колір тексту. Колір заповнення замкнених фігур (колір пензля) вибирається прозорий, тобто замкнені фігури не зафарбовуються.

В процесі роботи програми активні координати міняються так, щоб наступне виведення починалося там, де закінчилося попереднє.

Активні координати змінюються при виконанні процедур MoveTo, LineTo, Line, Rectangle, Write, WriteLn, Point, Clear, а використовуються процедурами LineTo, Write, WriteLn.

Активний (поточний) колір тексту встановлюють за допомогою звертання до процедури КолірТексту: TextColor (r, g, b:integer);

Параметри r, g, b є виразами цілого типу і задають частки червоного, зеленого та синього кольору в результуючому кольорі тексту. Встановленим кольором буде відображатись уся текстова інформація, яка виводиться на екран процедурами Read та Write. Значення фактичних параметрів при звертанні до процедури КолірТексту мають бути в межах від 0 до 255.

За замовчуванням встановлений чорний колір тексту (0,0,0).

Приклад №1

Program TextColorDemo;

Begin

WriteLn('Чорний колір');

TextColor(127, 127, 127);

WriteLn('Сірий колір')

end.

Активна графічна позиція встановлюється в точку з цілими координатами (x,y) процедурою Перемістити:

MoveTo (x, y:integer);

Коли необхідно визначити координати активної графічної позиції, це можна зробити за допомогою процедури Координати:

Coordinates (var x, y:integer);

Фактичними параметрами процедури Координати повинні бути змінні цілого типу, яким у результаті виконання процедури надаються значення відповідних координат активної графічної позиції.

Приклад №2

Program CoordinatesDemo;

Var i,x,y:integer;

Begin

For i:=0 to 3 do

Begin

MoveTo(10*i,30*i);

Coordinates(x,y);

Write('x=',x,'y=',y)

End;

End.

Активний шрифт для виведення тексту встановлюють за допомогою звертання до процедури Шрифт:

Font (h,a,b:integer);

де h – висота у пікселах, a – кут нахилу в градусах, b – насиченість шрифту. Насиченість задають числом в межах від 0 до 1000. Звичайний шрифт має насиченість 400, а жирний – 600. Встановленим шрифтом буде відображатись уся текстова інформація, яка виводиться на екран процедурами Read та Write. Фактичними параметрами при звертанні до процедури Шрифт мають бути вирази цілого типу.

За замовчуванням встановлений шрифт (8,0,400).

Приклад №3

Program FontDemo;

Begin

Font(10,0,400);

WriteLn('Шрифт(10,0,400)');

Font(8,0,800);

WriteLn('Шрифт(8,0,800)');

MoveTo(80,100);

Font(10,30,400);

WriteLn('Шрифт(10,30,400)');

end.

Приклад №4

Розглянемо цікавий приклад поєднання кольорів, шрифтів та переміщення графічного курсору. Виведемо текст 'I like programming!!!' таким чином:

Розв’язування

Щоб отримати «хвилясте» зображення тексту, яке ви бачите на малюнку, кожен символ ми будемо виводити по графіку функції sin(i). В процедурі MoveTo координата х буде збільшуватись виразом 10+i*20 (враховуємо місце для кожної літери і відступ), а для збільшення координати у використаємо формулу y:=round(20*sin(i)), яка забезпечить «хвилясту» траєкторію. Щоб переглянути в циклі і вивести всі літери тексту, використаємо функцію, яка визначає довжину рядка length(str). При цьому, щоб виділити кожну літеру, вказуємо назву рядка і номер літери str[i]. Параметри для процедури textcolor задамо з використанням функції random, що дасть змогу отримати різнокольорові літери.

program text_demo_1;

const str='I like programming!!!';

var i,y:integer;

Begin

clear;

for i:=1 to length(str) do

Begin

y:=round(20*sin(i));

moveTo(10+i*20,100+y);

font(10,0,700);

textColor(random(200),random(200),random(200));

write(str[i])

End

end.

Для витирання аркуша (вікна результатів) використовують процедуру Стерти Clear. Крім витирання, процедура встановлює такі значення активних параметрів:

· чорний олівець товщиною 1;

· чорний колір тексту;

· прозорий колір заповнення;

· активну графічну позицію – (0, 0);

· активний шрифт – (8,0,400).

Іноді необхідно штучно затримати виконання програми на деякий час. Це роблять за допомогою звертання до процедури Пауза Delay (ms:integer).

Параметр ms повинен бути виразом цілого типу і задає число мілісекунд інтервалу чекання. Дана процедура є приблизною, тому період затримки не буде точно рівний заданому числу мілісекунд.

Розглянемо логічну функцію Подія IsEvent, яка часто використовується в циклі Поки при складанні графічних програм. Подією вважається натискання довільної клавіші на клавіатурі, натискання лівої клавіші мишки у вікні виконання або переміщення мишки з натиснутою лівою клавішею. АЛГО формує повідомлення про подію та запам'ятовує його. Функція Подія повертає істинне значення true, якщо подія відбулася (наприклад, натиснено клавішу Enter), інакше - хибне значення false.

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

Event (var ТипПодії, Пар1, Пар2:integer).

Ця процедура залежно від типу події присвоює значення параметрам Пар1, Пар2. Наприклад, якщо тип події дорівнює 2, то це означає, що натиснена ліва клавіша миші у позиції (X,Y) і Пар1 отримує значення координати миші X, а Пар2 значення координати Y.

Приклад №5

Вивести текст 'I like programming!!!' так, щоб літери рухались.

Розв’язування

Ефект «руху» виникає тоді, коли ми витираємо зображення і перемальовуємо його знову, змінюючи координати. Додамо в програму з попереднього прикладу цикл Поки, процедуру Пауза для короткої зупинки (delay(100)) та процедуру Стерти(Clear).

while not IsEvent do

Begin

delay(100);

clear;

End;

Вся програма матиме вигляд:

program text_demo_2;

const str='I like programming!!!';

var i:integer;

Begin

clear;

while not IsEvent do

Begin

for i:=1 to length(str) do

Begin

moveTo(10+i*20,100);

font(10,random(10),700);

textColor(random(200),random(200),random(200));

write(str[i])

end;

delay(100);

clear

end;

end.

Питання для самоконтролю

1. Яку структуру має вікно виведення інформації?

2. За допомогою яких процедур здійснюється виведення тексту?

3. Якою процедурою задають колір тексту? Який формат виклику цієї процедури?

4. Якою процедурою змінюють активну графічну позицію?

5. Яка процедура дає змогу визначити активну графічну позицію?

6. За допомогою якої процедури налаштовують шрифт для виведення тексту? Який зміст та типи мають параметри цієї процедури?

Задачі

1) Дослідіть роботу програми прикладу 5, замінивши рядок font(10,0,700); на рядок font(10, random(5),700). Встановіть свої кути нахилу тексту..

2) Придумайте свій варіант виведення тексту і складіть відповідну програму.

3.2. Процедури для побудови крапки та лінії

Для виведення крапки, лінії або довільного контуру слід налаштувати інструмент олівець, який встановлює колір та товщину ліній. Процедура Олівець має такий формат:

Pen (n,r,g,b:integer);

де n – задає товщину лінії в пікселах, а r, g, b – задають частки червоного, зеленого та синього в результуючому кольорі ліній. Встановлені товщину та колір будуть мати усі лінії, які малюються за допомогою процедур LineTo, Line, Rectangle, Ellipse, Point. Фактичними параметрами при звертанні до процедури Олівець мають бути вирази цілого типу, значення яких змінюється в межах від 0 до 255. За замовчуванням встановлений чорний колір ліній (0,0,0) і одинична товщина.

Щоб поставити (намалювати) крапку в точці з координатами (x, y), треба звернутись до процедури Крапка:

Point (x, y:integer);

Фактичними параметрами при звертанні до процедури Крапка можуть бути змінні, константи чи вирази цілого типу. Колір крапки визначається активним кольором олівця. Після виконання процедури активна графічна позиція встановлюється в точку з координатами (x,y).

Приклад №1

Намалювати круг з випадкових крапок. У лівій частині круга крапки мають бути червоного кольору, а в правій – синього.

Розв’язування

Program PointDemo;

Var i,x,y:integer;

Begin

For i:=1 to 5000 do

Begin

x:=random(100);

y:=random(100);

If sqr(x-50)+

sqr(y-50)<=1600 then

Begin

If x>50 then

Pen(1,0,0,255)

else

Pen(1,255,0,0);

Point(x,y)

End

End

End.

Випадкове положення кожної точки забезпечимо випадковим вибором координат Х і Y (функція random(N)). Якщо вибрані координати попадають в круг (що перевіряється рівнянням круга X2+Y2<=R2), то виконується додаткова перевірка в ліву (X<50) чи праву (X>=50) його частину. Залежно від цього встановлюється червоний чи синій колір олівця.

Лінію між двома точками проводять за допомогою звертання до процедури Лінія:

Line (x1,y1,x2,y2:integer);

де (x1,y1) та (x2,y2) – координати кінців лінії. Фактичними параметрами при звертанні до процедури Лінія мають бути вирази цілого типу. Лінія буде проведена активним олівцем. Після виконання процедури активна графічна позиція встановлюється в точку з координатами (x2,y2).

Приклад №2

Program LineDemo;

Begin

Line(0, 0, 90, 90);

Pen(2, 0, 0,255);

Line(30, 30, 90, 30);

Pen(6,255, 0, 0);

Line(10, 10, 10, 90)

end.

Розглянемо ще один приклад, який демонструє, як зміна параметрів процедури Олівець впливає на товщину та колір лінії.

Приклад №3

Program PenDemo;

Var i:integer;

Begin

For i:=1 to 10 do

Begin

Pen(i, i*20, 0, 0);

Line(10,i*10,100, i*10);

End;

End.

Коли наступна лінія починається з кінця попередньої, як буває при побудові ламаних ліній чи графіків, зручно користуватись процедурою ЛініяДо:

LineTo (x,y:integer);

де (x,y) – координати кінця лінії. Лінія починається від активної графічної позиції. Фактичними параметрами при звертанні до процедури ЛініяДо мають бути вирази цілого типу. Лінія буде проведена вибраним олівцем.

Після виконання процедури ЛініяДо активна графічна позиція встановлюється в точку з координатами (x,y).

Приклад №4

Program LineToDemo_1;

Var i:integer;

Begin

For i:=0 to 100 do

Begin

Pen(1,0,2*i+50,2*i+50);

LineTo(random(100),random(100))

End

End.

За допомогою процедури LineTo можна будувати графіки функцій.

Приклад №5

Побудувати графік функції на відрізку [1,200].

Розв’язування

Залежно від вигляду графіка за допомогою процедури MoveTo зміщують точку початку координат. Параметр і у процедурі LineTo відповідає значенню аргумента, а вираз 50-round(sqrt(i)) значенню функції.

Program LineToDemo_2;

Var i:integer;

Begin

MoveTo(0, 50);

For i:=1 to 200 do

LineTo(i, 50-round(sqrt(i)));

End.

Питання для самоконтролю

1. За допомогою якої процедури встановлюється колір виведення крапки, колір та товщина ліній?

2. Яка процедура виводить крапку? Який формат цієї процедури?

3. Яка процедура виводить лінію?

4. Що можна малювати за допомогою процедури LineTo?

Задачі

1) Напишіть програму, при виконанні якої за допомогою процедур Line та LineTo малюється кораблик.

2) Напишіть програму для побудови графіка функції y=x2. Намалюйте вісь Х.

3.3. Процедури для побудови замкнутих контурів

При побудові замкнутих фігур (наприклад, прямокутника, кола) для налаштування вигляду їх заповнення користуються процедурою Пензель, яка має вигляд:

Brush (k,r,g,b:integer);

де r, g, b – частки червоного, зеленого та синього в результуючому кольорі заповнення, а параметр k задає стиль заповнення. Якщо k=1 то замкнені фігури зафарбовуються, а при k=0 вимальовується лише контур, тобто фігури не зафарбовуються. Встановленим кольором будуть зафарбовуватись фігури процедурами Rectangle, Ellipse та Fill. Фактичними параметрами при звертанні до процедури Пензель мають бути змінні, константи чи вирази цілого типу, значення яких знаходиться в межах від 0 до 255.

Прямокутник будують за допомогою процедури Прямокутник:

Rectangle (x1,y1,x2,y2:integer);

де (x1,y1) та (x2,y2) – координати двох діаметрально протилежних вершин прямокутника. Фактичними параметрами при звертанні до процедури Прямокутник мають бути вирази цілого типу. Прямокутник буде побудований активним олівцем та зафарбований активним кольором пензля, або не зафарбований, якщо встановлений прозорий колір пензля.

Після виконання процедури активна графічна позиція встановлюється в точці з координатами (x2,y2).

Приклад №1

Program RectangleDemo;

Begin

Rectangle(10, 10, 80, 80);

Pen(1, 255, 0, 0);

Rectangle(60, 10, 0, 90);

Pen(1, 0, 0, 255);

Brush(1, 255, 255, 0);

Rectangle(20, 30, 50, 90)

end.

Еліпс будують за допомогою процедури Еліпс:

Ellipse (x1,y1,x2,y2:integer);

де x1, y1 та x2, y2 – координати двох діаметрально протилежних вершин прямокутника, в який вписується еліпс. Якщо прямокутник є квадратом, то еліпс матиме форму кола. Фактичними параметрами при звертанні до процедури Еліпс мають бути вирази цілого типу. Еліпс буде побудований активним олівцем та зафарбований активним пензлем, або не зафарбований, якщо встановлений прозорий колір пензля. Після виконання процедури активна графічна позиція не змінюється

Приклад №2

Program EllipseDemo;

Begin

Ellipse(10, 10, 80, 80);

Pen(1, 255, 0, 0);

Ellipse(60, 10, 0, 90);

Pen(1, 0, 0, 255);

Brush(1, 255, 255, 0);

Ellipse(20, 30, 50, 90)

End.

Щоб зафарбувати замкнуту одноколірну область довільної форми, потрібно звернутись до процедури Зафарбувати:

Fill (x,y:integer);

Фактичними параметрами при звертанні до процедури Зафарбувати мають бути вирази цілого типу. Починаючи з точки з координатами (x,y), процедура заповнює екран у всіх напрямках активним кольором пензля до тих пір, поки не зустрінеться межа іншого кольору. Іншими словами процедура Зафарбувати міняє колір замкнутої області, всередині якої лежить точка (x,y) на активний колір пензля.

Процедура Зафарбувати не виконує ніяких дій, якщо заданий прозорий колір заповнення або колір точки (x,y) співпадає з кольором заповнення.

Приклад №3

Program FillDemo;

Begin

LineTo(70, 30);

LineTo(20, 80);

LineTo(0, 0);

Brush(1,255,255,0);

Fill(10, 10)

end.

Питання для самоконтролю

1. За допомогою яких процедур відбувається заповнення замкнутого контуру? Які особливості оформлення кожної процедури?

2. Якою процедурою виводять прямокутник? Який формат виклику цієї процедури?

3. Якою процедурою виводять еліпс? Які особливості виклику цієї процедури?

Задачі

1) Напишіть програму для малювання 9 кругів (3 рядки по 3 круги в кожному). Зафарбуйте їх так, використовуючи три кольори, щоб в кожному рядку і в кожному стовпчику кольори були різними.

2) Напишіть програму, при виконанні якої малюється будинок.

3.4. Підготовка до оцінювання з теми «Побудова графічних зображень»

Задача. Намалювати шахову дошку.

1-й рівень. Напишіть дві про­цедури для малювання білого та чорного квадратів.

2-й рівень. Використовуючи дані процедури, намалюйте шахову дошку.

3-й рівень. Зробіть підписи клітинок по вертикалі та по гори­зонталі.

4-й рівень. Запитайте коор­динати клітинки, в якій розмістити фігуру. У вказану клітинку виведіть червоний квадрат.

4. Приклади цікавих програм





Дата публикования: 2014-11-04; Прочитано: 1131 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.031 с)...