Студопедия

КАТЕГОРИИ:


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

Then begin 2 страница




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

Процедури користувача можуть бути:

· без аргументів і без результатів;

· з аргументами і без результатів;

· без аргументів і з результатами;

· з аргументами і з результатами.

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

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

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

 

Найчастіше використовують процедури останнього типу. Загальний вигляд цих процедур у Delphi такий:

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

var (<списки локальних змінних процедури з їхніми типами>);

<команди>

end;

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

<ім’я> (<списки виразів, значення яких передаються аргументам процедури>, <списки змінних, яким передають свої значення результати процедури>);

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

Оформимо як процедуру фрагмент програми, який обчислює НСД двох натуральних чисел. У цієї процедури два аргументи – два натуральні числа, НСД яких потрібно знайти, і один результат – їхній НСД. Виглядатиме ця процедура так:

procedure МCD (a, b: Integer; var c: Integer);

var r: Integer;

r:= a mod b;

while r <> 0 do

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

1. Використання процедури МCD 2. Використання функції МCD
3. MCD(den1, den2,z); 4. den:= den1*den2/z; 5. den:= den1*den2/ MCD(den1, den2);
6. MCD(den, nom, k); 7. 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   Число p Дійсний
Power 2, дійсні І аргумент у степені ІІ аргумент Дійсний
Random   Випадкове число від 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. ·Додайте до проекту додавання двох дробів процедуру, яка з неправильного дробу виділяє цілу частину

 

Практична робота № 10

«Використання підпрограм»

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

 

1. Відкрийте середовище розробки Turbo Delphi 2006.

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

а) За відомими довжинами сторін АВ, ВС, CD, DA та довжиною діагоналі АС. Використайте процедуру обчислення площі трикутника за формулою Герона. Складіть обробник події OnClick першої кнопки, виконання якого приведе до виведення розв’язку задачі у вікно повідомлення.

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

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


 

2.11. Одновимірні масиви

Пригадайте!

1. Що визначає тип змінної? Які типи змінних вам відомі?

2. Який загальний вигляд команд розгалуження в Delphi? Як вони виконуються?

3. Який загальний вигляд команди циклу з лічильником в Delphi? Як вона виконується?

4. Який загальний вигляд команди циклу з передумовою в Delphi? Як вона виконується?

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

Поняття одновимірного масиву

У попередніх пунктах ви розглядали задачі, в яких використовувалася невелика кількість змінних. Але існує велика кількість задач, в яких потрібно опрацьовувати значення досить великої кількості змінних.

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

Якщо використати 100 змінних з довільними іменами, наприклад, a, b, c,..., z, aa, ab, ac,..., az, ba, bb, bc,..., bz, ca, cb, cc,..., cv (як в електронних таблицях), то команда знаходження суми їхніх значень буде містити в правій своїй частині 100 доданків, або потрібно включити до тексту програми 100 команд, які по черзі додають до значення змінної summa значення ваги наступного одинадцятикласника:

summa:= a;

summa:= summa + b;

summa:= summa + c;

...

summa:= summa + cv;

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

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

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

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

Масив, в якому кожний елемент визначається тільки одним порядковим номером, називається одновимірним.

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

 

Так для прикладу, розглянутого вище, замість ста окремих змінних варто розглядати масив, що складається зі 100 елементів. Якщо надати ім’я масиву a, то імена змінних – елементів цього масиву будуть такі: a[1], a[2], a[3],..., a[100]. Кожна з цих змінних матиме тип Real.

Тоді, щоб знайти суму значень усіх цих 100 змінних, достатньо записати такі команди:

summa:= 0;

for i:= 1 to 100 do

summa:= summa + a[i];

 

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

 

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

Команда Результат виконання
summa:= 0 summa = 0
i:= 1 i = 1
i £ 100 (1 £ 100) = true
summa:= summa + a[i] summa = 0 + a[1] = a[1]
i:= i +1 i = 2
i £ 100 (2 £ 100) = true
summa:= summa + a[i] summa = a[1] + a[2]
i:= i +1 i = 3
i £ 100 (3 £ 100) = true
summa:= summa + a[i] summa = a[1] + a[2]+a[3]
... ...
i:= i +1 i = 100
i £ 100 (100 £ 100) = true
summa:= summa + a[i] summa = a[1] + a[2] + a[3] + a[4] +... + a[100]
i:= i +1 i = 101
i £ 100 (101 £ 100) = false

 

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

У тексті програми мовою Delphi у рядку var змінна a типу одновимірний масив записується описується так: var a: array [1..100] of Real (англ. array – масив). У квадратних дужках вказується діапазон номерів елементів масиву: від 1 до 100. За цим записом компілятор виділяє в пам'яті комп’ютера 100 ділянок під кожну зі 100 змінних – елементів масиву. Розмір кожної ділянки залежить від типу елементів масиву.

Звертаємо вашу увагу, що інколи зручно нумерувати елементи масиву, починаючи не з першого номера. Так, наприклад, для змінних, значення яких – чисельність населення України в період з 1990 по 2011 роки можна використати масив a: array [1990..2011] of Integer. Взагалі, номери елементів одновимірного масиву можуть буди елементами довільного діапазону цілих чисел.

Уведення і виведення значень елементів одновимірного масиву

 

Для введення і виведення значень елементів одновимірного масиву можна скористатися багаторядковим полем (компонент типу TMemo), який можна розмістити на формі так само, як й інші компоненти (рис. 2.62).

 

Серед властивостей цього компонента є багато таких, які мали раніше розглянуті нами компоненти: Name, Color, Font, Enabled, Visible, Height, Width, Top, Left та ін. Серед властивостей, яких не мали попередні компоненти, розглянемо такі:

ScrollBars (англ. scroll – прокручування, bars – прямокутні смуги) – значення цієї властивості визначає наявність чи відсутність на цьому компоненті смуг прокручування (горизонтальної – ssHorizontal, вертикальної – ssVertical, обох – ssBoth) для перегляду тексту, який виходить за границі компонента;

ReadOnly (англ. read – читати, only – тільки) – значення цієї властивості визначає можливість редагування рядків компонента: False – можна редагувати, True – не можна (тільки для читання)

Lines (англ. lines – лінії, рядки) – значенням цієї властивості є набір значень, розташованих у рядках цього компонента; кожен рядок має номер, нумерація рядків починається з 0.

Lines.Count (англ. count – підрахунок) – значення цієї властивості дорівнює кількості заповнених даними рядків компонента; зазначимо, що ця властивість відсутня у списку властивостей вікна Object Inspector.

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

 

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

 

Розмістимо на формі два багаторядкових поля з іменами Memo1 і Memo2, розташуємо їх на формі одне поруч з іншим та встановимо для них значення властивостей: Height = 150, ScrollBars = ssVertical, ReadOnly = False. Розмістимо на формі також кнопку, встановимо для неї Caption = 'До квадрата ' і створимо процедуру, пов’язану з подією OnClick для цієї кнопки.

На рис. 2.63 наведено текст цієї процедури і вікно її виконання. У тексті процедури використані два стандартні методи, що пов’язані з багаторядковим полем: процедура Clear (англ. clear – очищувати), що очищує всі рядки цього компонента, і процедура Append (англ. append – додавати), що додає до багаторядкового поля новий рядок і виводить у нього значення параметра, вказаного в дужках.

 

 

 
 

Звертаємо вашу увагу: у наведеному на рис. 2.63 прикладі процедури розв’язування задачі 1 уведення значень елементів, піднесення їх до квадрата і виведення нових значень елементів масиву організовано трьома окремими циклами лише для кращого розуміння. Очевидно, що усі ці операції можна було б організувати в одному циклі.

Після запуску проекту на виконання у вікні, що відкрилося, у першому багаторядковому полі (на рис. 2.63 зліва) потрібно видалити текст Memo1,який знаходився там за замовчуванням, і ввести в кожний рядок по одному числу, які й будуть значеннями відповідних елементів масиву. Після цього потрібно вибрати кнопку і в результаті виконання процедури з чисел у рядках першого багаторядкового поля буде сформований одновимірний масив, потім значення елементів цього масиву будуть піднесені до квадрату і нові значення будуть виведені в рядки другого багаторядкового поля.




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


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


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



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




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