Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка QB.doc
Скачиваний:
15
Добавлен:
06.11.2018
Размер:
2.41 Mб
Скачать

Власні функції

Повернемося до математичної функції INT. INT — ім'я функції. Цим ім'ям визначаються деякі програмні дії, невидимі програмісту, і що ініціюються автоматично з появою в програмі імені функції. Інакше кажучи, функцію можна розуміти як групу операторів в програмі, об'єднаних під ім'ям функції. За допомогою укладеного в круглі дужки аргументу (порівняй INT (3.34)) в підпрограму, що ініціюється ім'ям функції, передаються конкретні дані. Над цими даними виробляються деякі перетворення, і результат, як правило, повертається в основну програму.

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

Приклад. STRICH$ () – значення, що повертається-рядок,

RUNDEN% () – значення, що повертається — число типу INTEGER,

WURZELK!() – значення, що повертається— число типу SINGLE.

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

FUNCTION Ім’я функциї

END FUNCTION

В простір між ключовими словами, які обмежують, вносять операції QBASIC, що забезпечують виконання необхідних дій. Щоб повернутися в головну програму, потрібно натиснути клавішу “F2”. На екрані з'являється поле списків зі всіма певними в програмі функціями і процедурами. Перший елемент цього списку містить ім'я головної програми.

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

Спочатку складемо головну програму:

'Головна програма для перевірки функції округлення

DIM zahl!, stelle%

CLS

INPUT "Ввести число:", zahl!

INPUT "Позиція: "stelle%

'----- Пізніше тут повинна бути вбудована функція округлення

'Кінець головної програми

Проголосимо нову функцію runden!. Для цього введемо "FUNCTION runden!" І натиснемо “Enter” ("!" Означає, що значення, яке вертається повинно бути речовинним числом). В результаті на екрані з'явиться незаповнений шаблон функції runden!:

FUNCTION runden!

END FUNCTION

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

Параметр 1 – число, що підлягає округленню

Параметр 2 – позиція, до якої число округляється.

Наявний шаблон функції доповнимо таким чином:

FUNCTION rundenl (wertl. Wonach%)

' В wert! Вводиться число, що округляється

' wonach% визначає позицію (після крапки), до якої число округляється

END FUNCTION

З викликаючої (головної) програми параметри функції передаються в змінні wert! І wonach%.

Щоб переконатися у вірності передачі параметрів у функцію, складемо її таким чином:

FUNCTION rundent (werti, wonach%)

' В wert! Вводиться округляєме число

' wonach% визначає позицію (після крапки), до якої число округляється

PRINT значення ,'Що передається:"; wert!

PRINT позиція ,'Що передається:": wonach%

END FUNCTION

А в основну програму введемо рядок PRINT runden! (zahl!, stelle%) на означену позицію.

Алгоритм округлення аналогічний тому, який описано у попередньому розділі. Слід відзначити, що величина округлення задається для функції не в формі коефіцієнта (10.100... див. CONST nkstelle%), а у вигляді кількості позицій після коми. Тепер необхідно знайти засіб перекладу кількості позицій після коми в коефіцієнт точності. Залежність між цими величинами показана в таблиці 2.11.

Таблиця 2.11

Позиція після коми

Коефіцієнт

1

10

2

100

3

1000

N

10

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

FUNCTION runden! (wert!, wonach%)

'В wert!: вводиться округляєме число

‘wonach%: визначає позицію (після коми),

‘до якої число округляється

DIM rundi. faktor% 'робітничі змінні

faktor%=10^wonach%

rund!=wert! faktor%+. 5

rund! =INT (rund!)

rund! =rund!/faktor%

runden! - rund! 'результат, що вертається функцією

‘в основну програму

ENDFUNCTION

Примітка. Після того як ви склали функцію, QBASIC автоматично розміщує оголошення функції в початок основної програми. Це оголошення починається ключовими словами DECLARE FUNCTION, за якими слідує визначене вами ім'я функції і параметри, що передаються в цю функцію. Складемо функцію, що шукає в рядку певний символ і повертає номер позиції, в який перший раз зустрівся цей символ. Якщо символ в рядку взагалі не знайдений, вертається нульове значення.

Передусім необхідна головна програма:

'Пошук символів в рядку

CLS

INPUT "Введіть рядок:", zelchenk$

INPUT "Введіть символ:", zelchen$

PRINT

'---- Пізніше тут повинна бути вбудована функція

'Кінець головної програми

Нова функція повинна мати ім'я zsuch і повертати в основну програму значення типу INTEGER. Після введення "FUNCTION zsuch %", отримати шаблон функції, що належить доповнити необхідними параметрами:

FUNCTION zsuch% (such$, suchz$)

'such$: рядок

'suchz$: цей символ

END FUNCTION

І ввести в шаблон функції оператори QBASIC.

Завдання. Допишіть функцію zsuch%.

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

Щоб функції, що вживаються часто і процедури не складати кожний раз, потрібно організувати бібліотеку функцій. Створіть в QBASIC файл для функцій і процедур, що можуть знадобитися Вам при виконанні програм (наприклад, функції runden! І zsuch%). Збережіть цей файл під ім'ям BIBL. BAS. При написанні програм, що використовують нестандартні функції, відкрийте файл BIBL. BAS і збережіть його під новим ім'ям ("Save as..."). Якщо Ви будете складати свою програму в цьому файлі, з неї можна викликати всі процедури і функції файлу ВІВІL. BAS.

Покажемо створення функції знаходження кореня, згаданної у розділі "Математичні обчислення". Функція повинна знаходити корінь будь-якого степеня. Почнемо з головної програми:

'Головна програма для функції знаходження корня

DIM argument!, wurz%

CLS

DO

INPUT "Ввести аргумент:", argument!

INPUT "Ввести степінь кореня:", wurz%

LOOP WHILE argument! < 0

PRINT PRINT wurzel! (argument!, wurz%)

'Кінець головної програми

Складемо шаблон функції:

FUNCTION wurzel! (argument!, wurz%)

END FUNCTION

Знаходження кореня з аргументу можна подати функцією зведення аргументу в степінь, зворотний степеню кореня. Функція знаходження кореня будь-якого степеня має наступний вигляд:

FUNCTION wurzel! (argument!, wurz%) wurzell-argument! ^ (1/wurz%)

END FUNCTION

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

FUNCTION Ім'я функції (Параметр 1[, Параметр 2]...) [STATIC][Оператор]...

Ім'я функції=Вираз END FUNCTION

Ім’я функції - ім'я функції, останній символ обов'язково визначає тип значення, що вертається (%, &,!, #или$).

Параметр -параметр, що передається функції при виклику.

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

Сенс опції STATIC роз'яснимо на невеликому прикладі. Складемо головну програму для виклика функції zlen:

'Головна програма

PRINT "Довжина test", zlen% ("test")

PRINT "Довжина test '', zlen% ("test")

Функцію zlen оголосимо таким чином:

FUNCTION zlеn% (text$)

DIM 1% i%=i%+LEN (text$)

zlen %=1%

END FUNCTION

Після запуску програми двічі отримаємо на екрані повідомлення "Довжина тест 4". Змінимо заголовок функції:

FUNCTION zlen% (text$) STATIC

Після першого запуску програми одержуємо спочатку значення довжини 4, після цього 8. При оголошенні функції використовується ключове слово STATIC, і значення локальної змінної i% зберігається після закінчення виконання функції. Тому при наступних викликах до значення змінної i% додається число 4, і при другому зверненні, до функції, значення, що вертається вже не 4, а 8.