- •2.2. Алгоритми та їх властивості. Форми подання алгоритмів
- •2.3. Комп’ютерні програми і мови програмування. Етапи розв’язування задач з використанням комп’ютера
- •Додати до рис. 2.8 після логічні ще два блоки – Функціональні та Інші
- •V етап. Отримання комп’ютерної моделі
- •Vі етап. Дослідження отриманих результатів на реальність і на відповідність умові
- •IV етап. Складання алгоритму розв’язування задачі
- •V етап. Складання комп’ютерної програми
- •Vі етап. Налагодження програми, дослідження отриманих результатів на реальність і на відповідність умові.
- •Vіі етап. Використання програми
- •2.4. Мова програмування Delphi та середовище розробки Turbo Delphi 2006
- •Практична робота № 5
- •2.5. Події та їх обробники
- •Практична робота № 6
- •2.6. Налагодження програм
- •Практична робота № 7
- •2.7. Основні поняття математичної логіки
- •2.8. Розгалуження в алгоритмах і програмах
- •Практична робота № 8 «Складання програм з розгалуженнями»
- •2.9. Цикли в алгоритмах і в програмах
- •Практична робота № 9 «Програмування циклічних обчислень»
- •2.10. Процедури і функції користувача та стандартні процедури і функції в Delphi
- •Практична робота № 10 «Використання підпрограм»
- •2.11. Одновимірні масиви
- •Практична робота № 11 «Опрацювання одновимірних масивів»
Практична робота № 9 «Програмування циклічних обчислень»
Увага! Під час роботи з комп’ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.
Відкрийте середовище візуального проектування Turbo Delphi 2006.
Створіть проект для розв’язування задачі: Перед початком повені рівень води у річці становив Н метрів. Під час повені кожну годину рівень води зростав на Р відсотків від рівня попередньої години. Яким буде рівень води через N годин після початку повені? Через скільки годин після початку повені рівень води буде не менше, ніж К метрів?
Розмістіть на формі поля для введення початкових даних, написи із текстами, що будуть пояснювати їхні призначення та три кнопки.
Установіть на першій кнопці напис Питання 1, на другій – Питання 2, на третій – Спочатку, у полів – порожній текст.
Складіть обробник події OnClick першої кнопки, виконання якого приведе до виведення у вікно повідомлення відповіді на перше запитання задачі.
Виконайте складену процедуру і переконайтеся, що результати її роботи правильні.
Складіть обробник події OnClick другої кнопки, виконання якого приведе до знаходження відповіді на друге запитання задачі і виведення його в окремий напис.
Виконайте складену процедуру і переконайтеся, що результати її роботи правильні.
Складіть обробник події OnClick третьої кнопки, виконання якого призведе до очищення тексту у полях та напису з відповіддю на друге запитання задачі.
Створіть у власній папці папку Практична 9 і збережіть у ній проект.
2.10. Процедури і функції користувача та стандартні процедури і функції в Delphi
Пригадайте!
Що таке процедура?
Що таке обробник події? Як створити обробник події?
Який загальний вигляд процедур-обробників подій, які ви створювали в Delphi?
Які змінні називаються локальними, а які глобальними? Поясніть різницю між ними.
Як у Delphi змінити числовий тип змінної на текстовий і навпаки?
Процедури користувача в Delphi
У попередніх пунктах ви створювали і використовували процедури, які були пов’язані з певними подіями і були методами певних об’єктів. Заготовки цих процедур середовище розробки створювало автоматично, а ви доповнювали ці заготовки командами і рядком var опису змінних.
При створенні програм можна включати до проекту процедури, не пов’язані з подіями. Такі процедури називаються процедурами користувача. Їх найчастіше використовують у випадках, коли потрібно кілька разів при різних значеннях змінних виконувати одні й ті самі операції: обчислювати площу і периметр трикутників або інших геометричних фігур, вибирати більше з двох чисел, визначати, просте число чи ні, та інші. Або коли задачу можна поділити на окремі підзадачі, кожна з яких розв’язується за окремим алгоритмом, тобто при використанні методу покрокової деталізації.
Процедура користувача, як й інші процедури – це відокремлена частина програми, яка має своє ім’я і яка може бути викликана для виконання в будь-якій іншій частині програми.
Процедури користувача можуть бути:
без аргументів і без результатів;
з аргументами і без результатів;
без аргументів і з результатами;
з аргументами і з результатами.
Запам’ятайте!
Аргументи процедури – це змінні, які отримують свої значення в команді виклику процедури перед початком виконання команд процедури.
Результати процедури – це змінні, які передають свої значення з процедури певним змінним в команді виклику процедури.
Найчастіше використовують процедури останнього типу. Загальний вигляд цих процедур у Delphi такий:
procedure <ім’я> (<списки аргументів з їхніми типами>; var <списки результатів з їхніми типами>);
var (<списки локальних змінних процедури з їхніми типами>);
begin
<команди>
end;
Загальний вигляд команди виклику процедури з аргументами і результатами такий:
<ім’я> (<списки виразів, значення яких передаються аргументам процедури>, <списки змінних, яким передають свої значення результати процедури>);
Звертаємо вашу увагу: у команді виклику процедури порядок виразів, значення яких передаються аргументам процедури, і змінних, яким передають свої значення результати процедури, повинен строго відповідати порядку запису аргументів і результатів процедури в рядку її заголовка.
Оформимо як процедуру фрагмент програми, який обчислює НСД двох натуральних чисел. У цієї процедури два аргументи – два натуральні числа, НСД яких потрібно знайти, і один результат – їхній НСД. Виглядатиме ця процедура так:
procedure МCD (a, b: Integer; var c: Integer);
var r: Integer;
begin
r := a mod b;
while r <> 0 do
begin
a := b;
b := r;
r := a mod b;
end;
c := b;
end;
Викликати на виконання цю процедуру для одержання значення НСД двох конкретних натуральних чисел можна, наприклад, такою командою: МCD (35, 77, х). Виконуватися ця команда буде так:
Змінні a і b (аргументи процедури) одержують значення 35 і 77 відповідно.
Виконуються команди процедури.
Змінна с (результат процедури) передає своє значення змінній х, вказаній у команді виклику процедури.
Отже, в результаті виконання вказаної команди виклику процедури змінна х одержить значення 7.
У команді виклику цієї процедури в дужках на перших двох місцях, що відповідають аргументам процедури, можуть стояти не тільки константи, а й змінні, які на момент виконання команди виклику мають певні натуральні значення. Тобто при виконанні команди МCD (к, р, х) аргументи процедури a і b одержать значення змінних к і р відповідно. На цих місцях можуть стояти також арифметичні вирази, значення яких будуть обчислені на початку виконання команди виклику процедури і ці значення будуть передані аргументам процедури, наприклад, МCD (2*к+3, 3*р-1, х).
Звертаємо вашу увагу:
Аргументи та результати процедури можуть бути одними й тими самими змінними, тобто допустима процедура із заголовком Procedure One (var a, b:Integer). У такої процедури змінні a і b є одночасно і аргументами і результатами. Команда виклику цієї процедури виглядатиме так: One (x, y).
Процедура може серед своїх команд мати команду виклику іншої процедури.
Запам’ятайте!
Змінні, які вказані в заголовку процедури, називаються формальними параметрами процедури.
Змінні, які вказуються в команді виклику процедури, називаються фактичними параметрами процедури.
Проілюструємо зручність використання процедур користувача (зокрема, процедури знаходження НСД двох натуральних чисел) на прикладі такої задачі.
З
Рис. 2.59. Програма
додавання двох звичайних дробів з
використанням процедури НСД
Рис. 2.60. Виконання
програми додавання двох звичайних
дробів
У наведеному тексті проекту (рис. 2.59) процедура викликається двічі. Перший раз для знаходження НСД знаменників дробів. Цей НСД у наступній команді використовується для знаходження найменшого спільного знаменника дробів (НСК (х, у) = х*у/НСД(х, у)). Другий – для знаходження НСД чисельника і знаменника дробу-суми з метою його подальшого скорочення. Без використання процедури текст цього проекту збільшився б, погіршилась би його структурованість.
Функції користувача в Delphi
Як зазначалося вище, процедура може не мати результатів, а може мати один або більше результатів. Якщо процедура має один результат, то зручніше її оформити і викликати як функцію користувача.
Функція користувача, як і процедура користувача – це відокремлена частина програми, яка має своє ім’я і яка може бути викликана для виконання в будь-якій іншій частині програми.
Відрізняється функція від процедури таким:
Рядок заголовка функції виглядає так:
function <ім’я> (<списки аргументів з їхніми типами>): <тип результату >;
Значення, яке функція повинна повернути (передати) команді, яка її викликає, в тексті самої функції має бути присвоєно змінній, ім’я якої збігається з іменем функції.
Функція може бути викликана або в правій частині команди присвоювання, або в команді виведення.
Якщо обчислення НСД оформити як функцію, то програма виглядатиме так (рис. 2.61):
Рис. 2.61. Програма
додавання двох звичайних дробів з
використанням функції НСД
Зверніть увагу не тільки на відмінності в оформленні процедури і функції, а й на відмінності в їх виклику і використанні в програмах, наведених на рис. 2.59 і 2.61 (табл. 2.3):
Таблиця 2.3. Відмінності у виклику процедури і функції
-
Використання процедури МCD
Використання функції МCD
MCD(den1, den2,z);
den := den1*den2/z;
den := den1*den2/ MCD(den1, den2);
MCD(den, nom, k);
k :=MCD(den, nom);
Процедури користувача і функції користувача називаються підпрограмами користувача.
Стандартні процедури і функції в Delphi
У мові програмування Delphi можна використовувати великій набір стандартних процедур і функцій, призначених для виконання різноманітних операцій над числами, текстами, елементами керування, графічними об’єктами, файлами та ін.
Деякі з них ви вже використовували, наприклад, функцію StrToInt для переведення тексту в ціле число, функцію FloatToStr для переведення дійсного числа в текст, функцію sqrt для обчислення арифметичного квадратного кореня з дійсного числа.
Розглянемо ще кілька стандартних математичних функцій та їхнє призначення (табл. 2.4).
Таблиця 2.4. Приклади стандартних математичних функцій у Delphi
Функція |
Кількість аргументів та їх типи |
Результат |
Тип результату |
Abs |
1, цілий або дійсний |
Модуль числа |
Той самих, що й в аргументу |
Arctan |
1, дійсний |
Арктангенс числа (в радіанах) |
Дійсний |
Cos |
1, дійсний |
Косинус числа |
Дійсний |
Exp |
1, дійсний |
Експонента числа (ех) |
Дійсний |
Frac |
1, дійсний |
Дробова частина числа |
Дійсний |
Int |
1, дійсний |
Ціла частина числа |
Дійсний |
Ln |
1, дійсний |
Натуральний логарифм числа |
Дійсний |
Pi |
0 |
Число |
Дійсний |
Power |
2, дійсні |
І аргумент у степені ІІ аргумент |
Дійсний |
Random |
0 |
Випадкове число від 0 до 1 |
Дійсний |
Random |
1, цілий |
Випадкове ціле число від 0 до значення аргументу–1 |
Цілий |
Sin |
1, дійсний |
Синус числа |
Дійсний |
Sqr |
1, дійсний |
Квадрат числа |
Дійсний |
Звертаємо вашу увагу:
При виклику функції без аргументів потрібно вказувати лише її ім’я, наприклад, х := Pi.
Перед першим використанням функції Random потрібно включити до тексту проекту команду виклику процедури Randomize без аргументів і без результатів, яка запустить генератор випадкових чисел.
Для використання функції Power потрібно в рядок Uses тексту проекту додати текст Math. Після цього до проекту підключиться додаткова бібліотека стандартних процедур та функцій і стане можливим використання ще цілого ряду математичних та інших процедур і функцій, з якими ви можете ознайомитися в Довідці.
Перевірте себе
º Що таке процедури користувача? Якими вони можуть бути?
· У яких випадках доцільно використовувати процедури користувача? У чому полягають переваги їхнього використання?
· Який загальний вигляд процедур користувача з аргументами та з результатами?
º Що таке аргументи процедури; результати процедури?
· Який вигляд має команда виклику процедури з аргументами і результатами?
º Що таке формальні параметри процедури і фактичні параметри процедури? Поясніть різницю між ними.
º Що таке функція користувача?
· Чим функція користувача відрізняється від процедури користувача?
* Який загальний вигляд функції?
· Які ви знаєте стандартні процедури і функції в Delphi? Охарактеризуйте їх.
* Знайдіть у Довідці інформацію про процедури без аргументів і без результатів, з аргументами і без результатів, з аргументами і без результатів. Наведіть приклади їхнього використання.
Виконайте завдання
º Запишіть заголовок процедури з іменем stepin, аргументами якої є змінна a дійсного типу і змінна b цілого типу, а результатом – змінна с дійсного типу, і приклад команди її виклику.
(ДЗ) º Запишіть заголовок процедури з іменем chastka, аргументами якої є дві змінні дійсного типу a, b, а результатами – змінна с дійсного типу та змінна f логічного типу, і приклад команди її виклику.
· Запишіть процедуру з іменем simp, яка здійснює перевірку, чи є дане натуральне число простим і повертає як результат значення змінної f логічного типу – ознаку того, чи є число простим, і значення змінної k цілого типу – кількість дільників даного числа.
(ДЗ) · Запишіть процедуру з іменем square, яка виконує обчислення площі трикутника за відомими довжинами його сторін, значення яких передаються до процедури як аргументи. Для обчислення площі використайте формулу Герона.
· Створіть проект, в якому обчислюється площа трикутника за відомими координатами його вершин. Для обчислення площі використайте формулу Герона. Використайте процедуру обчислення довжини відрізка за координатами його кінців. Створіть у власній папці папку Проект 2.10.5 і збережіть у ній проект.
(ДЗ) · Створіть проект, в якому для двох заданих на площині точок з цілими координатами визначається, чи лежать вони в одній координатній чверті. Використайте процедуру для визначення координатної чверті, у якій розміщена точка з заданими координатами. Створіть у власній папці папку Проект 2.10.6 і збережіть у ній проект.
º Запишіть заголовок функції з іменем length, аргументами якої є чотири змінні цілого типу, а результат має дійсний тип, і приклад команди її виклику.
(ДЗ) º Запишіть заголовок функції з іменем step, аргументами якої є змінна a дійсного типу і змінна b цілого типу, а результат має дійсний тип, і приклад команди її виклику.
º Запишіть функцію, яка виконує обчислення довжини відрізка за відомими координатами його кінців. Запишіть команду виклику цієї функції для обчислення довжини відрізка а з координатами кінців (0, 0) та (20, 30).
(ДЗ) · Запишіть функцію, в якій обчислюється значення факторіалу заданого натурального числа n (n! = 1*2*3*…*n). Запишіть команду використання цієї функції для обчислення суми факторіалів перших п’яти натуральних чисел.
º Створіть проект, в якому можна знайти максимальне з чотирьох заданих різних цілих чисел. Використайте функцію для знаходження більшого з двох заданих цілих чисел. Створіть у власній папці папку Проект 2.10.11 і збережіть у ній проект.
· Створіть проект, в якому для двох заданих цілих чисел визначається, яке з них має більшу суму цифр. Використайте функцію для знаходження суми цифр заданого цілого числа. Створіть у власній папці папку Проект 2.10.12 і збережіть у ній проект.
(ДЗ) · Створіть проект, в якому для двох заданих цілих чисел визначається, яке з них має більшу суму дільників. Використайте функцію для знаходження суми дільників заданого цілого числа. Створіть у папці Мої документи папку Проект 2.10.13 і збережіть у ній проект.
* Створіть проект, в якому для заданого цілого числа визначається, чи є одночасно простим саме число і число, записане тими самими цифрами, взятими у зворотньому порядку. Використайте функцію для визначення того, чи є число простим. Створіть у власній папці папку Проект 2.10.14 і збережіть у ній проект.
· Запишіть з використанням стандартних функцій Delphi команди для обчислення дискримінанту та коренів квадратного рівняння з коефіцієнтами a, b, c.
· Створіть проект, в якому обчислюється сума 11 + 22 + 33 + 44 + 55 + ... + nn. Використайте стандартну функцію для піднесення числа до степеня. Створіть у власній папці папку Проект 2.10.16 і збережіть у ній проект.
(ДЗ) · Створіть проект, в якому обчислюється сума . Створіть у власній папці папку Проект 2.10.17 і збережіть у ній проект.
·Додайте до проекту додавання двох дробів процедуру, яка з неправильного дробу виділяє цілу частину