Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ryvkind_159_10_Inform_akdm_11ukr.indd.razdel-2.doc
Скачиваний:
28
Добавлен:
10.11.2019
Размер:
4.59 Mб
Скачать

Практична робота № 9 «Програмування циклічних обчислень»

Увага! Під час роботи з комп’ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

  1. Відкрийте середовище візуального проектування Turbo Delphi 2006.

  2. Створіть проект для розв’язування задачі: Перед початком повені рівень води у річці становив Н метрів. Під час повені кожну годину рівень води зростав на Р відсотків від рівня попередньої години. Яким буде рівень води через N годин після початку повені? Через скільки годин після початку повені рівень води буде не менше, ніж К метрів?

  1. Розмістіть на формі поля для введення початкових даних, написи із текстами, що будуть пояснювати їхні призначення та три кнопки.

  2. Установіть на першій кнопці напис Питання 1, на другій – Питання 2, на третій – Спочатку, у полів – порожній текст.

  3. Складіть обробник події OnClick першої кнопки, виконання якого приведе до виведення у вікно повідомлення відповіді на перше запитання задачі.

  4. Виконайте складену процедуру і переконайтеся, що результати її роботи правильні.

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

  6. Виконайте складену процедуру і переконайтеся, що результати її роботи правильні.

  7. Складіть обробник події OnClick третьої кнопки, виконання якого призведе до очищення тексту у полях та напису з відповіддю на друге запитання задачі.

  1. Створіть у власній папці папку Практична 9 і збережіть у ній проект.

2.10. Процедури і функції користувача та стандартні процедури і функції в Delphi

Пригадайте!

  1. Що таке процедура?

  2. Що таке обробник події? Як створити обробник події?

  3. Який загальний вигляд процедур-обробників подій, які ви створювали в Delphi?

  4. Які змінні називаються локальними, а які глобальними? Поясніть різницю між ними.

  5. Як у 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, х). Виконуватися ця команда буде так:

  1. Змінні a і b (аргументи процедури) одержують значення 35 і 77 відповідно.

  2. Виконуються команди процедури.

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

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

У команді виклику цієї процедури в дужках на перших двох місцях, що відповідають аргументам процедури, можуть стояти не тільки константи, а й змінні, які на момент виконання команди виклику мають певні натуральні значення. Тобто при виконанні команди МCD (к, р, х) аргументи процедури a і b одержать значення змінних к і р відповідно. На цих місцях можуть стояти також арифметичні вирази, значення яких будуть обчислені на початку виконання команди виклику процедури і ці значення будуть передані аргументам процедури, наприклад, МCD (2*к+3, 3*р-1, х).

Звертаємо вашу увагу:

  1. Аргументи та результати процедури можуть бути одними й тими самими змінними, тобто допустима процедура із заголовком Procedure One (var a, b:Integer). У такої процедури змінні a і b є одночасно і аргументами і результатами. Команда виклику цієї процедури виглядатиме так: One (x, y).

  2. Процедура може серед своїх команд мати команду виклику іншої процедури.

Запам’ятайте!

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

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

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

З

Рис. 2.59. Програма додавання двох звичайних дробів з використанням процедури НСД

адача 1. Знайти суму двох звичайних дробів.

Рис. 2.60. Виконання програми додавання двох звичайних дробів

У наведеному тексті проекту (рис. 2.59) процедура викликається двічі. Перший раз для знаходження НСД знаменників дробів. Цей НСД у наступній команді використовується для знаходження найменшого спільного знаменника дробів (НСК (х, у) = х*у/НСД(х, у)). Другий – для знаходження НСД чисельника і знаменника дробу-суми з метою його подальшого скорочення. Без використання процедури текст цього проекту збільшився б, погіршилась би його структурованість.

Функції користувача в Delphi

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

Функція користувача, як і процедура користувача ­– це відокремлена частина програми, яка має своє ім’я і яка може бути викликана для виконання в будь-якій іншій частині програми.

Відрізняється функція від процедури таким:

  1. Рядок заголовка функції виглядає так:

function <ім’я> (<списки аргументів з їхніми типами>): <тип результату >;

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

  2. Функція може бути викликана або в правій частині команди присвоювання, або в команді виведення.

Якщо обчислення НСД оформити як функцію, то програма виглядатиме так (рис. 2.61):

Рис. 2.61. Програма додавання двох звичайних дробів з використанням функції НСД

Зверніть увагу не тільки на відмінності в оформленні процедури і функції, а й на відмінності в їх виклику і використанні в програмах, наведених на рис. 2.59 і 2.61 (табл. 2.3):

Таблиця 2.3. Відмінності у виклику процедури і функції

  1. Використання процедури МCD

  1. Використання функції МCD

  1. MCD(den1, den2,z);

  2. den := den1*den2/z;

  1. den := den1*den2/ MCD(den1, den2);

  1. MCD(den, nom, k);

  1. 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, дійсний

Квадрат числа

Дійсний

Звертаємо вашу увагу:

  1. При виклику функції без аргументів потрібно вказувати лише її ім’я, наприклад, х := Pi.

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

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

Перевірте себе

  1. º Що таке процедури користувача? Якими вони можуть бути?

  2. · У яких випадках доцільно використовувати процедури користувача? У чому полягають переваги їхнього використання?

  3. · Який загальний вигляд процедур користувача з аргументами та з результатами?

  4. º Що таке аргументи процедури; результати процедури?

  5. · Який вигляд має команда виклику процедури з аргументами і результатами?

  6. º Що таке формальні параметри процедури і фактичні параметри процедури? Поясніть різницю між ними.

  7. º Що таке функція користувача?

  8. · Чим функція користувача відрізняється від процедури користувача?

  9. * Який загальний вигляд функції?

  10. · Які ви знаєте стандартні процедури і функції в Delphi? Охарактеризуйте їх.

  11. * Знайдіть у Довідці інформацію про процедури без аргументів і без результатів, з аргументами і без результатів, з аргументами і без результатів. Наведіть приклади їхнього використання.

Виконайте завдання

  1. º Запишіть заголовок процедури з іменем stepin, аргументами якої є змінна a дійсного типу і змінна b цілого типу, а результатом – змінна с дійсного типу, і приклад команди її виклику.

  2. (ДЗ) º Запишіть заголовок процедури з іменем chastka, аргументами якої є дві змінні дійсного типу a, b, а результатами – змінна с дійсного типу та змінна f логічного типу, і приклад команди її виклику.

  3. · Запишіть процедуру з іменем simp, яка здійснює перевірку, чи є дане натуральне число простим і повертає як результат значення змінної f логічного типу – ознаку того, чи є число простим, і значення змінної k цілого типу – кількість дільників даного числа.

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

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

  6. (ДЗ) · Створіть проект, в якому для двох заданих на площині точок з цілими координатами визначається, чи лежать вони в одній координатній чверті. Використайте процедуру для визначення координатної чверті, у якій розміщена точка з заданими координатами. Створіть у власній папці папку Проект 2.10.6 і збережіть у ній проект.

  7. º Запишіть заголовок функції з іменем length, аргументами якої є чотири змінні цілого типу, а результат має дійсний тип, і приклад команди її виклику.

  8. (ДЗ) º Запишіть заголовок функції з іменем step, аргументами якої є змінна a дійсного типу і змінна b цілого типу, а результат має дійсний тип, і приклад команди її виклику.

  9. º Запишіть функцію, яка виконує обчислення довжини відрізка за відомими координатами його кінців. Запишіть команду виклику цієї функції для обчислення довжини відрізка а з координатами кінців (0, 0) та (20, 30).

  10. (ДЗ) · Запишіть функцію, в якій обчислюється значення факторіалу заданого натурального числа n (n! = 1*2*3*…*n). Запишіть команду використання цієї функції для обчислення суми факторіалів перших п’яти натуральних чисел.

  11. º Створіть проект, в якому можна знайти максимальне з чотирьох заданих різних цілих чисел. Використайте функцію для знаходження більшого з двох заданих цілих чисел. Створіть у власній папці папку Проект 2.10.11 і збережіть у ній проект.

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

  13. (ДЗ) · Створіть проект, в якому для двох заданих цілих чисел визначається, яке з них має більшу суму дільників. Використайте функцію для знаходження суми дільників заданого цілого числа. Створіть у папці Мої документи папку Проект 2.10.13 і збережіть у ній проект.

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

  15. · Запишіть з використанням стандартних функцій Delphi команди для обчислення дискримінанту та коренів квадратного рівняння з коефіцієнтами a, b, c.

  16. · Створіть проект, в якому обчислюється сума 11 + 22 + 33 + 44 + 55 + ... + nn. Використайте стандартну функцію для піднесення числа до степеня. Створіть у власній папці папку Проект 2.10.16 і збережіть у ній проект.

  17. (ДЗ) · Створіть проект, в якому обчислюється сума . Створіть у власній папці папку Проект 2.10.17 і збережіть у ній проект.

  18. ·Додайте до проекту додавання двох дробів процедуру, яка з неправильного дробу виділяє цілу частину

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