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

Власні процедури

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

'Програма, що ілюструє поняття процедури

PRINT "А"

PRINT "В"

PRINT "А1"

PRINT "82"

PRINT "З"

PRINT "В"

PRINT "В1"

PRINT "B2"

PRINT "erf"

PRINT "B"

PRINT "В1"

PRINT "B2"

PRINT "ugh"

‘Кінець програми

Програма носить ілюстративний характер, однак корисна для внесення ясності в подання про процедури. Можна помітити, що деякі фрагменти програми часто повторюються.

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

Задайте в програмі команду "SUB beispiel" і отримайте порожній шаблон процедури:

SUB beispiel

END SUB

Внесіть туди оператори, що повторюються в головній програмі.

SUB beispiel

PRINT "В"

PRINT "В1"

PRINT "B2"

END SUB

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

'Програма для вступу поняття процедури

PRINT "А"

CALL belsplel

PRINT "З"

CALL beisplel

PRINT "erf"

CALLbelspiel

PRINT "ugh"

‘Кінець програми

Примітка. Так же, як і функції, процедури, що задаються користувачем, автоматичні оголошуються в початку головної програми. Оголошення починається з ключових слів DECLARE SUB. Після них стоїть ім'я процедури, що задається користувачем і список параметрів.

Звернемо увагу ще на одну особливість застосування процедур. Для цього розглянемо таку програму:

'Програма, гідна особливої уваги

DIM zahll

INPUT zahl!

CALL test

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

Процедура test виглядає так:

SUB test

PRINT "Число"; zahl!

END SUB

Якщо цю програму запустити на виконання, на екрані весь час буде роздруковуватися повідомлення "Число 0", не залежно від того, що число вводиться командою INPUT. Певно, змінна zahl!, невідома процедурі test. Пояснюється це тим, що змінна zahl!, проголошена без ключового слова SHARED. Якщо SHARED стоїть в оголошенні змінної, то таку змінну можна використати всередині функцій і процедур. Тому слід змінити оголошення змінної:

DIM SHARED zahl!

І програма буде функціонувати нормально.

2.11.7 Масиви Оператори option base, dim, erase

Масивом називається кінцева сукупність величин (елементів), позначених одним і тим ж ідентифікатором. Кожному елементу масиву призначається відповідний порядковий номер (індекс). Елемент масиву називається змінною з індексом. В масиві з даним ім'ям можуть знаходитися величини тільки одного типу: чи дійсні числа, чи символьні.

Загальний ідентифікатор усіх елементів масиву називається ідентифікатором масиву. При цьому ідентифікатори масивів символьних величин закінчуються знаком "".

Змінна з індексом позначається записом, яка складається з ідентифікатора масиву та наступного за ним, в круглих дужках, списку індексів. Наприклад, А(2,3) відповідає , . Індекси розділюються комами. Залежно від кількості індексів масиви можуть бути одномірними, двохмірними та т. ін. Інтерпретатор дає можливість працювати з масивами, які мають до 255 вимірів та містять до 32767 елементів по кожному із них [3]. При наявності дрібного індексу елемента масиву значення вказаного індексу округлюється до найближчого цілого значення, тобто А=(1.4,22)=А(1,22); ВА=(7.82)=ВА(8).

В Бейсiку за замовчуванням індексація елементів масиву починається з нуля, тобто індекс першого елемента масиву дорівнює нулю (А(0), В(0,0), В(0,1), С(0,0,0) та т.п. Однак, найчастіше зручно працювати з масивом змінюючи його індекс з одиниці. Відповідно до першого елемента масиву значення індексу дорівнює одиниці, і для економії пам'яті ЕОМ застосовується оператор OPTION BASE.

OPTION BASE 1

За допомогою цього оператора встановлюється найменше значення масивів 0 та 1. Цей оператор повинен виконуватися в програмі до першого оператора, що містить імена масивів, вмикає оператори DEF та DIM.

Для кожного масиву в програмі повинен бути вказаний його максимальний розмір, тобто максимальні значення індексів. Це потрібно для резервування пам'яті ЕОМ для даного масиву. З цією метою використовується оператор DIM. Якщо масив невизначений за допомогою оператора DIM перед зверненням до нього, то вважається, як було вже вказано, що кожної розмірності максимальний індекс дорівнює 10. Формат даного оператора

DIM < індефікатор масиву > (< ціле число 1 > [, < ціле число 2 >...]),

де < ціле число i > - відповідна розмірність масиву.

Наприклад:

DIM А(12), М(5,8) .

В цьому прикладі, якщо не був використаний оператор OPTION BASE 1, масив А складається із 13 елементів (з врахуванням А(0)), а масив М - 54 (М(0,і), М(і,0)), що складає 6 рядків та 9 стовпців.

Приклад:

DIM A(11)

X=2

FOR I=1 TO 11

A(I)=X^I

PRINT A(I),

NEXT I

1 4 8 16

32 64 128 256

512 1024 2048

Досі ми розглядали одновимірні масиви. Але в QBASIC масив може мати декілька індексів. Наприклад, використання другого індексу дозволяє обробляти двовимірні таблиці. Тривимірний масив можна подати як куб. Можна описати масиви з чотирма, п'ятьма та більше індексами. Максимально допустиме число індексів для одного масиву - 255.

Приклад:

'Застосування тривимірних масивів

DIM zahl% (1 ТО 10, 4 TO 16, 6 TO 30)

zahl% (1,5, 23)=13

PRINT zahl% (1,5 23)

Визначивши розмірність масиву за допомогою оператора DIM, її вже неможливо змінити за допомогою деякого іншого оператора DIM. Для цього необхідно спочатку стерти відповідний масив із пам'яті, використовуючи оператор ERASE, формат якого

ERASE < ім'я масиву > [, < ім'я масиву >...]

Тобто імена стертих із пам'яті масивів у списку оператор ERASE перераховуються через кому, причому максимальні значення індексів не вказуються, наприклад:

ERASE A, BC, N, KL .

Оператор ERASE використовується також під час роботи з програмою великого обсягу з метою збільшення вільної пам'яті ЕОМ. В цьому випадку можуть бути стерти деякі проміжні робочі масиви, які не будуть використовуватись в подальшому.

2.11.8 Інші оператори

Обробка дати комп'ютера

За допомогою функції DАТЕ$ можна визначати поточну системну дату або змінити її.

Приклад:

PRINT DATE$

dat$= DATE$

print "попередня дата:"; dat$;" наступна дата:"; DATE$

Обробка комп'ютерного часу

За допомогою функції ТIМЕ$ можна визначити поточний системний час або змінити його.

Приклад:

PRINT TIME$

tirn$=TIME$

TIME$='12: 00”

PRINT “попередній час:”; tlrn$; "наступний час:"; ТIМЕ$

Обмін значеннями

Оператор SWAP дозволяє виконати обмін значеннями між двома змінними одного типу.

Приклад.

'Програма для демонстрації SWAP

А%=1

b%=4

a$='A"

b$='B"

SWAP a%, b%

SWAP a$, b$

PRINT "a%="; a%, "b%="; b%, "a$=''; a$, b$='; b$

Опитування клавiатури

За допомогою функції INKEY$ під час виконання програми можна дізнатися, яка клавіша щойно була натиснута. Ця функція повертає рядкове значення, що може бути порожнім рядком (" ") або складатися з одного або двох символів. Якщо значення функції — порожній рядок, то це означає, що жодні клавіши не натискалися; якщо вертається один символ, то це символ, щойно набраний на клавiатурі.

Приклад 1.

'INKEYS для програмних преривань

CLS

PRINT "Для продовження натиснути будь-яку клавішу"

DO WHILE INKEY$='"

LOOP

PRINT "Спасибі!"

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

Приклад 2. Функція INKEY$ цікава тим, що вона може опитувати спеціальні і функціональні клавіші. Коди клавiатури можна дізнатися або в

довідковій системі QBASIC, або використати наступну програму:

'Коди клавіш

DIM taste$

DO

CLS

PRINT "Натиснути будь-яку клавішу"

DO

TASTE$=INKEY$

LOOP WHILE taste$=""

PRINT "Код клавіші:"; taste$

PRINT "Довжина коду клавіші:"; LEN (taste$)

PRINT

PRINT "Опитати ще одну клавішу? (Y)"

DO taste$=IN KEY$

LOOP WHILE taste$='"

LOOP UNTI L UCAST$ (taste$) < > "Y"

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

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

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

...-й символ введеного тексту-...

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