Народна Освіта » Інформатика » Алгоритми роботи з об’єктами та величинами в середовищі Lazarus

НАРОДНА ОСВІТА

Алгоритми роботи з об’єктами та величинами в середовищі Lazarus

Основи алгоритмізації та програмування. Консольний режим роботи середовища Lazarus, структура консольної програми, типи даних мови Free Pascal, їх оголошення, засоби їх уведення в текстовому й візуальному режимах. Арифметичні та логічні вирази, операції над рядковими даними. Базові структури алгоритмів, алгоритми з розгалуженнями, програми, оператори циклів із лічильником, передумовою та післяумовою. Програми для малювання геометричних та інших фігур, використання в проектах рисунків із зовнішніх файлів.

6.1. Консольний режим роботи середовища Lazarus

Консольний режим зручно використовувати для вивчення операторів мови програмування та її синтаксичних конструкцій.

Для створення нової консольної програми в середовищі Lazarus потрібно виконати команду Проект —> Новий проект. Потім у вікні, що відкриється, слід виконати команду Консольна програма —> Гаразд. Відкриється вікно Нова консольна програма, у якому не бажано змінювати параметри генерування коду, а слід лише натиснути кнопку Гаразд. На екрані з’явиться вікно редактора тексту, в якому наведена загальна структура програми мовою Free Pascal, тобто певний шаблон, який допомагає і прискорює роботу програміста. Це вікно зображене на рис. 6.1.

У цьому вікні наведено лише фрагмент загальної структури консольної програми мовою Free Pascal, якого досить для пояснення сутності методики розроблення програми. Реально у вікні редактора тексту на комп’ютері буде значно складніша структура. Розглянемо основні компоненти зображеного фрагмента.

Перший рядок - це заголовок програми, який складається з ключового слова program та імені програми Projectl. Це ім’я присвоюється програмі автоматично. За бажанням його можна змінити, наприклад, заголовок може мати такий вигляд: program prog 01.

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

У вікні, зображеному на рис. 6.1, бачимо, що підключено, зокрема, модуль Classes, який забезпечує роботу з компонентами, і модуль SysUtils, призначений для роботи з файлами і каталогами. Не потрібно підключати жодних інших модулів, вони встановлюватимуться за замовчуванням.

Далі починається розділ опису. Тут зазвичай описуються константи, типи і змінні.

 

Між словами begin і end. розміщується тіло програми, яку розробляє програміст.

У тексті програми можуть міститися коментарі, які викопують інформативну роль і не впливають на виконання програми. Коментарі обмежують фігурні дужки або починаються двома косими рисками.

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

Отже, консольне застосування має таку загальну структуру: заголовок програми; uses moduli, modul2,..., modulN; розділ опису; тіло програми;

Більш детально структура консольної програми має такий вигляд:

program ім’я програми;

uses moduli, modul2, ..., modulN;

const опис констант; type опис типів; var опис змінних;

begin //далі розташовані оператори (тіло програми)

операторі;

оператор_2;

onepaTopN;

end. //кінець програми

Тіло програми починається ключовим словом begin. Оператори у мові Pascal відокремлюються один від одного крапкою з комою. Тіло програми закінчується словом end.

Наведемо найпростіший приклад консольної програми: program pro_01;

const а=5; //оголошено константу а

var b, с: integer; //змінні b і с оголошені типу integer

begin

b:=a+8; c:=b+a; //операції додавання і присвоєння значень змінним

writeln (‘с=\ с); //виведення результату на екран readln //затримання зображення на екрані з пові

домленням про результат end.

Після уведення й виконання програми на екрані з’явиться вікно з повідомленням: с=18.

Для завершення виконання програми і зняття з екрана цього вікна слід натиснути клавішу Enter.

Для реалізації цієї програми у віконному режимі до неї необхідно внести відповідні корективи. Програма має набути такого вигляду: program pro 01а; const а=5; var b, с: integer; begin

b:=a+8; c:=b+a;

Label 1.Caption:=’c= ’+FloatToStr (c); end;

На формі розмістимо компоненти Label 1 і Button 1 і надамо їм властивості, показані на рис. 6.2.

Активуємо кнопку Button 1, встановлюємо для неї у вікні інспектора об’єктів подію onclick, двічі клацаємо праворуч від неї кнопкою миші й у вікні редактора тексту вводимо програму. Далі компілюємо її й виконуємо. Після натиснення на кнопку обчислити з’явиться результат, представлений на рис. 6.3.

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

Перевіряємо себе

1. Що вказується в заголовку консольної програми?

2. Що оголошується в розділі опису консольної програми?

3. Що розміщується між ключовими словами begin end?

4. Як позначаються коментарі в консольній програмі?

5. Наведіть загальну структуру консольної програми.

6. Що називають модулем у консольній програмі?

7. Яку функцію виконує модуль SysUtils?

8. Поясніть загальний порядок створення консольної програми.

9. Яка різниця в створенні візуального проекту від консольної програми?

10. Наведіть детальну структуру консольної програми.

Виконуємо

1. Визначте помилки в коді програми: programm п2; const b=21; begin a:=a+b; end.

Створіть консольну програму для додавання двох цілих чисел. Створіть візуальний проект для додавання двох цілих чисел.

Уведіть і виконайте консольну програму в середовищі Lazarus:

4.

 

program rek; const b=3; var a: integer; begin

a:=5*b;

writeln (’a=’, a); readln; end.

5.

 

Доопрацювати програму п. 4 для її реалізації у віконному режимі.

6.2. Дані, змінні, константи

Дані в комп’ютерних системах - це факти, відомості, повідомлення, результати вимірювань, спостережень тощо, подалі в формалізованому вигляді, придатному для їх збереження, опрацювання та передавання. Дані зберігаються в пам’яті комп’ютера й можуть бути різних видів: числові, символьні, логічні та інші.

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

Наприклад, над числовими даними можуть виконуватися арифметичні операції, а над логічними - логічні, з якими ми познайомимося пізніше. Множину значень даних разом із множиною операцій, що може виконуватися над ними, називають типом даних.

Тип даних визначає розмір комірки (ділянки) пам’яті, у якій зберігатиметься те чи інше значення.

Під час виконання програми дані зберігаються в комірках оперативної пам’яті. Якщо значення комірки пам’яті можна змінювати у процесі виконання програми, її вміст називається змінною, інакше - константою. Отже, константа - це значення, що не змінюється протягом усього часу виконання програми.

Мінімальна величина комірки - 1 байт. Для кожного типу даних визначена фіксована кількість байтів. Змінна має ім’я (ідентифікатор), тип і значення. Ідентифікатор слугує для звернення до комірки пам’яті, в яку потрібно записати або з якої прочитати значення.

Змінна в програмуванні - це ділянка пам’яті з присвоєним їй ім’ям (ідентифікатором), у якій зберігаються дані певного типу.

Імена змінних складаються з букв, цифр і символу підкреслення, наприклад, snik, а2, Ь_1, і. Першим символом ідентифікатора не може бути цифра. Мова Free Pascal вимагає обов’язкового оголошення змінних.

Оголосити змінну — означає вказати їі ім’я і тип.

Розділ оголошення змінних розміщується між заголовком програми і словом begin. Він починається словом var і має таку структуру: var <ім’я змінної>:<тип змінної >;

Ім’я змінної відокремлюється від типу двокрапкою. Оголошення змінної завершується крапкою з комою, наприклад, var i:integer;. Декілька однотипних змінних можна оголосити разом, указавши їхні імена через кому, наприклад: var а 1, b_2: real;. Змінні різних типів можна оголосити за допомогою одного слова var, наприклад: var

alpha, nl: integer; //змінні alpha і nl типу integer rh, a_l:real; //змінні rh і a_l типу real Константи описуються за такою структурою: const ім’я константи = значення;

Наприклад:

const

г=5.25; //константа г дійсного типу с=21; //константа с цілого типу

У мовах програмування розрізняють статичні та динамічні дані. Якщо протягом усього періоду виконання програми комірки пам’яті задіяиі постійно, не звільняються і не виділяються для інших даних, то дані, що в них зберігаються, називаються статичними, інакше — динамічними. Далі розглядаються лише статичні типи даних.

Статичні типи даних поділяються на прості (скалярні) та струїстуро-вані.

Прості типи даних є цілісними (атомарними, неподільними) елементами.

Структуровані типи даних складаються з множини елементів.

Прикладами структурованих типів даних є масиви, множини, файли, рядки символів та інші. Будь-яка універсальна мова програмування забезпечує роботу з цілою родиною простих типів даних. Прості типи поділяються на стандартні (базові), які мають зарезервовані ідентифікатори (наприклад, integer, real, boolean) і змінювати їх не можна, й типи, які програміст визначає сам. У цьому підручнику розглядаються лише прості типи даних.

Класифікація простих типів даних мови Free Pascal зображена на DUC. 6.4.

 

Цілочислові, символьні та логічні дані називають порядковим типом даних, позаяк їх легко впорядкувати за певним критерієм. Інші типи даних, наприклад дійсні, впорядкувати складніше.

Цілочислові типи даних. Цей тип даних може займати в пам’яті комп’ютера від 1 до 8 байтів. Усього в мові є дев’ять цілочислових типів даних. Цілі числа можуть записуватись у десятковій і шістнадцятковій системах числення. Перед шістнадцятковими числами ставиться символ $, наприклад, $8А5Р. У табл. 6.1 наведено п’ять найбільш уживаних цілочислових типів даних.

Цілочислові типи даних

Ідентифікатор

типу

Кількість

Байтів

Діапазон

_

byte

1

0 ± 255

word

2

0 ± 65535

longword

4

0 ± 4294967295

shortlnt

1

-

-128 ± 127

integer

4

-2147483648 ± 2147483647

Приклад оголошення цілочислових змінних: var і, j: integer; kl: byte; a 1: word;

Дійсний тип даних. Дійсні числа подаються у спеціальному форматі: М-10р, де М - мантиса; Р - порядок. Мантиса в поданні числа має задовольняти умови 0 < М < 1. Для запису порядку числа використовується два розряди, а для мантиси - від 8 до 20. На записі мантиса відокремлюється від порядку літерою Е. Наприклад, десяткове число 374,5 можна записати так: .3745Е03. У мові Free Pascal існує шість типів дійсних чисел. У табл. 6.2 наведені найбільш уживані з них.

Типи дійсних чисел

Таблиця 6.2

Ідентифікатор типу

Кількість байтів

Кількість цифр у мантисі

Single

4

до 8

Real

8

до 16

Double

8

до 16

Comp

8

до 20

Приклад оголошення змінних дійсного типу: var t 1, t 2: double; rk: real; al: single;

Дані логічного типу. Дані логічного типу можуть набувати лише двох значень: true (істинне) і false (хибне). Типи логічних даних наведені в табл. 6.3.

Таблиця 6.3

Типи логічних даних

Ідентифікатор типу

Кількість байтів

Boolean

1

Bytebool

1

Wordbool

2

Longbool

4

Приклад оголошення змінних логічного типу: var dek, bm: boolean; a 1: wordbool;

Символьні дані. Символьний тип даних позначається словом char. Дані цього типу займають у пам’яті 1 байт. Дані символьного типу - це окремі символи, що записуються в одинарних лапках, наприклад: ’к’, ’а’, ’п’. Приклад оголошення змінних символьного типу: var sam, vl, b_2: char;.

Дані типу дата—час. Цей тип позначається TDateTime. Він призначений для одночасного оголошення дати і часу.

Прості типи даних, які визначає програміст.

Крім простих стандартних типів даних мова Free Pascal надає можливість програмісту самому визначати нові прості типи даних, зокрема, перелічуваний та інтервальний типи.

Для цього застосовується ключове словоtype із такою структурою:

type новий_тип_даних = визначення типу;

Після створення нового типу даних можна оголошувати змінну цього типу:

var список зміниих нового типу : новий_тип_даних; Перелічуваний тип даних. У цьому типі перелічуються значення, яких може набувати змінна. Змінна цього типу оголошується за такою структурою:

var ім’язмінної: (значення_1, значеиня_2,..., значення ^); Приклад оголошення змінних перелічуваного типу: var color: (red, blue, green);

Із прикладу випливає, що змінна color може набути значень red, blue або green.

Приклад:

grivna =(_1, _2, _5, _10, 20, _50, _100, _200, _500); var grl, gr2: grivna;

У цьому прикладі створено новий тип даних grivna й оголошені змінні grl, gr2 цього типу.

Інтервальний тип даних. Цей тип подається границями своїх значень за такою структурою:

var ім’я змінної: мінімальне значення .. максимальне значення; Наприклад: type date=1..30; symb=’a’..’d’;

Із прикладу слідує, що змінна date може набувати будь-якого значення в діапазоні від 1 до ЗО, а змінна symb - будь-яку літеру від а до d. Приклад type days = 1..7; var а_1: days;

У цьому прикладі створено новий тип даних days і оголошена змінна а 1 цього типу, яка може набувати будь-якого значення в діапазоні від ІДО 7.

Значення присвоюються змінним за допомогою оператора присвоєння, який позначається двокрапкою і знаком дорівнює (:=) і має

таку структуру:

сім’я змінної>:=<зпачення>;

Значення - це вираз, змінна, константа або функція. Спочатку обчислюється значення, що потім присвоюється змінній, ім’я якої записане ліворуч від оператора. Значення має бути узгоджене з типом змінної, якій воно присвоюється. Наприклад, якщо змінна а_1 оголошена типу integer, то оператор а 1:=21; буде виконаний правильно, а в операторі a l:=’s’ тип змінної не узгоджений із типом виразу, а тому він виконаний не буде.

Приклад. У програмі рг_2 всі типи змінних і виразів узгоджені, тому програма виконується правильно, program рг 02;

var a, b, с: real; {оголошення змінних а, Ь, с дійсного типу) begin a:=21.4; b:=33.25; {присвоєння змінним a, b дійсних значень} c:=a*b-a/2; {обчислення значення виразу і присвоєння його змінній с} writeln (,сума=% с); {виведення на екран результату} end.

Дані рядкового типу - це рядок символів. На рис. 6.4 його не віднесено до простих типів даних, тому що принципово він є структуровапим типом. Але його часто зараховують не до структурованих, а до скалярних типів даних. Особливої помилки у цьому немає. Це пояснюється тим, що з точки зору структур даних рядки є структурованим типом. Однак завдяки їх широкому застосуванню, для них виділено стандартний ідентифікатор string. Тому з точки зору назви типу рядки можна віднести й до стандартного (базового) типу. Рядкові змінні оголошуються за такою структурою:

var ім’я з мінної: string [довжина_рядка];

Якщо довжина рядка не вказана, то кількість символів у рядку не може перевищувати 255.

Приклад.

var strl: string; str2: string [20];

У цьому прикладі змінна strl може мати до 255 символів, а змінна str2 — до 20 символів. У виразах рядкові дані беруться в лапки, наприклад: ’файл’. Доступ до окремих символів рядка здійснюється за допомогою операції індексування, яка позначається символами [ ]. Наприклад, у результаті виконання операторів з!г1:=’клавіатура’; write (strl[4]); буде виведено символ в.

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

Константи у мові Free Pascal бувають прості й типізовані.

Тип простої константи не потрібно оголошувати, його компілятор розпізнає за її значенням. Наприклад, якщо у програмі трапляється число 27, то компілятор однозначно його сприймає як ціле. У мові Free Pascal використовуються такі типи простих констант: десяткові цілі числа, шістнадцяткові цілі числа, десяткові дійсні числа, символи, рядкові та логічні.

Цілочислові константи записуються в звичайному форматі у допустимому діапазоні, наприклад, 248113, -305.

Дійсні десяткові константи записуються в такому вигляді: <ціла частииа>.<дробова частина>Е<порядок>. Наприклад, 291Е02, -21.25Е-01, що відповідає таким числам: 29100, -2,125.

Шістнадцяткові цілі константи записуються шістпадцятковими символами, яким передує символ $, наприклад, $Е5С, $0А.

Символьна константа - це будь-який символ у лапках, наприклад: ’а’, ’+’. Для перетворення цілого числа в діапазоні 0ч255 на ASCII-символ

використовується функція chr. Наприклад, після виконання операторів a l:=chr(90); a 2:=chr(97) змінна а 1 набуде значення Z, а змінна а_2 - значення а.

Рядкова константа - це будь-яка послідовність символів у лапках, наприклад: ’Київ’, ’а_1+а 2=’. Максимальна довжина рядкової константи становить 255 символів.

Логічна константа має значення true (істинне) або false (хибне).

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

const <ім’я константи>=константа;

Приклади: const і=5; а_1=’н’; b 1=’файл’; b 2=51.25Е-01;.

Типізована константа оголошується з типом і значенням.

Оголошення типізованих констант має таку структуру: const сім’я константи>:Стип>=Сзначення>;

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

Приклади оголошення типізованих констант: const i:integer=l; a l:string=’6aiiT’; b l:boolean=true; x:char=’M’;.

Приклад, program pr 06;

const n:integer=21; m:integer=5; {оголошення типізованих констант)

var y:integer; {оголошення змінної)

begin

y:=n*m; writeln (’y=’,y); {обчислення значення виразу і його виведення }

readln {призупинення виконання програми) end.

За допомогою програми рг_06 обчислюється добуток типізованих констант п і т, який присвоюється змінній у. Це значення виводиться на екран.

Перевіряємо себе

1. Яку мінімальну довжину має комірка пам’яті?

2. Які дані називають статичними?

3. На які типи поділяються статичні дані?

4. Які типи даних є порядковими?

5. Яким словом позначається символьний тип даних?

6. Які значення мають дані логічного тип''?

7. Як позначаються дані логічного типу?

8. Що називають даними в комп’ютерних системах?

9. Що називають типом даних?

10. Які дані називають динамічними?

11. Поясніть сутність простих типів даних.

12. Назвіть основні типи цілочислових даних.

13. Назвіть основні типи дійсних чисел.

14. Наведіть структуру оператора присвоювання.

15. Де зберігаються дані під час виконання програми?

16. На які типи поділяються прості дані?

17. Чому рядкові дані відносять і до скалярних, і до структуроваиих типів?

18. Поясніть, як записуються дійсні числа.

19. Наведіть визначення змінної в програмуванні.

20. За якою структурою оголошуються змінні в мові Pascal*'

21. Назвати типи простих констант мови Ря««я1

22. Наведіть приклади рядкових констант.

23. За якою структурою оголошуються прості іменовані константи?

24. Наведіть приклади логічних констант.

25. Наведіть приклади дійсних десяткових констант.

26. Поясніть сутність простої іменованої константи.

27. Наведіть приклади оголошень простих іменованих констант.

28. За якою структурою оголошуються типізовані константи?

29. Наведіть приклади оголошень типізованих констант.

Виконуємо

1. Запишіть оголошення змінних а і b логічного типу, а змінної с - дійсного.

Знайдіть помилки в оголошеннях: a) var х, y;roal; b) var х; y:boolean; с) vur x:y:integer; d) var x: real; xl=.345E03:real; e) const n:integer=25; m:integer=.51E10. .

3. Доведіть, що в програмі sam_05 відсутні помилки, program sam 05; var a, b, c:real; begin

a:=5; b:=6.6; c:=a+b;

writeln (’c=\ c) end.

 

Запишіть розділ оголошення таких типів змінних: а, Ь - цілі числа; с - дійсні числа; х, у - символьні. А

4.

5.

6.

 

Знайдіть помилки в оголошенні змінних: уаг а_1; а_2:гіаІ; а_3 і:_4:Ьуіе; х:Ьооіеап;. +

Програма вапі Об має забезпечити введення та множення двох цілих чисел. Але в ній є помилки. Проаналізуйте програму, знай

діть у пій помилки, виправте їх. лкии результат оуде отриманий після виправлення помилок?

program sam 06

var а_1; x:integer; var a_2:char; begin

writeln (’увести числа a_l, a 2’) readln (a 1, a 2); x:a_l*a_2 writeln (‘’x=’, x) readln end.

7.

Доопрацюйте програму п. 6 для її реалізації у віконному режимі.

6.3. Уведення та виведення даних

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

6.3.1. Уведення та виведення даних у консольному режимі

Для введення даних з клавіатури в мові Free Pascal використовується два оператори:

read (список імен змінних); readln (список імен змінних);.

Імена змінних списку відокремлюються комою, наприклад, read (beta, trl, а2);. Оператори read і readln відрізняються лише тим, що після виконання оператора readln курсор буде переведений на початок

наступного рядка, а після виконання оператора read він залишається на поточному рядку. Кожний із цих операторів перериває виконання програми й “очікує” введення такої кількості даних, скільки він містить змінних.

Якщо вводяться числові дані, то вони відокремлюються пробілом. Символьні дані пробілом не відокремлюються.

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

Припустімо, що фрагмент програми має такий вигляд:

var al, а2: integer; аЗ: real;

begin

read (al, a2, аЗ);

Якщо з клавіатури будуть уведені числа 21 100 35.25, то змінна а 1 набуде значення 21, змінна а2 - значення 100, а змінна аЗ - значення 35,25. Звернімо увагу, що змінні аі і а2 оголошені цілого типу (integer), а змінна аЗ - дійсного типу (real). Тому обов’язково потрібно вводити перші два числа цілими, а третє може бути як ціле, так і дійсне.

Приклад. Програма обчислення площі прямокутного трикутника за значеннями його катетів може бути такою: program рг_03;

var a, b, s: real; {оголошення змінних} begin

writeln (’увести значення катетів’); {повідомлення про введення значень катетів}

readln (а, Ь); {уведення значень катетів} s:=0.5*a*b; {обчислення площі трикутника}

writeln (’площа=’, s); {виведення значення площі прямокутного трикутника} end.

Значення катетів уводяться з клавіатури й присвоюються змінним а і Ь. Вони мають дійсний тип (real). Обчислена площа трикутника зберігається в змінній s.

Для виведення даних на екран монітора в мові Free Pascal використовуються такі оператори:

write (список значень); writeln (список значень).

До списку значень можуть бути включені змінні, константи, функції, вирази, які відокремлюються комами. Якщо елементом списку значень

є текст, він береться в лапки. Різниця між наведеними операторами полягає лише у тому, що після виконання першого з них курсор залишається на поточному рядку, а після виконання другого - переводиться на наступний. Наприклад, якщо змінні а, Ь, с набувають відповідно таких значень: 20, -37, 125, то в результаті виконання фрагменту програми: var a, b, c:integer; begin

write (а);

write (’ ’, b, ’ ’, c);

ці числа будуть надруковані в одному рядку: 20 -37 125. Звернімо увагу, що змінні в операторі write відокремлені двома пробілами, тому й виведені числа відокремлені також двома пробілами.

Ці ж самі числа в результаті виконання такого фрагмента:

var a, b, с: integer;

begin

writeln (а, ’ ’, b); write (c);

будуть виведені двома рядками:

20 -37 125

Корисно разом із даними виводити повідомлення, яке пояснює їх. Наприклад, у результаті виконання фрагмента програми: var a, b, с: integer; begin

writeln (’а= а, ’ b= ’, Ь, ’ с=’ , с);

числа будуть виведені в одному рядку в такому вигляді: а=20 Ь=-37 с=125.

Приклад. Фрагмент програми, що забезпечує обчислення та виведення на екран площ двох квадратів, program рг_04;

var a, b: integer; {оголошення змінних}

begin

writeln (’уведіть значення а, Ь’); {повідомлення про введення значень змінних}

readln (а, Ь); {уведення значень змінних}

wrineln (’площа першого квадрата =’, а*а); {виведення площі 1-го квадрата}

writeln (’площа другого квадрата =’, b*b) {виведення площі 2-го квадрата} end.

Якщо у процесі виконання наведеної програми будуть уведені числа 7 і 12, то на екран буде виведено: площа першого квадрата =49 площа другого квадрата =144.

Для того щоб у процесі виконання програми в консольному режимі результат виведення на екран можна було одразу прочитати (не натискаючи клавіші АІіЛ-F5), доцільно після операторів виведення поставити порожній оператор readln або read.

Він призупиняє виконання програми, і результат буде показуватися доти, доки не буде натисиута клавіша Enter. З урахуванням цього фрагмент програми рг 04 можна записати так: program рг 05;

var a, b: integer; {оголошення змінних}

begin

writeln (’увести а, Ь’); {повідомлення про введення значень змінних}

readln (а, Ь); {введення значень змінних}

writeln (’площа 1-го квадрата=’, а*а); {виведення площі 1-го квадрата}

readln; {призупинення виконання програми}

writeln (’площа 2-го квадрата=’, b*b); {виведення площі 2-го квадрата}

readln {призупинення виконання програми}

end.

У процесі виконання програми рг_05 вона зупиняється двічі: перший раз після виведення значення площі 1-го квадрата і другий - після виведення значення площі 2-го квадрата.

6.3.2. Уведення і виведення даних у віконному режимі

Для організації введення і виведення даних у віконному режимі існує два способи:

За допомогою вбудованих діалогових вікон ІприїВох і Зйои}Ме8за§е.

Ці вікна не встановлюються у форму. Для їх виведення на екран використовується відповідно функція ІпрігіВох() і функція ShowMessage. У перше вікно вводяться необхідні далі, а в друге - виводяться дані. Ці функції використовуються безпосередньо в коді програми.

За допомогою об’єктів, розташованих на формі.

Для введення та виведення даних використовуються різні об’єкти, наприклад, однорядкові ТЕгіи, ТЬаЬеІ і багаторядкові ЬівІВох, ТМето. Об’єкти ТЕгїИ; і ТМето можуть застосовуватися як для введення, так і для виведення даних. Розглянемо спочатку приклади використання об’єкта TEdit для введення і об’єкта ТЬаЬеІ для виведення. Інші об’єкти опишемо пізніше під час їх використання.

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

Необхідно завжди пам'ятати, що система Lazarus сприймає значення властивостей Caption і Text компонентів Edit і Label як рядковий тип.

Перетворення даних рядкового типу на інші типи здійснюється за допомогою таких функцій:

StrToFloat (s) - перетворює символи рядка s на дійсне число.

StrToInt (s) — перетворює символи рядка s на ціле число.

StrToDateTame (s) - перетворює символи рядка s на дату і час.

Зворотне перетворення здійснюється за допомогою функцій:

FloatToStr (v) - перетворює дійсне число v на рядок.

IntToStr (v) - перетворює ціле число v на рядок.

DataTimeToStr (v) - перетворює дату і час v на рядок.

Властивості об’єктів

Таблиця 6.4

Об’єкт

Caption

Text

Font

Color

Шрифт

Стиль

Розмір

Label 1

Перше

число

 

Times

New

Roman

Курсив

12

 

Label2

Друге число

 

Times

New

Roman

Курсив

12

 

Label3

Сума

 

Times

New

Roman

Жирний

курсив

12

cl Yellow

Labe 14

Добуток

 

Times

New

Roman

Жирний

курсив

12

cl Yellow

Editl

 

Пробіл

Times

New

Roman

Жирний

12

clSkyBlue

Edit2

 

Пробіл

Times

New

Roman

Жирний

12

clSkyBlue

Button 1

Обчислити

 

Times

New

Roman

Жирний

12

 

У Інспекторі об’єктів для властивості Text об’єкта Editl уведемо число 12, а для об’єкта Edit2 - число 8. У результаті маємо отримати орієнтовно такий зміст форми, який зображено на рис. 6.5.

Для об’єкта Buttonl вибираємо подію onclick і вводимо такий програмний код:

procedure TForml.ButtonlClick(Sender: TObject);

var a, b, s, p: real;

begin

a:=StrToFloat (Editl.Text); b:=StrToFloat (Edit2.Text); s:=a+b; p:=a*b;

Label3. Caption:=’ Сума= ’+FloatToStr (s); Label4.Caption:=’flo6yTOK=’+FloatToStr (p); end.

Після успішної компіляції запускаємо програму на виконання і потім натискаємо кнопку Обчислити. Маємо отримати результат, зображений на рис. 6.6.

Перевіряємо себе

1. Які оператори використовуються для введення даних із клавіатури?

2. Запишіть структуру оператора read.

3. Запишіть структуру оператора readln.

4. Які оператори використовуються для виведення даних на екран?

5. Назвіть способи введеппя/вивєдеиня даних для графічного інтерфейсу.

6. Яка різниця між операторами read і readln*'

7. Запишіть структуру оператора write.

8. Запишіть структуру оператора writeln.

9. Яка різниця між операторами write і writeln?

10. Поясніть сутність уведення даних за допомогою компонента Edit.

11. Поясніть сутність виведення даних за допомогою компонента Label

12. Наведіть приклади запису оператора readln.

13. Для чого в програмі використовується порожній оператор readln?

14. Наведіть приклади запису оператора writeln.

15. Чи можна в операторі writeln використовувати логічний вираз?

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

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

Виконуємо

1. Змінні а, b і с оголошені символьного типу. Після виконання оператора readln (іа, с, Ь) були введені такі символи: h, r, w. Визначити значення змінних а, Ь, с. А

2. У процесі введення даних змінні а і b набули значень відповідно 135 і 27. Знайти значення, що буде виведене на екран після виконання оператора writeln (’сума=’, а+Ь).

3. Проаналізуйте і виконайте програму sam 07. program sam 07;

var a, b, c , x: real; begin

writeln (’увести числа a, b, c’); readln (a, b, c); x:=a*b-c; writeln (’x=% x); readln end.

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

Розробіть консольну програму для обчислення значення виразу: а/ b+(a/b-3b), в якому змінні а і b набувають цілочислових значень. Доведіть, що програма виконується правильно.

Визначте синтаксичні помилки в програмі sam_08.

pogram sam 08; var a, b, c;real; begin

writln (увести a, b’); readln (a, b(; c:=a+2b-a/b; writeln (”c=’, c) end.

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

Консольна програма sam_09 розроблена для обчислення значення виразу 4*(а_1+а_2). Але в програмі є помилки, program sam 09; var а_1. а_2: integer; begin; writeln (*”) a_3:=(a_l+a_2)*4; writeln (”a_3=”, a_3) end.

Виправіть помилки в програмі й доведіть, що вона функціонує правильно.

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

Визначте помилки в програмному коді програми з елементами графічного інтерфейсу: var аі, а2, аЗ: iteger; begin

al:=StrToFloat (Editl.Text); y:=al*a2-al;

Label 1.СаоПоп:=’Результат=’+Е1оа^о8іг (у); end.

6.4. Вирази, операндн та операції

Вираз складається із операндів (констант, змінних і функцій), знаків операцій і круглих дужок і визначає порядок виконання операцій над даними.

Константи, змінні та функції називають операндами виразу. Найпростіший вираз складається з одного операнда: константи, змінної або функції. Приклади виразів: а+2*с— (а*Ь); (-21.5/с+4)*Ь/а.

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

6.4.1. Арифметичні вирази

У арифметичних виразах мови Free Pascal використовуються операції додавання (+), віднімання (-), множення (*), ділення (/), цілочислове ділення (div) й остача від ділення (mod).

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

1. Забороняється застосовувати підрядкові та надрядкові символи. Наприклад, вираз З*(а2+Ь) неправильний, правильним є вираз З*(а*а+Ь).

2. Операції необхідно вказувати явно. Не можна писати 21(а+Ь), правильним є запис: 21*(а+Ь).

3. Не можна записувати дві операції безпосередньо одна за одною. Наприклад, вираз а*—b є некоректним, його слід записати так: а*(—Ь).

4. Кожній дужці, що відкривається, у виразі має відповідати дужка, що закривається.

5. Типи операндів виразів мають бути узгоджені. Не можна, наприклад, додавати символ до числа. Але в деяких випадках узгодження типів викопується автоматично. Наприклад, якщо викопується арифметична операція над числами, одне із яких ціле, а друге дійсне, то ціле число буде перетворене на дійсне, після чого операція виконуватиметься над дійсними числами. Результатами операцій додавання, віднімання і множення є цілі числа, якщо обидва операнди також є цілими числами, в інших випадках будуть отримані дійсні числа. Результатом операції ділення завжди є дійсне число.

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

Правила пріоритету операцій такі:

спочатку обчислюються значення функцій, потім виконуються операції множення і ділення, а після цього - операції додавання та віднімання. Якщо у виразі є круглі дужки, то насамперед виконуються ті операції, які записані в них. Наприклад, значення виразу (a+b) +a*(c+d) обчислюється так: спочатку визначається сума (а+b), потім - (c+d), остання сума множиться на а, і до цього результату додається перша сума.

Приклад. Програма рг_07 обчислює значення арифметичного виразу 3,5(а2+Ь):(2Ь-а), в якому а і b - дійсні числа, що вводяться з клавіатури, program рг 07;

var a, b, y:real; {оголошення змінних}

begin

writeln (’уведіть числа а і Ь’); {повідомлення про введення} readln (а, Ь); {уведення значень змінних}

y:=((a*a+b)*3.5)/(2*b-a); {обчислення значення арифметичного виразу} writeln (’у=% у); {виведення результату}

readln {призупинення виконання програми}

end.

6.4.2. Логічні вирази

Результатом обчислення значення логічного виразу може бути лише одне зі значень: true (істинно) або false (хибно). Логічні вирази складаються з логічних операндів, логічних операцій та круглих дужок. Операндами можуть бути результати операцій порівняння, яких у мові Free Pascal шість: > (більше), < (менше), = (дорівнює), <> (не дорівнює), >= (більше або дорівнює), <= (менше або дорівнює). Наприклад, якщо х=2, а у=7, то результатом операції порівняння х>у є false, тому що х не більше у, а результатом порівняння 4*х>у є true.

Основними логічними операціями є такі: not (ні), and (і), or (або), хог (виключне або). Ці операції ще називають відповідно операціями заперечення, кон’юнкції, диз’юнкції та додавання за модулем 2. Результати виконання наведених логічних операцій над логічними виразами А і В, які набувають логічних значень, наведені в табл. 6.5.

Таблиця 6.5

Результати виконання логічних операцій

А

в

not А

A and В

А or В

А хог В

Істинно

Істинно

Хибно

Істинно

Істинно

Хибно

Істинно

Хибно

Хибно

Хибно

Істинно

Істинно

Хибно

Істинно

Істинно

Хибно

Істинно

Істинно

Хибно

Хибно

Істинно

Хибно

Хибно

Хибно

Як бачимо з табл. 6.5, результат операції not є істинним, якщо логічний вираз є хибним, і, навпаки, хибним, якщо вираз є істинним. Результат операції and є істинним за умови, що обидва вирази є істинними. Результат операції or є істинним, якщо істинним є хоча б один із виразів А чи В. Результат операції хог є хибним, якщо значення змінних збігаються.

Логічні операції мають такий пріоритет: not, and, or, хог.

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

Нехай змінні мають такі значення: х=1, у=2, 2=3. Тоді значення виразу: ((х>г/) ог (х<г)) апб (по^(х>0) ог (у>г))) обчислюється в такій послідовності: спочатку обчислюється значення виразу ((х>у) ог (х<2)), який набуває значення істинне, потім обчислюється значення виразу (х>0) ог {у>г), який також набуває значення істинне. Над останнім виразом виконується операція заперечення, тому він набуває значення хибне. Останньою виконується операція and і вираз набуває значення хибне.

Нижче наведена програма, що реалізує розглянутим приклад, program рг_08;

var х, у, z:integer; s:boolean; {оголошення змінних}

begin

writeln (’увести значення змінних’); {повідомлення про введення} readln (х, у, z); {уведення значень змінних}

s:=((x>y) or (x<z)) and (not((x>0) or (y>z))); {обчислення значення логічного виразу}

writeln (’результат^, s); {виведення результату}

readln {призупинення виконання програми}

end.

Якщо виконати програму для значень змінних x=5, z/=4, 2=6, то отримаємо результат false.

Логічні операції можуть виконуватися і над двійковими даними. У табл. 6.6 наведені результати виконання цих операцій над двійковими числами Oil.

Таблиця 6.6

Результати виконання логічних операцій над двійковими даними

А

В І

not А

A and В

A or В

А хог В

-

0

0

1

0

0

0

0

1

1

0

1

1

1

0

0

0

1

1

----

1

0

1

1

0

Наприклад, якщо А=01110110 і В=10111100, то в результаті виконання операції A and В буде отримано такий результат:

А

0

1

1

1

0

1

1

0

В

1

0

1

1

1

1

0

0

A and В

0

0

1

1

0

1

0

0

6.4.3. Операції над рядковими даними

Кілька рядків можна об’єднати в один рядок за допомогою операцїі об'єднання, яка позначається символом додати (+). Наприклад, у результаті виконання операції:

’середо’+’вище’+’ ’+’Lazarus’ отримаємо: середовище Lazarus. Рядки можна порівнювати між собою.

Наприклад, у результаті виконання операції ’abc’>’ab’ отримаємо true, а у результаті виконання операції ’abc’=’ab’ - false.

Можна звертатися до окремих символів рядка. Наприклад, у результаті виконання фрагмента програми:

var s:string; begin

s:=’npou;ecop’; writeln (s[5]);

на екрані отримаємо символ е.

Якщо до програми підключений модуль System, то доступними для опрацювання рядків є такі функції і прцедури.

Функції:

length(s) - повертає довжину рядка s ; concat(sl, s2) - об’єднує рядки si і s2 ;

copy(s, n, m) - із рядка s копіюється m символів, починаючи з позиції п. pos (si, s2) - повертає номер позиції, з якої рядок si входить у рядок s2. Процедури:

delete (s, n, m) - із рядка s вилучається m символів, починаючи з позиції п.

insert (si, s, m) - у рядок s вставляється рядок si, починаючи з позиції т.

Нижче подано код програми, у якій демонструється використання деяких функцій над рядковими даними, program prog 10; var si, s2, s3: string; begin

з1:=’процесор’;

з2:=’цес’;

зЗ:=’новий’;

writeln (’довжина=’, length (si));

writeln (’перших б символів: ’, copy (si, 1, 6));

writeln (’цеє починається з № ’, pos (s2, si));

writeln (’після об’єднання: ’, concat (s3, ’ ’, si));

writeln (’на позиції №5: ’, sl[5]);

readln;

end.

У результаті виконання цієї програми на екран буде виведено: довжина=8

перших 6 символів: процес цес починається з № 4 після об’єднання: новий процесор на позиції № 5 : е

Перевіряємо себе

1. Які типи виразів є у мові Pascal?

2. Яким може бути найпростіший вираз?

3. Які існують константи в мові Pascal?

4. Як записуються константи цілих чисел?

5. Як записуються символьні константи?

6. Які значення може мати логічна константа?

7. Із яких елементів складається арифметичний вираз?

8. Викопайте операцію or над двійковими числами 10100011 і 01010001.

9. Наведіть правила запису арифметичних виразів.

10. Яких результатів набувають логічні операції and і or?

11. Поясніть сутність операції pos над рядками si і s2.

12. Наведіть приклад використання функції length над рядком.

Виконуємо

Проаналізуйте й уведіть програму samlO.

program sam 10;

const al:integer=21; a2:integer=4;

var a3:real;

begin

a3:=(al*aH-a2)/2-al/a2; writeln (’a3=\ a3) end.

Ця програма розроблена для обчислення значення виразу ((al)2+a2)/2-al/ а2. Виконайте програму і доведіть, що вона функціонує правильно. 1

2. Визначте, за яких допустимих значень змінної х вираз not((x=3) or (х>5)) набуде значення істинне, а за яких - хибне.

3. Проаналізуйте й уведіть програму sam ll, яка обчислює значення виразу ((а<10) and (b>7)) or (a>b).

program sam_11;

const a:integer=4; b:integer=12; var c:boolean; begin

c:=((a<10) and (b>7)) or (a>b); writeln (’c=% c) end.

Виконайте програму і покажіть, що вона функціонує правильно.

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

Розробіть програму для обчислення значення арифметичного виразу а(Ь+с)/(а-с).

Розробіть програму для обчислення значення логічного виразу ((x>31and fv=5Yl or fx=v). Значення змінних уволяться за допомогою клавіатури.

Проаналізуйте програму sam_12, яка обчислює значення логічного виразу ((х=у) or (х>у)) and (х=5). Виправіть помилки та введіть програму.

program sam 12; const x:integer=20; var y:=integer; c:boolean; begin

writeln (‘’увести у’) readln (у);

c:=((x=y) or (x>y)) and (x=5) writeln (‘c=’, c); readln end.

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

Розробіть фрагмент програми, у якій використовуються функції length, insert, copy над рядками: фрагмент, мен і пам’яті.

6.5. Розроблення програм для реалізації лінійних алгоритмів

Розглянемо декілька прикладів розроблення програм для лінійних алгоритмів.

1. Комп’ютер видає на екран запит учневі: “Ваше ім’я”. Після його введення висвітлюється новий запит - “’у якому ви класі?”. Після уведення відповіді на друге запитання на екрані висвітлюється: “Ви навчаєтеся ...у класі”.

Позначимо ім’я учня змінною х, а клас - змінною у. Уважатимемо, що максимальна довжина імені учня і назви класу не перевищує 10 символів. Нижче подано програму, що реалізує описаний алгоритм, program nil 10;

var х, у: string [10]; {оголошення змінних рядкового типу}

begin

writeln (’як Вас звати?’); {прохання ввести ім’я} readln (х); {уведення імені}

writeln (’у якому ви класі?’); {прохання ввести клас}

readln (у); {уведення класу}

writeln (х, ’, Ви навчаєтеся у ’ , у, ’класі’); {виведення імені і

класу}

readln {призупинення виконання програми}

end.

2. Василь, Галина і Петро збирали гриби. Потім вони зважили зібрані гриби й поділили між собою порівну. Розробимо програму, за допомогою якої визначається, скільки кілограмів грибів дісталося кожному.

Позначимо масу грибів, зібраних Василем, змінною а, масу грибів Галини - змінною Ь, а масу грибів Петра - змінною с. Змінна s - загальна маса грибів. Програма, що реалізує це завдання, має ім’я nll ll. Виконайте програму для різних значень змінних і доведіть, що вона функціонує правильно, program nil_11;

var a, b, с, s: real; {оголошення змінних дійсного типу}

begin

writeln (’увести а, Ь, с’); {повідомлення про введення значень змінних}

readln (а, Ь, с); {уведення значень змінних}

s:=(a+b+c)/3; {обчислення середнього значення}

writeln (’середнє=’, s); {виведення середнього значення} readln {призупинення виконання програми}

end.

3. У квадрат зі стороною а вписано круг. Розробимо програму визначення різниці площ квадрата і круга.

Уважатимемо, що значення змінної а вводиться з клавіатури. Позначимо площу квадрата змінною s1 площу кола змінною s2, а різницю площ квадрата і круга - змінною г. Один із варіантів програми, що реалізує завдання, подано нижче, program nil 12;

var a, si, s2, r: real; {оголошення змінних дійсного типу}

begin

writeln (’увести значення змінної а’); {повідомлення про

введення значення змінної а}

readln (а); {уведення значення змінної а}

sl:=a*a; {обчислення значення площі квадрата}

s2:=3.14*sl/4; {обчислення значення площі круга}

r:=sl-s2; {обчислення різниці площ}

writeln (’різниця=’, г); {виведення різниці площ} readln {призупинення виконання програми}

end.

Виконайте програму і переконайтеся, що для значення змінної а=4 результат різниці г=3.4400000000Е+00.

4. Відстань між пунктами А і В дорівнює І км. Одночасно назустріч один одному з пункту А починає бігти учень Микола, а з пункту В -їхати на велосипеді учениця Оля. Швидкість руху Миколи дорівнює і>1 км/год, а Олі - и2 км/год. Потрібно розробити програму, що визначає, через скільки годин вони зустрінуться.

Уважатимемо, що значення всіх змінних уводяться за допомогою клавіатури. Позначимо час до зустрічі змінною t. Програму виконання поставленого завдання можна подати в такому вигляді, program nil_13;

var t, 1, vl, v2: real; {оголошення змінних дійсного типу}

begin

writeln (’увести значення 1, vl, v2’); {повідомлення про введення значень змінних}

readln (1, vl, v2); уведення значень змінних}

t:=l/(vl+v2); {обчислення часу зустрічі}

writeln (’зустрінуться через ’, t, ’ годин’); {виведення обчисленого результату}

readln {призупинення виконання програми}

end.

Виконайте програму і доведіть, що вона функціонує правильно.

5. У басейні ємністю 10000000 л залишилося р літрів води. До нього підведені дві помпи, одна з яких щохвилини подає в басейн а літрів води, а друга за кожну хвилину викачує b літрів води (а>Ь). Потрібно розробити програму, що визначає, через скільки хвилин басейн буде повний, за умови, що помпи вмикаються одночасно.

Використаємо такі змінні: t - кількість хвилин, за яку басейн наповниться повністю; т - кількість літрів води, яку потрібно накачати, щоб басейн був повний. Програма, що реалізує наведене завдання, може мати такий зміст, program nil_14;

var р, a, b, m, t: real; {оголошення змінних дійсного типу}

begin

writeln (’увести значення змінних р, а, Ь’); {повідомлення про введення}

readln (р, а, Ь); {уведення значень змінних р, а, Ь}

т:=10000000-р; {кількість літрів, які потрібно долити}

t:=m/(a-b); {обчислення часу наповнення басейну}

writeln (’наповниться через ’,t,’ хвилин’); {виведення результату} readln {призупинення виконання програми}

end.

Виконуємо

1. Розробіть алгоритм і програму обчислення значення функції у=(ох-1) (.х+1)+х2 для будь якого значення х.

2. Розробіть алгоритм і програму обчислення значення функції у=(а2+Ь+с)/ (а2+Ь+с—4ас) для додатних значень а, b, с за умови, що знаменник не дорівнює нулю.

Автомобіль і пішохід одночасно розпочали рух з пункту А в пункт В, які розташовані на відстані 1 км один від одного. Автомобіль, досягши пункту В, не затримуючись, повертає і рухається в пункт А. Через 4 години після початку руху він зустрічає пішохода на відстані 1/4 від пункту А. Розробіть алгоритм і програму для визначення, з якою швидкістю рухалися автомобіль і пішохід?

Відстань від Харкова до Полтави автошляхом дорівнює 144 км. О 8 годині ранку з Харкова у напрямку до Полтави починає рух велосипедист зі швидкістю р км/год. О 10 годині ранку з Полтави у напрямку до Харкова починає рух мотоцикліст. Розробіть алгоритм і програму у візуальному середовищі Lazarus для визначення, з якою середньою швидкістю повинен рухатися мотоцикліст, щоб їхня зустріч відбулася на середині шляху.

Завдання. Є кімната, довжина якої т м, ширина п мі висота /і м. У одній стіні є двері висотою к1 м і шириною пі м, а в другій - вікно шириною п2 м і висотою Л2 м. Скільки повних рулонів шпалер шириною 1 м і довжиною 10 м потрібно, щоб обклеїти стіни кімнати?

Підказка: Значення параметрів рулонів шпалер можна ввести як типізовані константи, а для обчислення кількості повних рулонів використати “заокруглення вгору”.

1. Розробити програму обчислення потрібної кількості рулонів шпалер.

2. Увести програму. Виконати її компіляцію. Виправити усі синтаксичні помилки й запустити програму на виконання.

3. Довести, що програма виконується правильно.

4. Зберегти програму.

Завдання.

1. Розробити віконний інтерфейс програми обчислення потрібної кількості рулонів (Практична робота № 10).

2. Виконати компіляцію. Виправити всі синтаксичні помилки й запустити програму на виконання.

3. Відкоригувати розміри, колір об’єктів на формі, виконати компілювання програми в остаточному вигляді.

4. Довести, що програма виконується правильно.

5. Зберегти програму.

СЛОВНИЧОК

Структуроваш типи даних - дані, що об єднуються у структури (масиви, записи, множини тощо)

Дані логічного типу - дані, що набувають лише двох значень (true і false) Символьний тип даних - окремі символи

Рядковий тип даних - послідовність символів довжиною до 255 знакомісць Операнди виразу - константи, змінні та функції, значення яких (повернуті якими) використовуються для обчислення значення, яке має повернути вираз

Стандартні функції - найчастіше вживані функції, для обчислення значень, якими розроблені спеціальні програми

6.6. Розроблення програм для реалізації алгоритмів із розгалуженнями

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

if <умова> then <оператор>;

if <умова> then <оператор 1> else <оператор 2>;

Тут if (якщо), then (то), else (інакше) - зарезервовані слова, <умова> — довільний логічний вираз, соператор 1> і <оператор 2> — довільні оператори.

Перший оператор реалізує одноальтернативне розгалуження, другий - двохальтернативне.

Зазначмо, що перший тип оператора умовного переходу називають його скороченою формою.

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

Приклад 1. Розглянемо такий фрагмент програми тестування учня, в якій змінна vidpovid призначена для введення учнем відповіді на чергове запитання, змінна prav містить правильну відповідь, а змінна ocinka містить накопичену оцінку до відповіді на запитання: if vidpovid = prav then ocinka := ocinka + 1;

При виконанні вказаної команди спочатку буде перевірена умова vidpovid = prav, яка буде істинною, якщо учень дасть правильну відповідь, і в цьому випадку виконається оператор ocinka := ocinka + 1, тобто оцінка учня зросте на 1 бал. Якщо ж учень дасть неправильну відповідь, то значення умова vidpovid = prav буде хибним, команда розгалуження завершить роботу й оцінка залишиться без змін.

Оператор умовного переходу, записаний у повній формі, виконується так. Спочатку обчислюється значення булевого виразу <умова>. Якщо умова істинна, то виконується соператор 1> і керування передається наступному за умовним оператору (<оператор 2> пропускається). Якщо ж умова хибна, то <оператор 1> пропускається, а виконується лише <оператор 2> і на цьому дія умовного оператора завершується.

Звернімо увагу на таку синтаксичну деталь. Символ “ ; ” є символом, що відокремлює оператори. Оскільки умовний оператор завершується діями, які записані після слова else, то запис крапки з комою перед else є синтаксичною помилкою.

Зазначимо, що після ключових слів then та else можуть бути розташовані інші оператори умовного переходу. Така конструкція використовується, якщо є більше двох можливих варіантів дій. Розглянемо програму, в якій один оператор умовного переходу вкладено в іншій. Приклад 2. Обчислимо значення такої функції:

{х + 3, якщо х < 4 1, якщо 4 < х < 5 2х + 4, якщо х > 5

Блок-схема розв’язування задачі представлена на рис. 6.7. За цією блок-схемою складемо програму. Гілка “ні” першого розгалуження, якій відповідає слово else оператора if, містить друге розгалуження. Тому після слова else першого оператора if слід записати другий оператор умовного переходу, program п 2; var x,y:real; begin

writeln (’уведіть х’);

readln (х); {уведення значення змінної х}

{обчислення значення функції) if х<4 then

у:=х+3

else

if x>5 then

y:=2*x+4

else

y:=l;

writeln (’у=’»У)і {виведення значення функції} end.

Зазначимо, що в логічних виразах, які використовуються в операторах умовного переходу, інколи доцільно застосовувати логічні операції (not, or, and). Використання цих операцій дає можливість скоротити кількість операторів умовного переходу.

Приклад 3. Напишемо програму для обчислення значення функції:

{k + х, якщо х < 0,5 і k > 1

2k - xt інакше

program n 3; var x,k,y:real; begin

writeln (’уведіть x,k’);

read (x,k); {уведення значень змінних x,k}

{обчислення значення функції} if (x<0.5) and (k>=l) then y:=k+x else y:=2*k-x;

writeln (,у=%У); {виведення значення функції} end.

У мові Pascal дія ключових слів then та else поширюється лише на один, наступний, оператор.

Якщо в разі істинності або хибності певного логічного твердження необхідно виконати кілька операторів, то їх слід оточити операторними дужками, роль яких відіграють ключові слова begin і end. if <умова> then begin

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

•••

<оператор N>

end

else

begin

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

•••

<оператор М> end;

Якщо логічний вираз <умова> істинний, виконуватимуться оператори <оператор 1>, <оператор N>, якщо хибний - оператори <оператор К>, <оператор М>. Групу операторів, що розпочинається зі слова begin, а завершується словом end, можна розглядати як один складений оператор. Розглянемо приклад використання складеного оператора. Приклад 4. Напишемо програму для обчислення значення функції:

р = у[х - у, якщо х > 1 і у < 4

q = \х > у\, якщо х > 1 і у < 4

інакше t = х/у program п 4; var

х, у, р, q, t: real; begin

writeln (’уведіть x,y’);

readln (x,y); {уведення значень змінних x,y} if (x>l) and (y<4) then

{перевірка умови}

begin

p:=sqrt(x)-y; {обчислення значення функції p} q:=abs(x+y); {обчислення значення функцій q} writeln (p, ‘ ‘, q) {виведення значень функцій p та q}

end

else

begin

t:=x/y; {обчислення значення функції t} writeln (t) {виведення значення функції t}

end;

end.

6.7. Розроблення програм для реалізації алгоритмів із повтореннями для опрацювання величин

Оператори циклу призначені для реалізації циклічних алгоритмічних структур. Можливі дві принципово різні ситуації:

• кількість повторень відома наперед;

• кількість повторень заздалегідь визначити неможливо.

Зрозуміло, що управління циклом у цих випадках здійснюється

по-різному. У першому випадку управління здійснюється за допомогою параметра циклу - змінної, яка послідовно змінює своє значення, а в другому випадку використовується умова - вираз логічного типу, від значення якого залежить виконання чи завершення циклу.

У мові Раэса! реалізовано три різновиди операторів циклу:

• цикл з лічильником,

• цикл з передумовою,

• цикл із післяумовою.

Будь-який оператор циклу складається з двох частин: заголовка циклу й тіла циклу.

У заголовку циклу записуються умови, за яких виконання циклу триватиме або завершиться, а в тілі циклу містяться оператори, виконання яких потрібно повторювати.

Оператор циклу з лічильником

Оператор циклу з параметром (або, як його ще називають, циклу з лічильником) має такий синтаксис:

їог <змінпа> := спочаткове значепня> іо скінцеве зпаченпя> гіо <оператор> або

їог <змінна> := спочаткове значення> гіо\упіо Скінцеве значення> гіо <оператор>

Тут

їог, Іо, гіо\Упіо, гіо - службові слова;

<змінна> - ідентифікатор деякої змінної порядкового типу даних, яка називається лічильником;

Спочаткове значення> - вираз, тип якого збігається з типом лічильника і його значення стає початковим значенням лічильника;

Скінцеве значеныя> - вираз, тип якого збігається з типом лічильника і задає його кінцеве значення;

<оператор> - оператор тіла циклу.

Робота цього оператора здійснюється за таким алгоритмом.

1. Обчислюється початкове значення.

2. Це значення присвоюється параметру.

3. Обчислюється кінцеве значення.

4. Порівнюється значення параметра з кінцевим значенням.

5. Якщо воно перевищує ( у випадку з використанням слова to) кінцеве значення або менше (у випадку з використанням слова downto), ніж кінцеве значення, то оператор циклу завершує роботу. У іншому випадку виконується тіло циклу і значення параметра змінюється на наступне (попереднє); відбувається перехід до пункту 4.

Особливо слід підкреслити, що:

• і початкове, і кінцеве значення обчислюються до виконання оператора циклу і більше не перераховуються;

• ідентифікатор змінної є параметром циклу і згідно зі стандартом не повинен змінюватися всередині оператора циклу, нехтування цим правилом може призвести до непередбачуваних наслідків;

• після завершення циклу значення параметра циклу вважається не визначеним.

Приклад 1. Вивести таблицю квадратів натуральних чисел другого десятка.

for п := 11 to 20 do writeln(n, n * n: 5);

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

for ch := ‘Z’ downto ‘A’ do write(ch: 2);

Якщо тіло циклу містить більш ніж один оператор, то ці оператори записуються в операторних дужках begin...end;.

Приклад 3. Використання складеного оператора в тілі циклу:

for і:=1 to n do

begin

s:=s+a;

у:=2*х

end;

Оператор while...do

Цикл із передумовою реалізується оператором while...do, синтаксис якого наведено нижче. У цьому операторі умова продовження циклу перевіряється перед початком кожного виконання операторів тіла циклу, while <логічний вираз> do {заголовок циклу)

<оператор>; {тіло циклу)

Оператор тіла циклу виконуватиметься доти, доки істинним буде логічний вираз, який вказаний у заголовку циклу. Якщо в тілі циклу міститься декілька операторів, то вони беруться в операторні дужки begin...end;. Блок-схема оператора while...do зображена на рис. 6.8.

 

Приклад 4. Із клавіатури послідовно вводяться і додаються цілі числа, які не перевищують 10.

Процес потрібно завершити при введенні числа більше 10.

Програма, що розв’язує цю задачу, наведена нижче.

program п14 1;

var х, s: integer; {оголошення змінних типу integer}

begin

s:=0; x:=0; {початкові значення змінних}

while х<10 do {початок циклу}

begin

s:=s+x; {обчислення суми введених чисел}

writeln (’увести х’); {повідомлення про введення} readln (х) {уведення числа}

end;

writeln (‘s=’, s); {виведення значення суми}

readln {призупинення виконання програми}

end.

Оператор repeat...until

Цикл із післяумовою реалізується оператором repeat...until, у якому умова завершення циклу перевіряється після коленого виконання операторів тіла циклу. Синтаксис цього оператора такий: repeat

 

<оператори> {тіло циклу}

until <логічний вираз> {заголовок циклу}

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

Після останнього оператора в тілі циклу repeat... until символ не записується. Оператори тіла циклу з післяумовою можна не брати в операторні дужки, навіть, у тому випадку, коли їх декілька.

Блок-схему оператора repeat...until зобраяееио на рис. 6.9.

Приклад 5. Наведемо програму знаходження найбільшого спільного дільника цілих чисел, які вводяться з клавіатури. У програмі реалізовано алгоритм Евкліда. program п14 2;

var a, b: integer; {оголошення змінних цілочислового типу}

begin

writeln (‘увести значення а, Ь’); {повідомлення про введення} readln (а, Ь); {уведення значень а, Ь}

repeat {початок циклу}

if a>b then a:=a-b; {оператор тіла ціклу}

if b>a then b:=b-a {оператор тіла циклу}

until a=b; {перевірка умови завершення циклу}

writeln (’НСД=\ а); {виведення результату}

readln {призупинення виконання програми}

end.

У деяких задачах всередині операторів циклу доцільно використовувати оператори break і continue.

Перший із них перериває виконання циклу, а другий перериває виконання операторів тіла циклу і передає керування його заголовку.

Приклад 6. Розглянемо гру. Двоє гравців домовилися кидати гральні кості по черзі не більше 1000 разів. Виграє той, хто набере більшу суму балів. Однак гравці можуть кидати кості лише доти, доки суддя не підніме червоний прапорець. Нижче наведено фрагмент програми, яка моделює гру:

for і:=1 to 1000 do {заголовок циклу}

begin

<оператори тіла циклу>;

if prapor=’червоний’ then

break {якщо підняти червоний прапорець,

цикл завершити}

end; {кінець циклу}

Перевіряємо себе

1. Для чого використовуються оператори циклу?

2. Яку структуру має оператор циклу repeat...until?

3. Які ключові слова використовуються в операторі циклу з параметром?

4. Як виконується оператор циклу while...do?

Виконуємо

1. Визначте, що буде виведено в результаті виконання фрагменту програми: var і, у, b: integer; begin

у:=1; b:=4;

for і:=2 to b do у:=у+1;

у=у*у;

writeln (у); end;

2

 

Розробіть програму для розв’язування таких задач:

а) вивести значення >/х для парних чисел х у діапазоні від 2 до 10;

б) визначити суму цілих додатних непарних чисел, які менші ЗО.

 

Завдання. Створити алгоритм, описати його мовою Паскаль, увести й налагодити програму.

1. Задано два парних числа а± і а2. Знайдіть суму всіх непарних чисел, більших а1, але менших а2. а1 = 20; а2 = 60.

2. Для випробування нового автомобіля вирішено першого дня проїхати г км, а кожного наступного дня збільшувати пробіг на у відсотків порівняно з попереднім днем. Через скільки днів дистанція пробігу досягне в км? 2 = 00; у = 3; в = 500.

3. Прямокутні паралелепіпеди мають в основі квадрат зі стороною г, висота першого дорівнює к, а висота кожного наступного збільшується на т.. Висота останнього дорівнює Н. Знайдіть об’єм кожного паралелепіпеда. г = 5; к = 3; 2 = 0.2; Н = 5.

Підказка: Звернути увагу на вибір ідентифікаторів для висот паралелепіпедів.

4. З яблуні було знято т яблук і покладено порівну в п кошиків

(т>гі), але декілька яблук залишилося (менше ніж п). Скільки яблук покладено в кожний кошик і скільки залишилося? т = 37; п = 7.

Створення геометричних та інших фігур, використання у проектах рисунків із зовнішніх файлів.

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

Як відомо, основними засобами праці художника є полотно, олівці, пензлі, акварельні фарби тощо. Фактично такі ж віртуальні засоби має і середовище Lazarus. Художник, малюючи, наносить на полотно точки, лінії, кола, квадрати та інші графічні примітиви різного кольору, стилю й товщини. До деякої міри аналогом таких дій художника в системі Lazarus є спеціальні підпрограми, які створюють найпростіші графічні зображення.

6.8.1. Створення графічних зображень у середовищі Lazarus

Підпрограми, які виконують такі функції, називають методами,.

Для створення графічних зображень середовище Lazarus містить спеціалізовані класи, основними з яких є TCanvas (канва, полотно), TFont (шрифт), ТРеп (перо) і TBrush (пензель).

Об'єкти, пов'язані з цими класами, автоматично створюються для всіх видимих елементів і доступні через їх властивості Canvas, Font, Pen і Brush.

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

Графічне зображення виводиться на поверхню об’єкта (найчастіше форми Form). Поверхні об’єкта Form для рисування відповідає властивість Canvas. Отже, Canvas - це властивість об’єкта Form, це полотно, що розміщується на формі.

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

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

Координати (0, 0) - це лівий верхній кут канви. Координати зростають зверху вниз і зліва направо. Значення координат правої нижньої точки

полотна залежить від його розміру. Розмір можна дізнатися, звернувшись до властивостей Height і Width об’єкта, на якому виконується малюнок. Кольори пікселів задаються властивістю Pixels. Змінити колір будь-якого піксел я на об’єкті Forml можна за допомогою команди:

Form 1.Canvas.Pixels [X, Y]:=Color;, де Color - змінна або константа типу ТСоїог.

Найчастіше вживані значення властивості Color містяться в табл. 6.7.

Таблиця 6.7

Основні значення властивості Color

Значення

Назва

Значення

Назва

clGreen

зелений

clAgua

блакитний

clGray

Сірий

clBlak

чорний

clRed

червоний

clGray

сірий

clBlue

Синій

cl Yellow

жовтий

cJWhite

Білий

clTeal

бірюзовий

Колір будь-якого пікселя об’єкта Forml можна отримати за допомогою команди: Color:=Forml.Canvas.Pixels [X, Y];, де Color - змінна типу ТСоїог.

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

Нагадуємо, що після запуску Lazarus необхідно виконати команду Проект—>Новий проект... й у вікні, що відкриється, виконати команду Програма—>Гаразд.

У результаті з’явиться вікно форми, у яке розмістимо поле для рисування TPaintBox (цей компонент розташований на вкладці Additional) і об’єкт TButton. Е інспекторі об’єктів можна встановити деякі властивості цих об’єктів. Наприклад, для об’єкта PaintBoxl встановимо значення Width 150 (ширина по х) і значення Height 120 (висота по у).

Активуємо об’єкт Buttonl, вибираємо в інспекторі об’єктів на вкладці Події подію onclick і двічі клацаємо кнопкою миші праворуч від назви цієї події. У вікні редактора тексту автоматично буде створена процедура: procedure TForml. Buttonl Click (Sender: TObject); begin end;

Між словами begin end потрібно написати код, за допомогою якого створюватиметься графічне зображення. Для рисування прямокутника використовується метод Rectangle. Для рисування його на об’єкті PaintBoxl можна скористатися командою:

PaintBoxl.Canvas.Rectangle (xl, yl, x2, y2);

де х{ та у 1 - координати лівого верхнього кута прямокутника, а х2 та у2 - координати його правого нижнього кута. З урахуванням зазначеного код рисування прямокутника набуде змісту, зображеного на рис. 6.10.

 

 

Після успішної компіляції програми запускаємо програму і натискаємо кнопку ВиіЬопІ. З’явиться прямокутник, зображений па рис. 6.11.

Якщо потрібно, щоб методи малювання виконувалися безпосередньо після запуску програми (без використання кнопки Витопі), то слід для форми вибрати в інспекторі об’єктів подію ОпРаіпі і створити код, наприклад такий, який представлений на рис. 6.12.

Після запуску цього проекту на формі одразу з’явиться прямокутник.

 

Перевіряємо себе

1. Назвіть основні класи для створення графічних зображень.

2. Які основні об’єкти використовуються для рис\'пяття?

3. Назвіть основні значення властивості Color.

4. З чого складається полотно?

5. Яку систему координат має полотно?

6. За допомогою якої команди можна па формі нарисувати прямокутник?

7. Як можна отримати колір піксела об’єкта Forml?

8. Як для об’єкта ВиПопІможпа встановити подію onclick?

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

(шрифти);

(олівець, перо);

(пензель).

6.8.3. Графічні інструменти

Клас ТРеп слугує для створення об’єкта перо, призначеного для креслення ліній і контурів. Він має такі основні властивості:

* Color - визначає колір ліній, що кресляться пером;

* Style - визначає стиль (вид) ліній;

* Width - товщина ліній у пікселях.

Тип Style - визначено як перелічений тип, можливі значення якого наведені в табл. 6.8.

Таблиця 6.8

Стилі ліній

Стиль

Значення

psSolid

Суцільна лінія (значення за замовчуванням)

psDash

Штрихова лінія

psDot

Лінія з крапок (пунктирна)

psDashDot

Штрих-пунктирна лінія

psDashDotDot

Штрих-пунктир-пунктирна лінія

psClear

Відсутність ліній

 

Властивості класу ТРеп за замовчуванням мають такі значення: Color=clBlack, Mode=pmCopy, Style=psSolid, Width=l.

Клас TBrush. Цей клас визначає колір і зразок для заливання замкнутих фігур. Він має такі властивості:

Bimap - слугує для запису растрового зображення, що використовується при заповненні пензлем;

Color - колір пензля;

Style - стиль пензля.

За замовчуванням властивість Color має значення cl White (білий), а властивість Style - значення bsSolid (суцільна лінія). Якщо властивості Style присвоєне значення bsClear, значення властивості Color ігнорується, але в неї записується значення cl White. Цей клас також має свої методи, які тут не розглядаються.

Клас TFont. Шрифт має такі характеристики, як ім’я, стиль, розмір. Його основні властивості:

Charset - номер набору символів. За замовчуванням властивості присвоюється значення DEFAULT CHARSET;

Color - колір шрифту;

Height - висота шрифту в екранних пікселях;

Style - стиль шрифту. За замовчуванням використовуються звичайні символи.

Тип Style може мати такі значення:

- fsBold - жирний шрифт;

- fsltalic - курсив;

- fsUnderline - шрифт, підкреслений однією прямою лінією;

- fsStrikeOut - шрифт, перекреслений однією прямою лінією.

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

6.8.4. Методи класу TCanvas

Клас TCanvas створює канву, на якій можна рисувати пером, пензлем і вводити текст шрифтом. У класі TCanvas є достатня кількість методів для роботи з графічними інструментами Pen, Brush і Font. Нижче наведені ті з них, які застосовуються найчастіше і які ми використовуватимемо в процесі розроблення проектів.

1. Методи для роботи з пером:

MoveTo (X, Y: Integer) - переміщує перо в зазначену точку без креслення лінії;

LineTo (X, Y:Integer) - креслить відрізок прямої лінії від поточного положення пера до зазначеної точки, не захоплюючи останню;

Arc (XI, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4:Integer) - креслить дугу еліпса, вписаного у прямокутник зі сторонами, паралельними межам канви, і двома кутами в точках (XI, Y1) і (Х2, Y2). Початок дуги міститься в точці перетину променя, що проходить через центр еліпса і точку (ХЗ, Y3), а кінець дуги - на перетині променя, що проходить через центр еліпса і точку (Х4, Y4).

Розробимо програму побудови на формі двох ліній і дуги. Перша лінія червоного кольору, товщина - за замовчуванням; починається в точці з координатами 10, 10 і закінчується в точці з координатами 100, 10. Друга лінія синього кольору, стиль - пунктир, колір - синій. Лінія починається в точці з координатами 10, 40 і закінчується в точці з координатами 100, 40. Дуга зеленого кольору, стиль і товщина - за замовчуванням.

Програма реалізації цього завдання зображена на рис. 6.13.

У результаті виконання програми отримаємо зображення, представлені на рис. 6.14.

2. Методи для роботи з пером і пензлем:

Rectangle (XI, Yl, Х2, Y2: Integer) - креслить прямокутник зі сторонами, що паралельні межам канви, й діагоналлю, заданою вершинами в точках (XI, Y1) і (Х2, Y2), із заповненням його актуальним пензлем;

RoundRect (XI, Yl, Х2, Y2, ХЗ, Y3: Integer) - креслить прямокутник зі згладженими кутами. Перші чотири параметри аналогічні параметрам методу Rectangle, а параметри ХЗ і Y3 задають відповідно ширину й висоту прямокутника, що охоплює еліпс, дуги якого використовуються для згладжування кутів;

Ellipse (XI, Yl, Х2, Y2: Integer) - креслить еліпс в охоплюючому прямокутнику і заповнює його актуальним пензлем відповідно до властивостей останнього;

Chord (XI, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4: Integer) - креслить дугу еліпса, сполучаючи кінці дуги хордою і заповнюючи отриману фігуру пензлем;

Pie (XI, Yl, Х2, Y2, ХЗ, Y3, Х4, Y4: Integer) - виконує такі ж дії, які і метод Chord, але кінці дуги сполучаються відрізками прямої з центром еліпса (створюється сектор еліпса).

Для скорочення тексту програми в ній на початку коду доцільно використовувати оператор with. Він забезпечує доступ до властивостей і методів об’єкта Canvas. Він має таку структуру: with Canvas do begin. На рис. 6.15 зображено код будови еліпса червоного кольору й сектора зеленого кольору з використанням оператора with.

 

 

Звернемо увагу на те, що розміри еліпса обмежені квадратом, тому в цьому випадку буде побудоване коло. У результаті виконання програми отримаємо геометричні фігури, зображені на рис. 6.16.

3. Методи для роботи з пензлем:

ППКесі (хі, уі, х2, у2) - прямокутник зафарбовується пензлем актуального кольору.

РгатеКесІ (хі, уі, х2, у2) - прямокутник обводиться пензлем актуального кольору. Розробимо код побудови двох прямокутників різних розмірів, розташованих один під одним. Область верхнього прямокутника має синій колір, а нижній обводиться пензлем зеленого кольору і не зафарбовується. Код програми, що будує на формі таке зображення, поданий на рис. 6.17, а результат його виконання - на рис. 6.18.

4. Методи для роботи зі шрифтом:

Розглянемо лише метод TextOut (X, Y, Text), який виводить рядок Text так, щоб лівий верхній кут прямокутника, що його охоплює, розміщувався в точці (X, Y). Перо наразі переміщається у правий верхній кут виведеного прямокутника.

На рис. 6.19 показано програмний код побудови трьох геометричних фігур, усередині кожної з них наведена їх назва.

На рис. 6.20 зображено результат виконання програмного коду. Розробимо ще один код для створення на формі трьох геометричних фігур, варіант яких зображено на рис. 6.21.

Код, що відображає ці геометричні фігури з текстом, поданий на рис. 6.22.

 

 

Перевіряємо себе

1. Які інструменти використовуються для виведення фігур і тексту?

2. Назвіть основні властивості об’єкта перо.

3. Назвіть основні властивості об’єкта пензель.

4. Які значення властивостей має об’єкт пензель?

5. Назвіть основні властивості шрифту.

6. Які існують стилі ліній?

7. Які значення властивостей класу ТРеп застосовуються за замовчуванням?

8. Які значення властивостей має шрифт?

9. Назвіть основні методи для роботи з пером.

10. Назвіть основний метод для роботи зі шрифтом

11. Назвіть основні методи для роботи з пензлем.

12. Наведіть приклад команди для креслення хорди.

13. Наведіть приклад команди для креслення сектора.

14. Наведіть приклад команди для креслення еліпса.

15. Наведіть приклад команди для креслення багатокутника.

Виконуємо

1.

 

Розробіть код для креслення піраміди, зразок якої зображено на рис. 6.23

 

Порівняйте розроблений код із кодом, зображеним на рис. 6.24. Укажіть переваги та недоліки кожного з них.

procedure TForml.SucconlClicJciSender: TObject); begin

with Canvas do begin Pen.Width:»3;

Pen.Color:BclBlack;

Polygon ([Point(115,10),Point(45,150),Point(165,150), Point(200,120),Point (115,10),Point (165,150)]); MoveTo (45,150);

Pen.Style:“psDash;

LmeTo(80,120); LineTo(200,120) ;

MoveTo (115,10);

LineTo (80,120); end; end; end.

Рис. 6.24. Код побудови піраміди

Розробіть код, за допомогою якого зображується квадрат, у який вписане коло. Колір і стиль ліній оберіть самостійно. +

2.

3.

4.

 

Розробіть код для креслення фасаду дачного будиночка.

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

Порівняйте розроблений код із кодом, наведеним на рис. 6.26. Визначте переваги та недоліки кожного з них.

 

 

5.

6.

 

Розробіть код для креслення конуса.

Розробіть код для креслення зображення, поданого на рис. 6.27. Використайте оператор циклу.

Розроблену програму порівняйте з програмою, наведеною на рис. 6.28. Укажіть переваги й недоліки кожної з них.

6.8.5. Відображення рисунків із зовнішніх файлів

Середовище Lazarus забезпечує виведення на форму готових графічних зображень із зовнішніх файлів. Базовим класом для цього є описаний у модулі Graphics абстрактний клас TGraphic та його підкласи ТІсоп, TBitmap, TMetafile, TImage. Виведення графічних зображень здійснюється зазвичай на компонент TImage, який міститься на вкладці Additional. Компонент TImage підтримує виведення ілюстрацій у багатьох форматах, у тому числі в форматах bmp, ico, jpeg. Основні властивості цього компонента подані в табл. 6.9.

Основні властивості компонента TImage

Таблиця 6.9

Властивість

Опис

Picture

Ілюстрація, що відображується в полі компонента

Width, Height

Розмір компонента. Якщо розмір компонента менший ніж розмір ілюстрації і значення властивостей AutoSize, Strech і Proportional дорівнює false, то зображується лише частина ілюстрації

Proportional

Виконується автоматичне масштабування ілюстрації без викривлення. Щоб масштабування було виконане, значення властивості має дорівнювати true

Stretch

Автоматичне масштабування ілюстрації відповідно до реальних розмірів компонента. Якщо розмір компонента пе пропорціоиальиий розміру ілюстрації, то ілюстрація буде викривлена. Ця властивість пе впливає на рисунки типу ісо

AutoSize

Автоматична зміна розміру компонента відповідно до реальних розмірів ілюстрації

Center

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

Visible

Компонент й ілюстрація розташовуються на поверхні форми

Canvas

Поверхня, на яку можна вивести ілюстрацію

Графічні зображення із зовнішніх файлів можна присвоїти компоненту Image вручну, під час розроблення інтерфейсу, а також програмно, в процесі виконання проекту.

А. Відображення зображень у процесі розроблення інтерфейсу

Спосіб полягає у присвоєнні властивості Picture компонента TImage імені файла, в якому зберігається зображення, яке потрібно розмістити на компоненті. Відобразимо, наприклад, файл Р6130628, у якому зберігається фото Михайлівського собору. Дотримуватимемося такої послідовності дій:

1. Щоб не вказувати повний шлях до файла Р6130628, скопіюємо його в папку, в якій створюватимемо проект. Обираємо, наприклад, папку LAZAR диска F:.

2. Уже відомим способом створимо проект.

3. Розміщуємо на формі компонент TImage (міститься на вкладці Additional).

4. Активуємо компонент TImage і в інспекторі об’єктів надаємо значення true властивості Proportional. Клацаємо рядок Picture і натискаємо в цьому рядку кнопку з трьома крапками.

5. Відкриється вікно Діалог завантаження зображення — Image 1. Picture. У цьому вікні натискаємо кнопку Завантажити. У вікні з’явиться файл Р6130628, який ми скопіювали в папку LAZAR (рис. 6.29).

 

 

Ім’я цього файла переносимо в рядок Ім’я файла.

6. Натискаємо кнопку Відкрити й у вікні, що відкриється, натискаємо кнопку Гаразд. У результаті зміст файла відображатиметься на об’єкті Image (рис. 6.30).

Рис. 6.30. Фото на об’єкті Image

Б. Відображення зображень у процесі виконання коду

Для відображення на компоненті TImage графічного зображення за допомогою цього способу використовується метод LoadFromFile (), що належить об’єкту Picture.

Розглянемо приклад відображення на компоненті TImage 1 змісту файла 12.23.tif.

Дотримуватимемося такої послідовності дій:

1. Скопіюємо файл 12.23.tif у папку LAZAR, у якій створюватимемо проект.

2. Створимо проект.

3. Розмістимо па формі компоненти TImagel і TButtonl. Властивості Caption об’єкта Buttonl надамо значення Показати. Активуємо об’єкт Imagel і в Інспекторі об’єктів встановлюємо значення true властивості Proportional.

4. Двічі клацаємо кнопкою миші на об’єкті Buttonl.

5. У текстовому редакторі набираємо код, поданий на рис. 6.31.

 

6. Виконаємо компіляцію і запустимо програму на виконання. Відкриється вікно форми, в якому натискаємо кнопку Показати. У результаті відкриється зміст файла 12.23.tif, зображений на рис. 6.32.

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

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

 

Перевіряємо себе

1. На який компонент форми здійснюється виведення графічних зображень із зовнішніх файлів?

2. Яке призначення має властивість AutoSize?

3. Поясніть призначення властивості Proportional.

4. Поясніть сутність відображення графічних зображень у процесі розроблення інтерфейсу.

5. Для чого файл із графічним зображенням копіюється в папку проекту?

6. Який метод застосовується для відображення графічного зображення?

7. Поясніть порядок розміщення графічного зображення в процесі створення графічного інтерфейсу.

8. Поясніть порядок розміщення графічного зображення у процесі виконання програмного коду.

Виконуємо

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

Створіть у графічному редакторі Paint рисунок і збережіть його у файлі. Створіть код для розміщення цього рисунка на компоненті Image. +

Знайдіть у Іитериеті фото Андріївського узвозу в Києві й збережіть його у файлі. Відобразіть знайдене фото на компоненті Image у процесі створення інтерфейсу. -*

Знайдіть у Іитериеті фото Києво-Печерської лаври й збережіть його у файлі. Створіть код відображення змісту цього файла на компоненті Image. Додайте на форму відомості про фото Києво-Печерської лаври у вигляді окремого текстового об’єкта. +

Завдання

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

Cловничок

Дані логічного типу - дані, що приймають лише два значення (true і false) Змінна в програмуванні - ділянка пам’яті з присвоєним їй ім’ям (ідентифікатором), у якій зберігаються дані певного типу Константа - це величина, значення якої не змінюється у процесі виконання програми

Модуль - окрема спеціальна програма, яка розширює можливості мови програмування

Операнди виразу - константи, змінні й функції Рядковий тип даних - послідовність символів довжиною до 255 Символьний тип даних - окремі символи, що записуються в одинарних лапках

Стандартні функції - найчастіше вживані функції, для яких розроблені спеціальні програми

Структуровані типи даних - дані, що об’єднуються в структури (масиви, записи, множини та інші)

Категорія: Інформатика

Автор: admin от 21-11-2016, 09:53, Переглядів: 25929