Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Default: інструкції 1 страница




Var

Var

End.

Begin

Implementation

Interface

Uses <доступні бібліотечні модулі>;

Label <доступні мітки>;

Const <доступні константи>;

Type <доступні типи даних>;

Var <доступні змінні>;

Procedure <ім”я 1-ої доступної процедури>;

Procedure <ім”я N-ої доступної процедури>;

Function <ім”я 1-ої доступної функції>;

Function <ім”я N-ої доступної функції>;

Uses <бібліотечні модулі для реалізації>;

Label <мітки для реалізації>;

Const <константи для реалізації>;

Type <типи даних для реалізації>;

Var <змінні для реалізації>;

Procedure <ім”я 1-ої процедури>;

<тіло 1-ої процедури>;

Procedure <ім”я N-ої процедури>;

<тіло N-ої процедури>;

 

Function <ім”я 1-ої функції>;

<тіло 1-ої функції>;

Function <ім”я N-ої функції>;

<тіло N-ої функції>;

<оператор 1>;

<оператор N>;

 

1.3. Заголовок бібліотечного модуля починається із зарезервованого слова Unit та імені модуля, яке повинно співпадати з іменем файлу модуля, тому може вміщувати не більше 8 символів.

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

Інтерфейсна частина Interface вміщує елементи, які доступні користувачу після підключення модуля. Це можуть бути інші бібліотечні модулі, мітки, константи, типи даних, зміні, процедури й функції, що вказуються у відповідних розділах Uses, Label, Const, Type, Var, Procedure, Function. Причому для процедур та функцій вказуються тільки їх заголовки без відповідних тіл. Будь-який розділ, в тому числі й усі, можуть бути відсутні. В останньому випадку ключове слово Interface залишається.

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

Ініціалізаційна частина вміщує оператори між ключовими словами Begin та End, що виконуються у програмі, в якій підключено модуль, найпершими, тобто перед командами її виконавчого блоку. Найчастіше ініціалізаційна частина порожня.

1.4. Приклад 1. Створити бібліотечний модуль, який уміщує тільки наступні константи А=2002; Н=0,02; К=2,73.

 

Unit Constant;

Interface

Const

A=2002;

H=0.02;

K=2.73;

Implementation

Begin

End.

 

1.5. Приклад 2. Створити бібліотечний модуль, ініціалізаційна частина якого здійснює очистку екрана в текстовому режимі.

 

Unit ScrClear;

 

Interface

 

Implementation

Uses Crt;

 

Begin

ClrScr;

End.

 

1.6. Приклад 3. Створити бібліотечний модуль, що вміщує дві процедури, за допомогою яких можна задати колір символів й фону в текстовому режимі екрана та подати короткочасний звуковий сигнал.

 

Unit Biblio;

 

Interface

Procedure CF (Color, Fon:byte);

Procedure Beep;

Implementation

Uses Crt;

Procedure CF;

Begin

TextColor (Color);

TextBackGround (Fon);

End;

Procedure Beep;

Begin

Sound (3000);

Delay (1000);

NoSound;

End;

Begin

End.

 

 

2. ЗАВДАННЯ НА РОБОТУ

 

Розробити та запустити у роботу програму на мові програмування "Паскаль", яка вирішує задачу відповідно до заданого нижче варіанта.

2.1. Створити масив з 4 елементів типу даних "запис" із наступними полями: № групи студента, ПІБ студента, оцінка з математики, оцінка з хімії, оцінка з фізики. Підрахувати середній бал та вивести список студентів на отримання стипендії, якщо середній бал не менше "4'. Ввід даних у масив та обчислення середнього балу реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.2. Створити масив з 4 елементів типу даних "запис" із наступними полями: ПІБ студента, кількість "З", кількість "4", кількість "5", оцінка за дипломний проект. Вивести список студентів на отримання диплома з відзнакою, якщо відсутні "З", а "4" не більше 25% та "5" за дипломний проект. Ввід даних у масив та визначення умов реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.3. Створити масив з 4 елементів типу даних "запис" із наступними полями: марка автомобіля, пройдений шлях, ціна, об'єм двигуна. Вивести список із даними автомобілів, ціна яких нижче заданої. Ввід даних у масив та визначення умови реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.4. Створити масив з 4 елементів типу даних "запис" із наступними полями: ПІБ продавця, об'єм продажу, посадовий оклад, стаж роботи. Вивести список продавців та отриману премію, як відсоток від об'єму продажу. Відсоток дорівнює стажу роботи. Ввід даних у масив та обчислення премії реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.5. Створити масив з 4 елементів типу даних "запис" із наступними полями: ПІБ студента, кількість "З", кількість "4", кількість "5". Вивести список студентів із відносною кількістю (відсотки) "З", "4" та "5". Ввід даних у масив та обчислення відсотків реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.6. Створити масив з 4 елементів типу даних "запис" із наступними полями: ПІБ студента, стать, кількість "З", кількість "4", кількість "5". Вивести список студентів чоловічої статі, яким дозволено навчання за додатковою програмою, якщо середній бал не нижче 3,9. Ввід даних у масив та обчислення середнього балу реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.7. Створити масив з 4 елементів типу даних "запис" із наступними полями: № групи студента, ПІБ студента, оцінка за контрольну роботу, оцінка за розрахункову роботу, оцінка за лабораторні роботи. Вивести список студентів на отримання заліка із дисципліни, якщо оцінки "4" та "5". Ввід даних у масив та визначення умови реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.8. Створити масив з 4 елементів типу даних "запис" із наступними полями: ПІБ студента, кількість "З", кількість "4", кількість "5", іноземна мова. Вивести список трьох студентів із найвищими середніми балами для навчання за додатковою програмою, якщо іноземною є німецька мова. Ввід даних у масив та визначення умови реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.9. Створити масив з 4 елементів типу даних "запис" із наступними полями: № групи, ПІБ студента, стать, оцінка з іноземної мови, оцінка з обчислювальної техніки. Вивести список студентів жіночої статі для участі в міжнародній олімпіаді, якщо оцінка з обчислювальної техніки "5", а з іноземної мови не нижче "4'. Ввід даних у масив та визначення умови реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

2.10. Створити масив з 4 елементів типу даних "запис" із наступними полями: ПІБ студента, кількість "З", кількість "4", кількість "5", наявність пільг. Вивести список студентів та середній бал окремо для студентів із пільгами та окремо без пільг. Ввід даних у масив та обчислення реалізувати у вигляді бібліотечного модуля з двома відповідними підпрограмами.

 

3. КОНТРОЛЬНІ ЗАПИТАННЯ

 

3.1. В якій послідовності створюється бібліотечний модуль.

3.2. Яку структуру має бібліотечний модуль.

3.3. Які вимоги до імені бібліотечного модуля.

3.4. Які функції виконує інтерфейсна частина модуля.

3.5. Які функції виконує реалізаційна частина модуля.

3.6. Які функції виконує ініціалізаційна частина модуля.

3.7. Як підключається бібліотечний модуль програміста в програмі.


Комп'ютерний практикум № 8

ДИНАМІЧНІ ЗМІННІ МОВИ "ПАСКАЛЬ"

Мета практикуму – розробка програмного забезпечення на мові прграмування "Паскаль" з використанням динамічних змінних.

 

1. ТЕОРЕТИЧНІ ВІДОМОСТІ

 

1.1. Після запуску програми на виконання вона розміщується в оперативній пам’яті комп’ютера в певному порядку. Кожному логічному блоку програми виділяється окремий сегмент пам’яті розміром 64К. Послідовно розташовуються сегменти машинного коду основної програми, бібліотечні модулі, що підключені в розділ Uses, а потім ідуть сегменти даних й стека. Константи та змінні, що знаходяться в сегменті даних, називаються статичними й доступ до їх значень здійснюється за іменами, описаними у розділах програми Const та Var.

Уся інша вільна частина стандартної оперативної пам’яті, що не зайнята програмою, називається динамічною пам’яттю або Heap -областю й закріплюється для потреб програми на весь час її роботи. Величину Heap -області та стека можна змінити директивою компілятора {$M} чи через меню Options\Compiler\Memory Size. За згодою встановлено розмір стека 16384 байта, мінімальний та максимальний розмір динамічної пам'яті – нуль та 655360 байт, тобто

 

{$M 16384, 0, 655360}

 

1.2. В Heap -області можна розміщувати необхідні для роботи програми дані за допомогою динамічних змінних. Виділення пам'яті для динамічних змінних здійснюється не на етапі компіляції програми, а під час її роботи, тобто у виконавчій частині програми, тому й звільнення динамічної пам'яті від даних можна зробити ще до завершення роботи програми.

Найчастіше Heap -область використовується для зберігання великих об’ємів даних або даних, розмір яких постійно змінюється й наперед невідомий, для збереження зображення екрана та створення рухомих зображень.

1.3. Динамічна змінна – це вказівник на комірки динамічної пам'яті, де знаходяться дані. Вказівники описуються в розділі Var й можуть бути типізованими й нетипізованими.

Типізовані вказівники описуються за допомогою символу “ ^ ” (циркумфлекс) й зв'язуються з певним типом даних. Наприклад, вказівник Alfha, що вказує на дійсний тип та вказівник I, що вказує на цілочислений тип описуються наступним чином

 

Alfha: ^real;

I: ^integer;

 

Виділення динамічної пам'яті у виконавчій частині програми для динамічних змінних зв'язаних із типізованими вказівниками, здійснюється процедурою

 

New (Alpha);

New (I);

 

а звільнення динамічної пам'яті – процедурою

 

Dispose (Alpha);

Dispose (I);

Пам'ять виділяється порціями по 8 байт, тому 6-байтний тип real й 2-байтний тип integer отримують однаковіпорції по 8 байт.

Нетипізовані вказівники описуються за допомогою зарезервованого слова pointer й не зв'язуються з конкретним типом даних. Наприклад, описання нетипізованого вказівника Beta має наступний вигляд

 

Beta:pointer;

 

При виділенні динамічної пам'яті для змінних зв'язаних із нетипізованими вказівниками задається потрібний об'єм пам'яті в байтах, який не повинен перевершувати 64К. Для виділення пам'яті використовується процедура

 

GetMem (Beta, 32);

а для звільнення – процедура

 

FreeMem (Beta, 32);

 

Об'єм пам'яті, що виділяється та звільняється для однієї динамічної змінної, повинен співпадати. Об'єм пам'яті можна задавати за допомогою значень змінних типу word.

1.4. При виділенні значних об'ємів динамічної пам'яті корисно користуватися функціями MemAvail й MaxAvail цілочисленого типу longint, які визначають загальний об'єм вільної пам'яті й об'єм неперервної ділянки пам'яті відповідно.

1.5. Після виділення пам'яті для динамічних змінних, тобто після створення динамічних змінних, із ними можна працювати як із звичайними змінними, виконуючи над ними всі допустимі операції. Єдиною відмінністю є позначення динамічної змінної символом “ ^ ” (циркумфлекс) після її імені.

Приклад 1. Знайти суму двох дійсних чисел на основі використання динамічних змінних.

 

Program Dinamic_Var;

Uses Crt;

Var

a, b, c: ^real;

 

Begin

TextColor (blue);

TextBackground (lightgray);

ClrScr;

 

New (a);

New (b);

New (c);

 

Write ('Введіть два дійсних числа: ');

Readln (a^,b^);

c^:=a^+b^;

Writeln ('Сума чисел дорівнює: ',c^:9:2);

 

Dispose (a);

Dispose (b);

Dispose (c);

Readln;

End.

 

1.6. Безпосередньо над вказівниками можна виконувати операції порівняння та присвоєння, в т.ч. присвоєння порожнього значення Nil

 

Beta:= Nil;

1.7. Часто динамічні змінні застосовуються для створення одно- та двонаправлених списків. Список – це скінчена сукупність елементів, кількість яких може безперервно змінюватися. В однонаправленому списку кожен елемент зв'язаний тільки з наступним, тому для доступу до конкретного елемента потрібно пройти через усі попередні. Кожен елемент складається з інформаційних полів та вказівника на наступний елемент. Вказівник останнього елемента має значення Nil. У двонаправлених списках можна рухатися в обидва напрямки. Елементи списку зручно реалізовувати у вигляді запису.

Приклад 2. Створити на основі однонаправленого списку телефонний довідник, що включає ПІБ абонента, його адресу та номер телефону.

 

Program SimpleList;

Uses Crt;

 

{ Опис елементу списку }

Type

PhonePtr=^PhoneRec;

PhoneRec=record

Name:string[30];

Address:string[50];

Phone:string[15];

Next:PhonePtr;

end;

Var

FirstPhone, CurrPhone,

PrevPhone, WritePhone:PhonePtr;

Ch:char;

 

{ Підпрограма вводу даних про абонента }

Procedure EnterPhone;

begin

with CurrPhone^ do

begin

ClrScr;

Write ('Введіть ПІБ: ');

readln (Name);

Write ('Введіть адресу: ');

readln (Address);

Write ('Введіть номер телефону: ');

readln (Phone);

end;

end;

 

{ Підпрограма створення нового абонента }

Procedure NewPhone;

begin

if FirstPhone=Nil then

begin

New(CurrPhone);

EnterPhone;

FirstPhone:=CurrPhone;

PrevPhone:=CurrPhone;

CurrPhone^.Next:=Nil;

end

else

begin

PrevPhone:=CurrPhone;

New (CurrPhone);

EnterPhone;

PrevPhone^.Next:=CurrPhone;

CurrPhone^.Next:=Nil;

end;

end;

 

{ Підпрограма виводу даних про абонента }

Procedure OutputPhones;

begin

WritePhone:=FirstPhone;

While WritePhone <> Nil do

begin

with WritePhone^ do

Writeln (Name, ',',Address, ',',Phone);

WritePhone:=WritePhone^.Next;

end;

Repeat Until KeyPressed;

end;

 

BEGIN

FirstPhone:=Nil;

 

{ Організація простого меню програми }

ClrScr;

GotoXY (1,24);

TextColor (yellow);

Writeln ('(Н)овий абонент, (Ч)итати абонентів,

(В)ихід');

Window (1,1,80,23);

TextColor (red);

Repeat

ClrScr;

Repeat

Ch:=Readkey;

Until Ch IN ['Н','н','Ч','ч','В','в'];

Case Ch of

'Н','н':NewPhone;

'Ч','ч':OutputPhones;

end;

Until Ch IN ['В','в'];

 

ClrScr;

END.

 

1.8. Динамічна пам'ять використовується для збереження зображення з екрана та його наступного відтворення. Рухомі зображення формуються шляхом вилучення графічної інформації із заданої області екрана та її послідовного відтворення в іншому місці екрана. Указані дії здійснюються в наступній послідовності:

1) На екрані формується необхідне зображення у графічному режимі роботи дисплея;

2) За допомогою функції цілочисленого типу word

 

ImageSize (<x1,y1,x2,y2:integer>);

 

виділяється необхідна прямокутна область на екрані з координатами лівого верхнього кута x1,y1 й правого нижнього кута x2,y2 та обчислюється її об'єм, який не повинен перевершувати 64К, інакше необхідна область виділяється декількома прямокутниками;

3) Створюється динамічна змінна за допомогою команди GetMem, для якої виділяється об'єм, обчислений функцією ImageSize;

4) Виділений фрагмент зображення вирізається з екрана й розміщується у динамічній пам'яті за вказівником процедурою

 

GetImage (<x1,y1,x2,y2:integer>,<вказівник>);

 

5) З динамічної пам'яті цей прямокутний фрагмент зображення відтворюється на екрані у заданому місці процедурою

 

PutImage (<x,y:integer>,<вказівник>,<режим>);

 

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

 

Табл. 1.1.

Режим Примітка
CopyPut або NormalPut (або цифра 0) Заміна поточного зображення
XORPut (або цифра 1) Порівняння за логічною функцією “Виключаюче АБО”
ORPut (або цифра 2) Порівняння за логічною функцією “АБО”
ANDPut (або цифра 3) Порівняння за логічною функцією “І”
NOTPut (або цифра 4) Порівняння за логічною функцією “НІ” (негативне зображення)

 

1.9. Для створення зображень у графічному режимі дисплея використовуються команди малювання геометричних фігур. Контур фігур викреслюється лінією, колір якої встановлюється відомою командою SetColor. Фігури, що мають поверхню, (наприклад, круг) заповнюються заданим шаблоном та кольором установленими у команді

 

SetFillStyle (<шаблон>,<колір>);

Стандартні шаблони задаються цифрами від нуля до 11 або еквівалентною назвою згідно табл. 1.2.

 

Табл. 1.2.

Шаблон   Примітка
EmptyFill (або цифра 0) Суцільний колір фона
SolidFill (або цифра 1) Суцільний поточний колір
LineFill (або цифра 2) Тире
LtSlashFill (або цифра 3) Косі лінії нормальної товщини
SlashFill (або цифра 4) Косі лінії подвоєної товщини
BkSlashFill (або цифра 5) Зворотні косі лінії подвоєної товщини
LtBkSlashFill (або цифра 6) Зворотні косі лінії нормальної товщини
HatchFill (або цифра 7) Клітинки
InterLeaveFill (або цифра 8) Косі рідкі клітинки
WideDotFill (або цифра 9) Косі густі клітинки
CloseFill (або цифра 10) Рідкі точки
Fill (або цифра 11) Густі точки
UserFill (або цифра 12) Заповнення користувача

 

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

 

SetFillStyle (1, white);

 

Прямокутник із цілочисленими координатами лівого верхнього кута 100, 50 та правого нижнього кута 300, 150 креслиться командою

 

Rectangle (100,50,300,150);

Коло з координатами центра 300, 200 та радіусом 50 створюється командою

Circle (300,200,50);

Дуга кола з координатами центра 300, 200, із початковим й кінцевим кутом 90 й 270 градусів та радіусом 50 малюється командою

Arc (300,200,90,270,50);

 

Кут вимірюється як і в математиці від додатного напрямку осі абсцис проти годинникової стрілки.

Сектор круга з координатами центра 300, 200, із початковим й кінцевим кутом 90 й 270 градусів та радіусом 50 створюється командою

PieSlice (300,200,90,270,50);

 

Еліптична дуга з координатами центра 300, 200, із початковим й кінцевим кутом 90 й 270 градусів та радіусом за віссю абсцис 50 й віссю ординат 150 креслиться командою

Ellipse (300,200,90,270,50,150);

 

Еліптичний сектор із координатами центра 300, 200, із початковим й кінцевим кутом 90 й 270 градусів та радіусом за віссю абсцис 50 й віссю ординат 150 малюється командою

Sector (300,200,90,270,50,150);

 

Заповнений еліпс із координатами центра 300, 200 та радіусом за віссю абсцис 50 й віссю ординат 150 креслиться командою

FillEllipse (300,200,50,150);

 

Стовпець із координатами лівого верхнього кута 100, 50 та правого нижнього кута 200, 250 створюється командою

 

Bar (100,50,200,250);

Тривимірний стовпець із координатами лівого верхнього кута 100, 50 й правого нижнього кута 200, 250 та глибиною 10 із видимою вершиною, що задається логічною константою TopON чи її значенням True, малюється командою

 

Bar3D (100,50,200,250,10,TopON);

Невидима вершина використовується для розміщення стовпця один на одному і задається константою TopOFF чи її значенням False.

Ламана лінія або багатокутник викреслюється на основі масиву координат точок x та y, які зберігаються в зарезервованому записі PointType. Багатокутник виходить, якщо координати першої та останньої точки співпадають. Для малювання необхідно також задати кількість точок (вершин) фігури

DrawPoly (<кількість точок:word>,

<масив координат точок:PointType>);

 

Приклад 3. Створити трикутник, контур якого має зелений колір.

 

Uses Graph;

Const

{ Завдання координат 4-х точок }

Triangle:array [1..4] of PointType=

((x:50; y:100), (x:100; y:100),

(x:150; y:150), (x:50; y:100));

Var

grDriver:Integer;

grMode:Integer;

ErrCode:Integer;

 

Begin

grDriver:= Detect;

InitGraph (grDriver, grMode,'F:\TP\BGI');

ErrCode:= GraphResult;

if ErrCode = grOk then

begin

{ Завдання зеленого кольору }

SetColor (green);

{ Креслення трикутника }

DrawPoly (4, Triangle);

Readln;

CloseGraph;

end

else

Writeln(GraphErrorMsg(ErrCode));

End.

Заповнений багатокутник малюється при обов'язковій рівності координат першої та останньої точки

FillPoly (<кількість точок:word>,

<масив координат точок:PointType>);

 

1.10. Замкнуті області зображень можна заповнювати (зафарбовувати) заданим шаблоном та кольором, які встановлені командою SetFillStyle. Кордон заповнення задається кольором лінії, яка обмежує замкнуту область. Для команди заповнення необхідно вказати також координату будь-якої точки всередині області

 

FloodFill (<x,y:integer>,<колір кордону:word>);

 

Приклад 4. Заповнити червоне коло суцільним синім шаблоном.

 

Uses Graph;

Var

grDriver:Integer;

grMode:Integer;

ErrCode:Integer;

Begin

grDriver:= Detect;

InitGraph (grDriver, grMode,'F:\TP\BGI');

ErrCode:= GraphResult;

if ErrCode = grOk then

begin

{ Малювання кола червоним кольором }

SetColor (red);

Circle (200, 100, 50);

Readln;

{ Завдання суцільного заповнення

синім кольором }

SetFillStyle (1, blue);

{ Заповнення до червоної межі }

FloodFill (200, 100, red);

Readln;

CloseGraph;

end

else

Writeln(GraphErrorMsg(ErrCode));

End.

 

1.11. Приклад 5. Безперервно переміщувати червону кулю за годинниковою стрілкою паралельно сторонам екрана.

 

Uses Graph, Crt;

Const

Radius=20;

Var

grDriver:Integer;

grMode:Integer;

ErrCode:Integer;

Size,X,Y,I:Word;

P:Pointer;

 

Begin

grDriver:= Detect;

InitGraph (grDriver, grMode,'F:\TP\BGI');

ErrCode:= GraphResult;

if ErrCode = grOk then

begin

{ Малювання червоної кулі }

SetColor (red);

X:= Radius+2;

Y:= Radius+2;

Circle (X, Y, Radius);

SetFillStyle (1, red);

FloodFill (Radius, Radius, red);

 

{ Створення динамічної змінної }

Size:= ImageSize (0, 0, 2*X, 2*Y);

GetMem (P, Size);

GetImage (0, 0, 2*X, 2*Y, P^);

 

ClearDevice;

Repeat

{ Переміщення кулі вздовж верхньої сторони екрана }

for I:=1 to GetMaxX-2*X do

begin

PutImage (I, 1, P^, CopyPut);

Delay (10);

end;

{ Переміщення кулі вздовж правої сторони екрана }

for I:=1 to GetMaxY-2*Y do

begin

PutImage (GetMaxX-2*X, I, P^, CopyPut);

Delay (10);

end;

{ Переміщення кулі вздовж нижньої сторони екрана }

for I:=1 to GetMaxX-2*X do

begin

PutImage (GetMaxX-2*X-I, GetMaxY-2*Y, P^,CopyPut);

Delay (10);

end;

{ Переміщення кулі вздовж лівої сторони екрана}

for I:=1 to GetMaxY-2*Y do

begin

PutImage (1, GetMaxY-2*X-I, P^, CopyPut);

Delay (10);

end;

{ Повторення переміщень до натискання клавіші }

Until KeyPressed;

 

FreeMem (P, Size);

CloseGraph;

end

else

Writeln(GraphErrorMsg(ErrCode));

End.

 

2. ЗАВДАННЯ НА РОБОТУ

 

Розробити та запустити у роботу програму на мові програмування "Паскаль", яка вирішує задачу відповідно до заданого нижче варіанта.

2.1. Безперервно переміщувати по замкнутій еліптичній траєкторії графічний об'єкт, який складається з різнокольорового заповненого трикутника та круга.

2.2. Безперервно переміщувати за зворотно-поступальною траєкторією з лівого верхнього до правого нижнього кута екрана графічний об'єкт, який складається з різнокольорового заповненого п'ятикутника та стовпця.

2.3. Безперервно переміщувати горизонтально між сторонами екрана за зворотно-поступальною траєкторією графічний об'єкт, який складається з різнокольорового заповненого шестикутника та еліпса.

2.4. Безперервно переміщувати за зворотно-поступальною траєкторією з лівого нижнього до правого верхнього кута графічний об'єкт, який складається з трьох різнокольорових концентричних кругів.




Поделиться с друзьями:


Дата добавления: 2014-12-25; Просмотров: 533; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.