Програма складається з рядків. Один рядок містить один або
кілька операторів, розділених двокрапкою. Наприклад,
a = 1: b = 1
Перенесення оператора на інший рядок допускається. У цьому слу-
чай використовується знак переносу _. Наприклад,
a = 1: b_
= 1
Строки можуть нумеруватися (але це не обов'язково). Посилання в
потрібне місце програми може здійснюватися також по мітці.
_Метка. розміщується в окремому рядку, починається з букви і
містить будь-яку кількість букв і цифр. Після мітки ставиться двоє-
точіе. Наприклад,
aaa:
x = x +1
...
GOTO aaa
Якщо першим символом в рядку є апостроф ( '), то
рядок сприймається як коментар.
_Назва. утворюється з літер від A до Z (або від a до z), знака під-
черківанія _ і цифр від 0 до 9, починається з букви. Назва вико-
ється для позначення перемінних, міток, процедур тощо
1.2. Типи даних
Цілий (значення від -32767 до 32767, займає 2 байти); довжин-
ний цілий (від 2 5-31 0до 2 531 0, 4 байти); речовинний (4 байти); ве-
громадської подвійної точності (8 байт); символьний (послідовник-
ність будь-яких символів, кожний символ займає 1 байт).
_Тіп Змінної. Визначається типом даних, які вона предс-
тавляет. Вказівка типу змінної задається відповідним знаком
після імені.
a $ - символьний
a% - цілий
a & - довгий цілий
- 5 -
a! - Речовинний звичайної точності
а # - речовинний подвійної точності
Якщо знак після імені відсутній, то ця змінна вва-
ється за замовчуванням речової звичайної точності. Тобто
a! = 1.1
і
а = 1.1
одне й те саме.
1.3. Масиви
_Опісаніе Масивів. здійснюється за допомогою оператора DIM з
зазначенням розмірів. Наприклад, оператор
DIM a (10), b (10:20, 25:45)
описує одновимірний масив a, елементи якого мають індекси від
0 до 10, і двомірний масив b, елементи якого мають індекси:
перший від 10 до 20, друге від 25 до 45.
Якщо нижня межа індексів в описі не вказана, то вона
вважається рівною 0.
Використовуючи оператор _OPTION BASE n., Можна поставити нижню межі-
цу індексів рівний n. Наприклад,
OPTION BASE 1
DIM a (10)
У цьому випадку індекс елементів масиву a 2 0будет приймати значен-
ня, починаючи з 1. Якщо опис масиву відсутній, то за умовчанням
чанію верхній індекс дорівнює 10 (нижній - 0). В описі масиву
замість константи може використовуватися змінна. Наприклад,
DIM a (n)
Значення n повинно бути попередньо визначене.
Використовуючи _оператор ERASE., Можна звільнити пам'ять, виділений-
ву під масив, і повернути її для подальшого використання. Нап-
Рімера, оператор
ERASE a
повертає пам'ять, виділену під масив a.
1.4. Вирази
_Сімвольние Вирази. складаються з символьних констант (після-
послідовно символів, укладена в лапки), символьних пере-
- 6 -
сних, символьних функцій, з'єднаних знаком + (конкатенація,
або об'єднання). Наприклад,
a $ = "КАТЯ"
b $ = "ЛЕНА"
f $ = a $ + "І" + b $
У результаті f $ буде мати значення "КАТЯ І ЛЕНА". За допомогою
функцій LEFT $, RIGHT $, MID $ можна вибрати частину символьної пере-
менной ліворуч, праворуч або з середини. Наприклад,
F1 $ = LEFT $ (f $, 4)
F2 $ = RIGHT (f $, 4)
F3 $ = MID $ (f $, 6,1)
У результаті буде F1 $ = "КАТЯ", F2 $ = "ЛЕНА" і F3 $ = "І".
_Чісловие Вирази. включають в себе константи, змінні,
функції, сполучені знаками арифметичних операцій, при цьому
можуть використовуватися величини різних типів.
_Пріорітети. арифметичних операцій:
1. Піднесення до степеня (^)
2. Множення, ділення (*, /)
3. Ділення без остачі () (наприклад, 52 одно 2)
4. Обчислення залишку від ділення (MOD) (наприклад, 45 MOD 19
одно 7)
5. Додавання, віднімання (+,-)< br />
1.5. Стандартні функції
Запис на Бейсіку Математична запис
ABS (x)? X?
SIN (x) sin x
COS (x) cos x
TAN (x) tg x
ATN (x) arctg x
EXP (x) e 5x
LOG (x) ln x
LOG2 (x) log 42 0x
LOG10 (x) lg x
INT (x) ціла частина х
SGN (x) знак г (1 при х> 0,
0 при х = 0, -1 при x <0)>
SQR (x) квадратний корінь з х
- 7 -
LEN (а $) кількість символів а $
LEFT $ (a $, n) вибирає з a $ n символів,
починаючи з першого
MID $ (a $, m, n) вибирає з a $ n символів,
починаючи з m-го
RIGHT $ (a $, n) вибирає n символів а $,
починаючи з останнього
STR $ (x) перетворює число до
символьному увазі
VAL (a $) визначає числове значення а $
ASC (a $) визначає код перший
символу а $
TAB (n) вказує номер позиції для
виводу наступного елемента в
списку виведення оператора PRINT
SPC (n) висновок n прогалин, використовується
у списку виведення оператора PRINT
RND [(x)] видає випадкове число з інте-
рвала (0,1)
Зауваження. 1. [] Позначають необов'язковий параметр.
2. Якщо х = 0, то повторюється останнє згенероване число; якщо
х <0, то для кожного x 2 0генеріруется нова послідовність>
випадкових чисел; якщо x> 0 або відсутній, то генерується оче-
чергової випадкове число, але при повторному запуску послідовник-
ність повторюється. Можна використовувати оператор RANDOMIZE (перед
першим використанням функції RND), щоб при новому запуску прог-
Рамі отримувати нову послідовність випадкових чисел.
_Операціі Відносини.:,> =,.
Ліва та права частини відносини - це числове або символьне
вираз (в останньому випадку порівнюються числові коди симво-
лов). Якщо ставлення задовольняється (є істинним), то його
значення дорівнює -1, якщо не задовольняється (є хибним), то
його значення 0. Стосунки можуть бути використані також в число-
вих виразах. Наприклад, при виконанні оператора
PRINT 5> 6, 5 <6, (5 <6) * 15>
буде надруковано 0, -1 і -15.
_Логіческіе Операції.: AND (логічне і), OR (логічне
або), XOR (виключає або), EQV (еквівалентність), IMP (Імпла-
кація).
- 8 -
Логічні операції здійснюються над цілими числами -1
(TRUE) і 0 (FALSE).
-1, Якщо A = -1, B = -1
A AND B 0, в інших випадках
0, якщо A = 0, B = 0
A OR B -1, в інших випадках
-1, Якщо A і B не збігаються
A XOR B 0, якщо A і B збігаються
-1, Якщо A і B збігаються
A EQV B 0, якщо A і B не збігаються
0, якщо A = -1, B = 0
A IMP B -1, в інших випадках
1.6. Основні оператори
_Оператор Присвоєння. має вигляд
1переменная 0 = 1 вираз
_Оператор Безумовного переходу. має вигляд
GOTO 1метка
_Условний Оператор. має вигляд
IF 1условіе 0 THEN 1оператори 0 [ELSE 1оператори 0]
Наприклад,
IF a
В якості умови може використовуватися ціле вираз, який
інтерпретується як FALSE, якщо його значення дорівнює 0, і TRUE,
якщо не дорівнює 0.
Якщо після THEN або після ELSE розташовується ціла група
операторів, то можна використовувати _IF блок., який має наступних
щую структуру
IF 1условіе 0 THEN
1оператори
ELSE
1оператори
END IF
При цьому ELSE і оператори за ним можуть бути відсутніми, тобто віз-
- 9 -
можна конструкція
IF 1условіе 0 THEN
1оператори
END IF
Якщо після ELSE необхідна перевірка умови, то використовується опе-
ратора ELSEIF
IF 1условіе 0 THEN
1оператори
ELSEIF 1условіе 0 THEN
1оператори
ELSE
1оператори
END IF
_Оператор Кінця END. використовується для закінчення виконання
програми. Може використовуватися в програмі кілька разів. Іс-
користується також з IF, SUB, DEF, SELEСT (см.ниже)
_Оператор Очищення екрана CLS. Зазвичай розташовується на початку
програми для очищення екрана перед виведенням результатів програми.
_Оператор Введення INPUT. має вигляд
INPUT [;] [1поясняющій текст 0], 1спісок змінних
Пояснювальний текст полягає в лапки. Змінні в списку відділень-
ляють один від одного комами. ";" Після INPUT означає, що курей-
сміття залишиться на тому ж рядку, коли буде натиснуто "Введення".
_Оператор Виведення PRINT. має вигляд
PRINT [1спісок виведення 0]
Елементи списку розділяються "," або ";" або пробілом. У першому
випадку висновок наступного елементу починається в нову зону (рядок
екрану умовно поділена на 5 зон з 14 позицій кожна), у дру-
ром - через пробіл (для чисел) або безпосередньо слідом (для
символьних рядків) за попереднім елементом.
Елементом списку може бути ім'я змінної, константа (сім-
вільна полягає в лапки) або вираз (перед висновком ви-
числяться).
_Оператор Виведення PRINT USING. має вигляд
PRINT USING 1формат 0; 1спісок виведення
Формат задається у вигляді символьної рядка (укладеної в ка-
вичкі), яка задає форму виведення кожного елемента списку за наступних
щим правилами для чисел: # - для кожної цифри, ^ ^ ^ ^ - для виведення
в показовою формі. Решта символів позначають самі себе.
- 10 -
Наприклад 1,
##.## - Буде виведено 2 цифри як цілої частини і два
- Дробової. Якщо ціла частина містить більше двох цифр, то перед
числом буде надрукований знак%.
#. # # ^ ^ ^ ^ - Висновок буде здійснюватися в показовою фор-
ме.
Для символьних рядків:
"1 0" - (два пробілу) - буде виведено чотири символи
"" 1 0 - (без пробілу) - буде виведено два символи
Взагалі кількість виведених символів буде дорівнює числу пропусків
між двома похилими лініями + 2.
"!" 1 0 - буде виведено один символ
"&" 1 0 - будуть виведені всі 1 0сімволи
Наприклад,
A $ = "КОТ": GA = 6.5
B $ = "СОБАКА": GB = 15.3
PRINT USING "& важить #. #, Важить # #. # КГ"; A $, GA, B $, GB
При виконанні цього оператора на екрані з'явиться
КОТ важить 6.5, СОБАКА важить 15.3 кг
_Оператор Визначення положення курсору
LOCATE i, j
встановлює координати (номер рядка i та номер стовпця j), в ко-
торие розпочнеться виведення даних оператором PRINT.
1.7. Оператори циклу
1. FOR i = i 4нач 0 to i 4кон 0 [STEP ih]
1оператори
NEXT i
i, i 4нач 0, i 4кон 0, ih - відповідно, керуюча мінлива
циклу, її початкове, кінцеве значення і крок зміни. Якщо
ih = 1, то крок можна опустити. Наприклад,
FOR i = 1 to 10
....< br />
NEXT i
FOR i = 1 to 10
FOR j = 1 to 20
....< br />
NEXT j: NEXT i
- 11 -
або
FOR i = 1 to 10
FOR j = 1 to 20
....< br />
NEXT j, i
2. DO WHILE 1условіе
1оператори
LOOP
або
WHILE 1условіе
1оператори
WEND
(оператори виконуються 1, 0 поки виконується умова)
3. DO UNTIL 1условіе
1оператори
LOOP
(оператори виконуються до тих пір, поки не буде виконано усло-
віє. Як тільки умова буде виконана, здійснюється вихід з
циклу).
4. DO
1оператори
LOOP
Вихід з циклу в цьому випадку здійснюється оператором EXIT.
_Оператор EXIT. 1 (0виход) використовується з SELECT, DEF, FOR, IF,
LOOP, SUB, WHILE. Наприклад,
EXIT FOR здійснює вихід з циклу, організованого опера-
торамі FOR/NEXT до його завершення
EXIT IF - вихід з будь-якого місця IF блоку
EXIT LOOP - вихід з циклу, що закінчується оператором LOOP
або WEND.
Інші випадки використання EXIT будуть розглянуті разом з
відповідними операторами.
_Оператори Вибору. ON/GOTO і ON/GOSUB
ON n GOTO 1метка 0 [, 1метка 0 ...]< br />
n може приймати значення від 0 до 255. Перехід здійснюється на
позначку, яка визначається значенням n. Наприклад, при n = 2 перехід здійсню-
ються на другу позначку в списку. Якщо n = 0 або n більше ко-
лічества міток у списку, то виконується наступний по порядку опе-
- 12 -
ратора.
ON n GOSUB 1метка 0 [, 1 мітка ...]< br 0 />
n приймає значення від 0 до 255. Перехід здійснюється до однієї
з можливих підпрограм (см.ниже), що визначаються мітками у спис-
ке, в залежності від значення n.
Після виконання підпрограми повернення здійснюється до опе-
ратора, наступного за ON/GOSUB.
1.8. Підпрограми, функції та процедури
_Подпрограмма. - Позначена послідовність операторів, за-
канчівающаяся оператором RETURN. Виконується, коли досягнуть
GOSUB.
....< br />
GOSUB aa
....< br />
END
aa:
1оператори
RETURN
Оператор RETURN здійснює повернення до оператора, безпосередньо
наступному за GOSUB.
_Функція. може бути визначена одним рядком (оператор-функ-
ція) або кількома рядками (підпрограма-функція).
DEF FN 1імя 0 [(1спісок параметрів 0)] = 1вираженіе
(це визначення оператора-функції) 1.
Тут список параметрів може включати 1 0не більше 16 параметрів.
DEF FN 1імя 0 [(1спісок параметрів 0)]
1опісаніе змінних
1оператори
[EXIT DEF]
....< br />
[FN 1імя 0 = 1вираженіе 0]
END DEF
(це визначення підпрограми-функції) 1.
Звернення до функції записується там, де потрібно отримати її зна-
чення. При цьому параметри замінюються їх фактичними значеннями.
Наприклад 1,
DEF FNF (x, y) = x * x + y * y
- 13 -
a = 3: b = 4
P = FNF (a, b)
або
P = FNF (3,4)
Функція повертає одне значення, тип якого визначається име-
ньому функції. Визначення функції може розташовуватися в будь-якому місці
програми (зазвичай на початку або в кінці). Наприклад,
F = FNa (1.5)
PRINT F
DEF FNa (x)
FNa = x * x
END DEF
END
або
F = FNa (1.5)
PRINT F
END
DEF FNa (x)
FNa = x * x
END DEF
У результаті буде надруковано 2.25.
Список параметрів оператора-функції може включати тільки
імена змінних.
_Процедура. - Це послідовність рядків програми, розта-
женная між операторами SUB і END SUB і виконувана при зверненні-
панії до неї за допомогою оператора CALL.
SUB 1імя 0 [(1спісок параметрів 0)]
1опісаніе змінних
1оператори
[EXIT SUB]
END SUB
Ім'я може містити до 31 символу. Список параметрів (не більше
16) може включати імена змінних і масивів. Для масивів в
дужках вказується розмірність. Наприклад, 1 - для одновимірного
масиву, 2 - для двовимірного і т.д.
У зверненні до процедури за ім'ям фактичного масиву сле-
дують порожні дужки. Наприклад,
SUB SUM (x (1), n, S)
S = 0
- 14 -
FOR I = 1 to n
S = S + x (I)
NEXT I
END SUB
DIM A (3)
A (1) = 1: A (2) = 2: A (3) = 4
CALL SUM (A (), 3, S)
S = S/3
PRINT S
END
Ця програма обчислює середнє значення елементів масиву A,
процедура SUM підсумовує елементи масиву.
Основні відмінності процедури від підпрограми-функції:
1 - процедура не зобов'язана повертати значення, вона не має типу;
2 - викликається оператором CALL, а не з вираження.
Окремі змінні, що використовуються у процедурі (або подпрог-
Рамі-функції), можуть бути оголошені локальними, тобто действующі-
ми тільки в даній підпрограмі (оператор LOCAL), загальними, тобто
чинними в підпрограмі, так і в основній програмі (опе-
ратора SHARED) і статичними, тобто діючими в даній подпрог-
Рамі як LOCAL, але зберігають отримані значення до Наст-
го обігу (оператор STATIC). За умовчанням в підпрограмі-функ-
ції мінлива є SHARED, а у процедурі STATIC.
DEF FNF1
LOCAL i, S
FOR i = 1 to 10
S = S + i
NEXT i
FNF1 = S
END DEF
Після виходу з підпрограми-функції змінні i і S втрачають свої
значення (при вході в підпрограму завжди S = 0). Ці ж імена
можуть використовуватися в програмі для позначення інших величин.
DEF FNF2
LOCAL i
SHARED S
FOR i = 1 to 10
S = S + i
NEXT i
- 15 -
FNF2 = S
END DEF
У цьому випадку S зберігає значення після виходу з підпрограми і
має один і той же сенс у всіх частинах програми.
DEF FNF3
LOCAL i
STATIC S
FOR i = 1 to 10
S = S + i
NEXT i
FNF3 = S
END DEF
У цьому випадку S зберігає значення після виходу з підпрограми
до наступного звернення до неї, тобто після першого звернення зна-
чення функції FNF3 буде 55, після другого - 110 і т.д. (S не можна
змінювати в основній програмі).
- 16 -
2. КОЛІР І ГРАФІКА
У графічному режимі екран розглядається як грати, точ-
ки у вузлах якої можуть бути включені (білим або іншим можли-
вим кольором) або вимкнені. Точка ідентифікується координатами x,
y; x - номер позиції по горизонталі (від 0 до 319 або до 639 в за-
лежно від режиму), y - номер позиції по вертикалі (від 0 до 199
або до 349 в залежності від режиму). Точка з координатами 0,0 на-
ходітся у верхньому лівому куті екрану.
Графічний режим встановлюється (або скасовується) _операто-
_ром SCREEN ..
SCREEN i [, j]
i = 0, j = 0 чорно-білий текстовий режим
i = 0, j = 1 кольоровий текстовий режим
i = 1, j = 0 кольорова графіка за середньої роздільної способнос-
ти (320 позицій по горизонталі, 200 по вертикалі)
i = 1, j = 1 чорно-біла графіка за середньої роздільної спосо-
бності
i = 2 чорно-біла графіка при високій роздільній спосо-
бності (640 позицій по горизонталі, 350 по верти-
калі)
Після виконання оператора SCREEN точка встановлюється в
середину екрану.
_Оператор COLOR. 2 0устанавлівает колір фону екрану і палітру (з
трьох кольорів) для фарбування точок (для текстового режиму - ще й
колір рамки).
Існує дві палітри кольорів: 0 і 1, наступного складу:
_Палітра 0. _Палітра 1
1 - зелений 1 - блакитний
2 - червоний 2 - бузковий
3 - жовтий 3 - білий
Для фону можна вибрати один з 16 кольорів (0 - чорний, 1 - синій,
2 - зелений, 3 - бірюзовий, 4 - червоний, 5 - ліловий, 6 - корич-
невий, 7 - білий, 8 - сірий, 9 - блакитний, 10 - яскраво-зелений, 11 -
яскраво-бірюзовий, 12 - яскраво-червоний, 13 - яскраво-ліловий, 14 - жел-
тий, 15 - яскраво-білий)
Оператор COLOR 2 0імеет вид
COLOR 2 0i, 2 0j [, k]
- 17 -
де i - колір фону, j - номер палітри, k - колір рамки.
Наприклад, оператори
SCREEN 1,0
COLOR 9,0
встановлюють кольоровий графічний режим при середній роздільної
здібності; колір фону - блакитний; наступні оператори повинні
використовувати кольори з 0-й палітри.
У графічному режимі (для отримання на екрані нерухомих
зображень) можуть використовуватися наступні оператори:
PSET 2 0 (PRESET) - включає (або вимикає) точку; LINE 2 0 - чер-
тит лінію; CIRCLE 2 0 - креслить коло або її частина; PAINT 2 0 - зак-
рашівает вказану частину екрану.
Більш складні оператори для отримання рухомих зображень
(DRAW, GET, PUT) розглядаються в п.4.
Оператор
PSET (x, y)
включає точку з координатами x, y.
Оператор
PSET STEP (x, y)
включає крапку, і знаходиться на x позицій по горизонталі і на y по-
зіцій по вертикалі від поточної точки. Наприклад, якщо в попередньому
положенні точка має координати (60, 75), то оператор
PSET (10, 20) визначає точку з координатами (10, 20), а
оператор
PSET STEP (10, 20) визначає точку з координатами (70, 95).
Оператори
PSET (x, y), 0
або
PRESET 2 0 (x, y)
перуть точку (x, y) з екрану.
Оператор LINE 2 0позволяет накреслити відрізок прямій, вказавши його
початок (x1, y1), кінець (x2, y2) і колір k
LINE 2 0 [(x1, y1)] 2 0 - 2 0 (x2, y2), 2 0k
Якщо початкова точка відсутня, то лінія буде прокреслена, на-
чіная з точки, в якій зупинився попередній оператор.
За допомогою оператора LINE 2 0можно також креслити і зафарбовувати
прямокутники
LINE (x1, y1) - (x2, y2), 2 0 [k], 2 0B [F]
Точки (x1, y1) та (x2, y2) трактуються при цьому як ліва нижня і
- 18 -
права верхня вершини прямокутника. Якщо колір k відсутній,
то прямокутник буде накреслена 3-м кольором палітри. За наявності
параметра F площу всередині прямокутника буде зафарбована. Напри-
заходів, оператор
LINE (80, 175) - (100, 25), 2, BF зафарбовує червоним кольором
прямокутник, розташований між 80-ої та 100-й позиції по
горизонталі та 175-ої та 25-ій позиціями по вертикалі.
_Оператор CIRCLE. 2 0позволяет будувати кола, дуги, сектори
і еліпси.
Оператор CIRCLE 2 0 (x, 2 0y), 2 0r, k
креслить коло радіуса r з центром в точці (x, y) кольором k.
Після креслення кола останньої використаної точкою
вважається її центр.
Оператор CIRCLE (x, y), r, k, ALPHA1, ALPHA2
креслить дугу, що має початок під кутом ALPHA1 і кінець - під
кутом ALPHA2.
Наприклад, оператор (при PI = 3.1416)
CIRCLE (160, 100), 80, 2, PI/2, PI будує дугу від PI/2 до PI ок-
ружності радіусу 80 з центром в точці (160, 100) другий кольором
палітри.
Якщо використовувати знак "-" перед початкової та кінцевої точ-
ками дуги, то буде намальований сектор, тобто кінцеві точки дуги
будуть з'єднані з центром. Наприклад,
CIRCLE (160, 100), 80, 2, - PI/2, - PI
Можна зобразити сплюснений (або навпаки витягнуту) окруж-
ність, додавши в оператор CIRCLE ще один параметр. Якщо значення
цього параметра менше 1, то коло буде сплюснута по верти-
калі, якщо більше 1, то - по горизонталі. Наприклад,
CIRCLE (160, 100), 80, 2,,, 3/4
Всі параметри оператора CIRCLE задаються в певному порядку і
розділяються комами. Обов'язковими є лише параметри,
що вказують положення центру і радіус кола. Решта пара-
метри необов'язкові, проте, коми повинні бути залишені, якщо
пропущені параметри в середині списку.
_Оператор PAINT. 2 0позволяет зафарбовувати великі ділянки екрана.
Для забарвлення необхідно вказати довільну точку всередині
закрашується області (x, y), колір, яким треба зафарбувати про-
ласть (k1) і колір межі, яку не можна перетинати при закрашений-
вання (k2), k1 і k2 можуть збігатися. Оператор PAINT має вигляд
- 19 -
PAINT (x, y), k1, k2
Наприклад, оператор
PAINT (160, 100), 2, 2
зафарбувати окружність намальовану останнім оператором CIRCLE,
червоним кольором, як і колір кола, спожитий в операторі
CIRCLE.
- 20 -
3. ФАЙЛИ. РОБОТА в Бейсик З файлу послідовно
І ПРЯМОГО ДОСТУПУ
Якщо необхідно використовувати набір даних або програму мно-
гократно, то необхідно зберегти їх на зовнішньому пристрої пам'яті
(наприклад, диску або дискеті). Для цього створюється файл. Файл
повинен мати ім'я. Ім'я складається з двох частин: власне ім'я і
розширення
1імя 0. 1расшіреніе
Ім'я може містити до 8 символів, розширення 1 - 0до трьох.
Можуть використовуватися такі символи
A - z 0 - 9 () () @ # $ 1 0% ^ &! - _/'~
Повне ім'я файлу в MS DOS містить весь шлях по дереву від
кореневої директорії до потрібного файлу. Наприклад,
C: STLABwork.bas,
де C - ім'я диска, ST - ім'я директорії на диску, LAB - ім'я піддамся-
ректори директорії ST, work.bas - ім'я програми на Бейсіку.
Далі мова піде тільки про файли даних.
3.1. Файли послідовного доступу
Послідовний файл складається із записів, доступ до яких
здійснюється послідовно, тобто n-я запис слід за (n -
1)-ой як при формуванні файлу, так і при зчитуванні з нього.
Створення послідовного файлу включає наступні кроки:
відкриття файлу (оператор OPEN), виведення даних у файл (оператори
PRINT #, WRITE #, або PRINT # USING) і закриття файлу (оператор
CLOSE).
Зчитування з послідовного файлу включає наступні ша-
ги: відкриття файлу, введення даних з файлу (оператори INPUT #,
INPUT $, LINE INPUT #), закриття файлу.
_Оператор OPEN. 2 0подготавлівает файл для читання з файлу
(INPUT) або запису у файл (OUTPUT, якщо створюється новий файл,
APPEND, якщо додаються запису у вже існуючий файл).
INPUT
OPEN 1імя файлу 0FOR OUTPUT 1 0 AS # 1номер файлу
APPEND
_Оператор CLOSE. Закриває файл, тобто унеможливлює чте-
- 21 -
розслідування або запис.
CLOSE [# 1номер файлу 0]
Оператор CLOSE без параметрів закриває всі відкриті файли.
Одиницею інформації, яка передається при записі у файл
або читанні з файлу 1, 0является запис (логічна запис) 2. 0Запісь
ділиться на поля. Кожне поле пов'язане з одним елементом даних.
0Могут бути створені два типи послідовних файлів:
1) з роздільниками полів, коли кожне поле автоматично
відокремлюється спеціальним символом (наприклад, коми). Для створення
такого файлу використовується оператор WRITE #, для читання з нього -
оператор INPUT #.
Дані у файлі зберігаються в такому вигляді, як якби вони наби-
ралісь на клавіатурі при виконанні оператора INPUT, тобто поділу-
лени комами і кожен запис закінчується перекладом рядки.
_Оператор INPUT #. 2 0імеет вид
INPUT # 1номер файлу 0, 2 1спісок змінних
де змінні в списку по типу повинні відповідати даним в
файлі.
2) поля не розділені 1, 0і кожен запис точно така ж, як
якщо б ці дані відображалися на екрані або друкувалися на прин-
Тере. Для створення такого файлу використовується оператор PRINT #, для
читання з нього - оператори INPUT $ або LINE INPUT #. _Оператор
_INPUT $. передає з файлу відразу весь рядок (запис) зазначеної тривалий
ни n в символьну змінну, наприклад, ST $
ST $ 2 = 0INPUT $ (n, # 1номер файлу 0)
_Оператор LINE INPUT #. 2 0передает у вказану змінну ST $ всю
рядок незалежно від її довжини
LINE INPUT # 1номер файлу 0, 2 0ST $
Приклад (з роздільниками полів):
OPEN "SEQU.DAT" FOR OUTPUT AS # 1
ST $ = "ІВАНОВ"
INT% = 1972
FLOT! = 75.3
'тепер записуємо рядок у файл
WRITE # 1, ST $, INT%, FLOT!
ST $ = "ПЕТРОВ"
INT% = 1975
FLOT! = 62.5
'записуємо інший рядок у файл
- 22 -
WRITE # 1, INT%, ST $, FLOT!
CLOSE # 1
END
Створений файл буде наступним
"ІВАНОВ", 1972, 75.3
1975, "ПЕТРОВ", 62.5
Наступна програма читає з цього файлу:
OPEN "SEQU.DAT" FOR INPUT AS # 1
ST $ = ""
INT% = 0
FLOT! = 0
'тепер читаємо рядок тексту з файлу
INPUT # 1, ST $, INT%, FLOT!
PRINT ST $, INT%, FLOT!
ST $ = ""
INT% = 0
FLOT! = 0
'читаємо інший рядок
INPUT # 1, INT%, ST $, FLOT!
PRINT INT%, ST $, FLOT!
CLOSE # 1
END
Приклад (без розділових полів):
OPEN "SEQUEN.DAT" FOR OUTPUT AS # 1
ST $ = "ІВАНОВ"
INT% = 1972
FlOT! = 73.1
'записуємо рядок тексту в файл
PRINT # 1, ST $, INT%, FLOT!
ST $ = "ПЕТРОВ"
INT% = 1975
FLOT! = 64.3
'запишемо інший рядок, використовуючи оператор
PRINT # 1, USING "+####$#.##^^^^"; INT%, ST $, FLOT!
CLOSE # 1
END
Зміст створеного файлу буде таким:
ІВАНОВ 1972 73.1
1975 ПЕТРОВ 6.43Е 01
- 23 -
Наступна програма читає з цього файлу:
OPEN "SEQUEN.DAT" FOR INPUT AS # 1
ST $ = ""
ST $ = INPUT $ (80, # 1)
PRINT ST $
LINE INPUT # 1, ST $
PRINT ST $
CLOSE # 1
END
3.2. Файли прямого доступу
Файл прямого доступу складається із записів, доступ до яких
можливий у довільному порядку за номером запису.
Створення файлу прямого доступу включає наступні кроки:
відкриття файлу (оператор OPEN); завдання структури запису файла,
або розмітка буфера (оператор FIELD); передача записи в буфер
(оператори LSET 2 0ілі RSET); пересилання вмісту буфера в файл
(оператор PUT), при цьому якщо номер запису в операторі PUT 2 0не
вказаний явно, буфер поміщається на місце поточного запису, при відкритому
критті файлу покажчик поточного запису дорівнює 1, після кожної операції
введення або виведення покажчик зсувається на наступний запис; за-
нення файлу (оператор CLOSE).
Записи передаються у вигляді рядків символів. Тому необхідно
використовувати відповідні функції перетворення даних в
рядок символів і назад.
Нижче перераховані функції і здійснювані ними перетворень-
вання.
MKI $ (MKL $) - ціле (довге ціле) в 2-х (4-х) байтове
рядок;
MKS $ (MKD $) - речовий (речовий подвійної точності) в
4-х (8-ми) байтове рядок.
CVI (CVL) - 2-х (4-х) байтове рядок в ціле (довге це-
ціле);
CVS (CVD) - 4-x (8-ми) байтове рядок у речовий (ве-
громадської подвійної точності).
Зчитування з файла прямого доступу включає також п'ять ша-
гов: відкриття файлу; розмітка буфера; передача записи з файлу в
буфер (оператор GET); обробка даних буфера (змінні буфера
- 24 -
доступні з програми); закриття файлу.
Якщо висновок у файл і введення з файлу здійснюються в одній
програмі, то відкриття та закриття файлу здійснюється один раз
перед початком і після закінчення всіх операцій з файлом.
_Оператор OPEN. 2 0імеет вид
OPEN 2 1імя файла 2 0AS # 1номер файла 2 0LEN 2 0 = 1дліна запису
(відсутність вказівки режиму введення або виведення означає, що файл
прямого доступу).
_Оператор FIELD. 2 0імеет вид
FIELD # 2 1номер файлу 0, 2 0n1 2 0AS 2 1імя1 0 [2, 0n2 2 0AS 2 1імя2 0, 2 0 ...] 2 0,
де n1, n2, ... - Довжина поля в байтах під змінні 1імя1 0, 1імя2 0,
... (1імя1 0, 1імя2 0, - символьні змінні).
_Оператори. _LSET, RSET. 2 0імеют вид
LSET 2 1імя 2 0 = 2 1сімвольное вираз
RSET 2 1імя 2 0 = 2 1сімвольное вираз
Оператор LSET (RSET) заповнює одне поле записи в буфері
(оператор LSET - з початку, RSET - з кінця, що залишилися позиції за-
виконується пробілами).
_Оператор PUT. має вигляд
PUT 2 0 # 2 1номер файла 2 0 [2, 1номер запису 0]
Цей оператор передає вміст буфера у файл на місце за-
писи з вказаним номером (або поточної, якщо номер не вказаний).
_Оператор GET. 2 0імеет вид
GET 2 0 # 2 1номер файла 2 0 [, 2 1номер запису 2И 0]
Цей оператор передає вміст записи з зазначеним но-
мером в буфер (якщо номера немає, передається поточна запис).
Як приклад наводиться програма, яка формує
файл прямого доступу із записів наступної структури:
N п/п Прізвище Рік народження
У програмі змінні позначені n%, nam $, dat%; для уівідповідності-
твующіх полів буфера використовуються позначення np $ (2 байти), nm $
(10 байт), dt $ (6 байт).
OPEN "GSR.DAT" AS # 1 LEN = 18
FIELD # 1, 2 AS np $, 10 AS nm $, 6 AS dt $
FOR i% = 1 to 3
INPUT n%, nam $, dat%
LSET np $ = MKI $ (n%)
LSET nm $ = nam $
LSET dt $ = MKI $ (dat%)
- 25 -
PUT # 1, i%
NEXT i%
CLOSE # 1
END
Наступна програма здійснює введення даних з файлу GSR.DAT і
їх друк у зворотному порядку.
OPEN "GSR.DAT" AS # 1 LEN = 18
FIELD # 1, 2 AS np $, 10 AS nm $, 6 AS dt $
FOR i% = 3 to 1 STEP -1
GET # 1, i%
n% = CVI (np $)
dat% = CVI (dt $)
PRINT n%, nm $, dat%
NEXT i%
CLOSE # 1
END
- 26 -
4. Зображення, що рухається, звукові ефекти
І НЕСТАНДАРТНИЙ Ввід з клавіатури
4.1. Оператор DRAW
За допомогою оператора DRAW можна креслити (малювати) на екрані
різні фігури (предмети), використовуючи параметри Un, Dn, Ln, Rn
для переміщення на n позицій від поточної точки вгору (U), вниз
(D), ліворуч (L) або праворуч (R); En, Fn, Gn, Hn для переміщення по
діагоналі на n точок вгору і вправо (E), вниз і вправо (F), вниз
і вліво (G), вгору і вліво (H); M h, V для переміщення в точку з
координатами h і V; M 7 + 0h, 7 + 0V для відносного переміщення на h
позицій вправо (+) або вліво (-) та на V позицій вниз (+) або
вгору (-). Крім того, параметр An встановлює кут n, де n = 0
(0 градусів), 1 (90 градусів), 2 (180 градусів) або 3 (270 граду-
сов); TAn - повертає на кут n, де n змінюється від -360 до 360
градусів. При n> 0 поворот здійснюється проти годинникової стрілки,
при n
щей палітри; Sn - визначає масштаб n/4, n може мінятися від 1
до 255 (за замовчуванням n = 4); B - пригнічує висвічення точок по
шляхи переміщення відповідно до командою С (за замовчуванням шлях
переміщення висвічується у вигляді ліній, С містить які-небудь з
перерахованих параметрів); N означає повернення у вихідну позицію
після виконання команди переміщення С.
Послідовність параметрів, що визначає режим і порядок
переміщень, полягає в лапки і вказується в операторі DRAW.
Наприклад, оператор
DRAW "M 160, 100"
здійснює переміщення від поточної позиції у позицію (160, 100),
залишаючи при цьому слід у вигляді?? акрашенних точок. Оператор
DRAW "BM160, 100"
здійснює той же переміщення, але не залишаючи сліду. Оператор
DRAW "L10 U10 R10 D10"
прокреслює лінію на 10 позицій ліворуч, на 10 позицій вгору, на
10 позицій вправо і на 10 позицій вниз, тобто утворює квадрат.
Прогалини, що розділяють параметри, є обов'язковими і використовуються для
наочності. Оператор
DRAW "BM 180, 20 NU10 ND10 NL10 NR 10"
- 27 -
здійснює переміщення без позначення шляху в точку (180, 20),
а потім креслить хрест (знак +).
У операторі DRAW можна використовувати не тільки символьні
константи (див. вище), а й символьні змінні, в яких зара-
неї виготовляють окремі фрагменти малюнка (або весь рису-
нок), що дозволяє відтворювати їх багато разів різними опе-
ратора DRAW. Наприклад,
SQAR $ = "L10U10R10D10"
DRAW SQAR $
Аргументи переміщення n, k, V можуть бути задані константами, як
в наведених вище прикладах операторів DRAW, або змінними. В
останньому випадку потрібно використовувати функцію VARPTR $. Наприклад,
оператори
DRAW "E15"
і
a = 15
DRAW "E =" + VARPTR $ (a)
виконують одне й те ж дію. Це ж відноситься і до операторів
I% = 1
DRAW "M =" + VARPTR $ (I%) + ", 40"
і
DRAW "M = 1, 40"
Але в першому випадку (при використанні змінної I%) оператор
DRAW може виконуватися при різних її значеннях, наприклад, в
циклі.
Зауваження. Виконання оператора DRAW можливо тільки в гра-
фіческом режимі (перехід за допомогою оператора SCREEN).
4.2. Оператори GET і PUT
Оператори GET і PUT дозволяють створювати рухомі зображення-
вання.
При виконанні оператора GET поточний стан частині екрана
запам'ятовується. При виконанні оператора PUT зображення, збережений-
ве оператором GET, відтворюється в іншому вказаному місці ек-
рана, тобто зображення як би рухається.
Оператор GET запам'ятовує зображення заданої області екрану в
масиві, який повинен бути заздалегідь описаний. Оператор GET має
вид
- 28 -
GET (x1, y1) - (x2, y2), B
(x1, y1), (x2, y2) визначають ліву верхню і нижню праву гра-
ницы запам'ятовуємо області, B - ім'я числового масиву, в якому
зберігається копія цієї частини екрану.
Існує формула, яка визначає необхідну довжину масиву (в
байтах), виходячи з розміру запам'ятовуємо області та режиму роботи
екрану. Так за середньої роздільної здатності для збереження n1
точок по горизонталі і n2 точок по вертикалі необхідний розмір
масиву N обчислюється за формулою
N = 4 + INT ((n1 * 2 +7)/8) * n2
при високій роздільній здатності
N = 4 + INT ((n1 + 7)/8) * n2
При використанні масиву цілого типу (один елемент дорівнює
двом байтам) необхідно передбачити розмір INT ((N + 1)/2).
Оператор PUT поміщає копію частини екрану, збережене опера-
тором GET в будь-яку частину екрану, лівий верхній кут якої задано
точкою (x, y). Цей оператор має вигляд
PUT (x, y), B
4.3. Оператор BEEP
Цей оператор викликає звуковий сигнал певної частот