
- •Інформатика
- •1. Складання алгоритмів
- •1.1. Визначення алгоритму
- •Алгоритм повинен бути:
- •1.2. Алгоритми на природній мові
- •1.3 Алгоритми лiнійної структури
- •1.4 Алгоритми розгалуженої структури
- •1.5 Алгоритм циклічної структури
- •1.6 Комбіновані алгоритми
- •1.7 Схематичне зображення алгоритмів
- •Опис символів
- •2 Алгоритмічна мова qbasic
- •2.1 Інструментарій
- •2.2 Система меню
- •Поле опцій
- •Перемикачі
- •Поле вводу
- •Блок контролю
- •Поле списків
- •2.3 Редактор
- •Маркіровка тексту
- •Обробка тексту
- •2.4 Збереження і завантаження програм
- •Збереження
- •Збереження з іншим іменем
- •Завантаження програми
- •2.5 Складання нової програми
- •2.6 Друк програми
- •2.7 Пошук та зміна тексту
- •Пошук тексту
- •Багаторазовий пошук
- •Зміна тексту
- •2.8 Робота з кількома вікнами
- •2.10.1 Елементарні конструкції мови qbasic
- •Символи
- •2.10.2 Чисельні та символьні дані
- •2.10.3 Стандартні функції
- •2.10.4 Вирази
- •2.10.5 Операції та їх приорітет
- •Логiчні операцiї
- •2.11 Оператори мови qbasic
- •2.11.1 Оператор присвоєння
- •2.11.2 Оператор swap
- •2.11.3 Оператори введення-виведення Оператори введення read, data, restore
- •Оператор введення input
- •Оператор виведення print. Функції spc, tab
- •Оператор виведення print using
- •2.11.4 Оператори керування
- •Оператор goto
- •Оператор on…goto
- •Оператори stop і cont
- •Оператори if… then… else
- •Блок умовного переходу в програмі
- •Оператори gosub і return
- •Оператор on...Gosub
- •Цикл while
- •Цикл do
- •Оператор вибору select case
- •2.11.5 Графiчнi оператори Оператор view
- •Оператор screen
- •Оператор circle
- •Оператор window
- •Оператор line
- •Оператор draw
- •Оператор preset, pset
- •Оператор locate
- •2.11.6 Функції і процедури, визначенні користувачем
- •Функції-вираз
- •Власні функції
- •Власні процедури
- •2.11.7 Масиви Оператори option base, dim, erase
- •Встановлення кольорів екрана
- •2.11.9 Робота з файлами
- •2.11.10 Функція eof
- •Перелік посилань
Власні функції
Повернемося до математичної функції 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$
'---- Пізніше тут повинна бути вбудована функція
'Кінець головної програми
Нова функція повинна мати ім'я 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.