1. ОСНОВНІ ЗАСОБИ МОВИ
1.1. Структура програми
Програма складається з рядків. Один рядок містить один або кілька операторів, розділених двокрапкою. Наприклад,
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-31 до 231, 4 байти); речовинний (4 байти); речовинний подвійної точності (8 байт); символьний (послідовність будь-яких символів, кожний символ займає 1 байт).
Тип змінної визначається типом даних, які вона представляє. Вказівка типу змінної задається відповідним знаком після імені.
a $ - символьний
a% - цілий
a & - довгий цілий
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 буде приймати значення, починаючи з 1. Якщо опис масиву відсутній, то за замовчуванням верхній індекс дорівнює 10 (нижній - 0). В описі масиву замість константи може використовуватися змінна. Наприклад,
DIM a (n)
Значення n повинно бути попередньо визначене.
Використовуючи оператор ERASE, можна звільнити пам'ять, виділену під масив, і повернути її для подальшого використання. Наприклад, оператор
ERASE a
повертає пам'ять, виділену під масив a.
1.4. Вирази
Символьні вирази складаються з символьних констант (послідовність символів, укладена в лапки), символьних змінних, символьних функцій, з'єднаних знаком + (конкатенація, або об'єднання). Наприклад,
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) ex
LOG (x) ln x
LOG2 (x) log2 x
LOG10 (x) lg x
INT (x) ціла частина х
SGN (x) знак г (1 при х> 0,
0 при х = 0, -1 при x <0) SQR (x) квадратний корінь з х>
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 генерується нова послідовність випадкових чисел; якщо x> 0 або відсутній, то генерується чергове випадкове число, але при повторному запуску послідовність повторюється. Можна використовувати оператор RANDOMIZE (перед першим використанням функції RND), щоб при новому запуску програми отримувати нову послідовність випадкових чисел.
Операції відносини:,> =,.
Ліва та права частини відносини - це числове або символьний вираз (в останньому випадку порівнюються числові коди символів). Якщо ставлення задовольняється (є істинним), то його значення дорівнює -1, якщо не задовольняється (є хибним), то його значення 0. Стосунки можуть бути використані також у числових виразах. Наприклад, при виконанні оператора
PRINT 5> 6, 5 <6, (5 <6) * 15 буде надруковано 0, -1 і -15.>
Логічні операції: AND (логічне і), OR (логічне або), XOR (виключає або), EQV (еквівалентність), IMP (імплікація).
Логічні операції здійснюються над цілими числами -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. Основні оператори
Оператор присвоювання має вигляд мінлива = вираз
Оператор безумовного переходу має вигляд GOTO мітка
Умовний оператор має вигляд
IF умова THEN оператори [ELSE оператори] Наприклад,
IF a
В якості умови може використовуватися ціле вираз, який інтерпретується як FALSE, якщо його значення дорівнює 0, і TRUE, якщо не дорівнює 0.
Якщо після THEN або після ELSE розташовується ціла група операторів, то можна використовувати IF блок, який має наступну структуру
IF умова THEN оператори
ELSE оператори END IF
При цьому ELSE і оператори за ним можуть бути відсутніми, тобто можлива конструкція
IF умова THEN оператори
END IF
Якщо після ELSE необхідна перевірка умови, то використовується оператор ELSEIF
IF умова THEN оператори ELSEIF умова THEN оператори
ELSE оператори END IF
Оператор кінця END використовується для закінчення виконання програми. Може використовуватися в програмі кілька разів. Використовується також з IF, SUB, DEF, SELEСT (см.ниже)
Оператор очищення екрана CLS зазвичай розташовується на початку програми для очищення екрана перед виведенням результатів програми.
Оператор вводу INPUT має вигляд
INPUT [;] [пояснювальний текст], список змінних
Пояснювальний текст полягає в лапки. Змінні в списку відокремлюються один від одного комами. ";" Після INPUT означає, що курсор залишиться на тому ж рядку, коли буде натиснуто "Введення".
Оператор виведення PRINT має вигляд
PRINT [список виведення]
Елементи списку розділяються "," або ";" або пробілом. У першому випадку висновок наступного елементу починається в нову зону (рядок екрана умовно поділена на 5 зон з 14 позицій кожна), в другому - через пробіл (для чисел) або безпосередньо слідом (для символьних рядків) за попереднім елементом.
Елементом списку може бути ім'я змінної, константа (символьний полягає в лапки) або вираз (перед висновком обчислюється).
Оператор виведення PRINT USING має вигляд PRINT USING формат; список виведення
Формат задається у вигляді символьної рядка (укладеної в лапки), що задає форму виведення кожного елемента списку за наступними правилами для чисел: # - для кожної цифри, ^ ^ ^ ^ - для виведення в показовою формі. Решта символів позначають самі себе. Наприклад,
##.## - Буде виведено 2 цифри як цілої частини і два
- Дробової. Якщо ціла частина містить більше двох цифр, то перед числом буде надрукований знак%.
#. # # ^ ^ ^ ^ - Висновок буде здійснюватися в показовою формі.
Для символьних рядків:
"" - (Два пробілу) - буде виведено чотири символи
"" - (Без пробілу) - буде виведено два символи
Взагалі кількість виведених символів буде дорівнює числу пропусків між двома похилими лініями + 2.
"!" - Буде виведено один символ
"&" - Будуть виведені всі символи
Наприклад,
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нач to iкона [STEP ih] оператори
NEXT i
i, iнач, iкона, 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 або
FOR i = 1 to 10
FOR j = 1 to 20
....< br />
NEXT j, i
2. DO WHILE умова оператори
LOOP або
WHILE умова оператори WEND
(оператори виконуються, поки виконується умова)
3. DO UNTIL умова оператори
LOOP
(оператори виконуються до тих пір, поки не буде виконана умова. Як тільки умова буде виконана, здійснюється вихід з циклу).
4. DO оператори
LOOP
Вихід з циклу в цьому випадку здійснюється оператором EXIT.
Оператор EXIT (вихід) використовується з 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 мітка [, мітка ...]< br />
n може приймати значення від 0 до 255. Перехід здійснюється на позначку, яка визначається значенням n. Наприклад, при n = 2 перехід здійснюється на другу позначку в списку. Якщо n = 0 або n більше кількості міток у списку, то виконується наступний по порядку оператор.
ON n GOSUB мітка [, мітка ...]< br />
n приймає значення від 0 до 255. Перехід здійснюється до одного з можливих підпрограм (см.ниже), що визначаються мітками у списку, в залежності від значення n.
Після виконання підпрограми повернення здійснюється до оператора, наступного за ON/GOSUB.
1.8. Підпрограми, функції та процедури
Підпрограма - позначена послідовність операторів, що закінчується оператором RETURN. Виконується, коли досягнуть GOSUB.
....< br />
GOSUB aa
....< br />
END aa: оператори RETURN
Оператор RETURN здійснює повернення до оператора, безпосередньо наступного за GOSUB.
Функція може бути визначена одним рядком (оператор-функція) або кількома рядками (підпрограма-функція).
DEF FN ім'я [(список параметрів)] = вираз
(це визначення оператора-функції).
Тут список параметрів може включати не більше 16 параметрів. DEF FN ім'я [(список параметрів)]
опис змінних
оператори
[EXIT DEF]
....< br />
[FN ім'я = вираз]
END DEF
(це визначення підпрограми-функції).
Звернення до функції записується там, де потрібно отримати її значення. При цьому параметри замінюються їх фактичними значеннями. Наприклад,
DEF FNF (x, y) = x * x + y * y 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 ім'я [(список параметрів)] опис змінних оператори
[EXIT SUB]
END SUB
Ім'я може містити до 31 символу. Список параметрів (не більше
16) може включати імена змінних і масивів. Для масивів в дужках вказується розмірність. Наприклад, 1 - для одновимірного масиву, 2 - для двовимірного і т.д.
У зверненні до процедури за ім'ям фактичного масиву йдуть порожні дужки. Наприклад,
SUB SUM (x (1), n, S)
S = 0
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
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 не можна змінювати в основній програмі).
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 встановлює колір фону екрану і палітру (з
трьох кольорів) для фарбування точок (для текстового режиму - ще й
колір рамки).
Існує дві палітри кольорів: 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 має вигляд
COLOR i, j [, k]
де i - колір фону, j - номер палітри, k - колір рамки.
Наприклад, оператори
SCREEN 1,0
COLOR 9,0
встановлюють кольоровий графічний режим при середній роздільної здатності; колір фону - блакитний; наступні оператори повинні використовувати кольори з 0-й палітри.
У графічному режимі (для отримання на екрані нерухомих зображень) можуть використовуватися наступні оператори:
PSET (PRESET) - включає (або вимикає) точку; LINE - креслить лінію; CIRCLE - креслить коло або її частина; PAINT - зафарбовує вказану частину екрану.
Більш складні оператори для отримання рухомих зображень (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 (x, y)
перуть точку (x, y) з екрану.
Оператор LINE дозволяє накреслити відрізок прямій, вказавши його початок (x1, y1), кінець (x2, y2) і колір k
LINE [(x1, y1)] - (x2, y2), k
Якщо початкова точка відсутня, то лінія буде прокреслена, починаючи з точки, в якій зупинився попередній оператор.
За допомогою оператора LINE можна також креслити і зафарбовувати прямокутники
LINE (x1, y1) - (x2, y2), [k], B [F]
Точки (x1, y1) та (x2, y2) трактуються при цьому як ліва нижня і верхня права вершини прямокутника. Якщо колір k відсутній, то прямокутник буде накреслена 3-м кольором палітри. За наявності параметра F площу всередині прямокутника буде зафарбована. Наприклад, оператор
LINE (80, 175) - (100, 25), 2, BF зафарбовує червоним кольором прямокутник, розташований між 80-ої та 100-й позиції по горизонталі та 175-ої та 25-ій позиціями по вертикалі.
Оператор CIRCLE дозволяє будувати кола, дуги, сектори та еліпси.
Оператор CIRCLE (x, y), r, 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 дозволяє зафарбовувати великі ділянки екрана. Для забарвлення необхідно вказати довільну точку всередині закрашується області (x, y), колір, яким треба зафарбувати область (k1) і колір межі, яку не можна перетинати при забарвлення (k2), k1 і k2 можуть збігатися. Оператор PAINT має вигляд
PAINT (x, y), k1, k2
Наприклад, оператор
PAINT (160, 100), 2, 2
зафарбувати окружність намальовану останнім оператором CIRCLE,
червоним кольором, як і колір кола, спожитий в операторі
CIRCLE.
3. ФАЙЛИ. РОБОТА в Бейсик З файлу послідовно
І ПРЯМОГО ДОСТУПУ
Якщо необхідно використовувати набір даних або програму багато разів, то необхідно зберегти їх на зовнішньому пристрої пам'яті (наприклад, диску або дискеті). Для цього створюється файл. Файл повинен мати ім'я. Ім'я складається з двох частин: власне ім'я та розширення
імя.расшіреніе
Ім'я може містити до 8 символів, розширення - до трьох.
Можуть використовуватися такі символи
A - z 0 - 9 () @ # $% ^ &! - _/'~
Повне ім'я файлу в 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 готує файл для читання з файлу
(INPUT) або запису у файл (OUTPUT, якщо створюється новий файл,
APPEND, якщо додаються запису у вже існуючий файл).
INPUT
OPEN назва файлу FOR OUTPUT AS # номер файла
APPEND
Оператор CLOSE закриває файл, тобто унеможливлює читання або запис.
CLOSE [# номер файлу]
Оператор CLOSE без параметрів закриває всі відкриті файли. Одиницею інформації, яка передається при записі у файл
або читанні з файлу, є запис (логічна запис). Запис
ділиться на поля. Кожне поле пов'язане з одним елементом даних. Можуть бути створені два типи послідовних файлів:
1) з роздільниками полів, коли кожне поле автоматично відокремлюється спеціальним символом (наприклад, коми). Для створення такого файлу використовується оператор WRITE #, для читання з нього - оператор INPUT #.
Дані у файлі зберігаються в такому вигляді, як якби вони набиралися на клавіатурі при виконанні оператора INPUT, тобто розділені комами і кожен запис закінчується перекладом рядки. Оператор INPUT # має вигляд
INPUT # номер файла, перелік змінних
де змінні в списку по типу повинні відповідати даним в
файлі.
2) поля не розділені, і кожен запис точно така ж, як
якщо б ці дані відображалися на екрані або друкувалися на принтері. Для створення такого файлу використовується оператор PRINT #, для читання з нього - оператори INPUT $ або LINE INPUT #. Оператор INPUT $ передає з файлу відразу весь рядок (запис) зазначеної довжини n в символьну змінну, наприклад, ST $
ST $ = INPUT $ (n, # номер файла)
Оператор LINE INPUT # передає у вказану змінну ST $ весь рядок незалежно від її довжини
LINE INPUT # номер файлу, ST $
Приклад (з роздільниками полів):
OPEN "SEQU.DAT" FOR OUTPUT AS # 1
ST $ = "ІВАНОВ"
INT% = 1972
FLOT! = 75.3
'тепер записуємо рядок у файл
WRITE # 1, ST $, INT%, FLOT!
ST $ = "ПЕТРОВ"
INT% = 1975
FLOT! = 62.5
'записуємо інший рядок у файл
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
Наступна програма читає з цього файлу:
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 або RSET); пересилання вмісту буфера в файл (оператор PUT), при цьому якщо номер запису в операторі PUT не вказаний явно, буфер поміщається на місце поточного запису, при відкритті файлу покажчик поточного запису дорівнює 1, після кожної операції введення або виведення покажчик зсувається на наступний запис; закриття файлу (оператор CLOSE).
Записи передаються у вигляді рядків символів. Тому необхідно використовувати відповідні функції перетворення даних в рядок символів і назад.
Нижче перераховані функції і здійснювані ними перетворення.
MKI $ (MKL $) - ціле (довге ціле) в 2-х (4-х) байтове рядок;
MKS $ (MKD $) - речовий (речовий подвійної точності) в 4-х (8-ми) байтове рядок.
CVI (CVL) - 2-х (4-х) байтове рядок в ціле (довге ціле);
CVS (CVD) - 4-x (8-ми) байтове рядок у речовий (речовий подвійної точності).
Зчитування з файла прямого доступу включає також п'ять кроків: відкриття файлу; розмітка буфера; передача записи з файлу в буфер (оператор GET); обробка даних буфера (буфера змінні доступні з програми); закриття файлу.
Якщо висновок у файл і введення з файлу здійснюються в одній програмі, то відкриття та закриття файлу здійснюється один раз перед початком і після закінчення всіх операцій з файлом.
Оператор OPEN має вигляд
OPEN назва файлу AS # номер файла LEN = довжина запису (відсутність вказівки режиму введення або виведення означає, що файл прямого доступу).
Оператор FIELD має вигляд
FIELD # номер файлу, n1 AS імя1 [, n2 AS імя2 ,...],< br />
де n1, n2, ... - Довжина поля в байтах під змінні імя1, імя2,
... (імя1, імя2, - символьні змінні).
Оператори LSET, RSET мають вигляд
LSET ім'я = символьний вираз
RSET ім'я = символьний вираз
Оператор LSET (RSET) заповнює одне поле записи в буфері (оператор LSET - з початку, RSET - з кінця, що залишилися позиції заповнюються пробілами).
Оператор PUT має вигляд
PUT # номер файла [, номер запису]
Цей оператор передає вміст буфера у файл на місце записи з вказаним номером (або поточної, якщо номер не вказаний).
Оператор GET має вигляд
GET # номер файла [, номер запису]
Цей оператор передає вміст записи з вказаним номером в буфер (якщо номера немає, передається поточна запис).
Як приклад наводиться програма, яка формує файл прямого доступу із записів наступної структури:
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%)
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
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 + h, + V для відносного переміщення на h позицій вправо (+) або вліво (-) та на V позицій вниз (+) або вгору (-). Крім того, параметр An встановлює кут n, де n = 0 (0 градусів), 1 (90 градусів), 2 (180 градусів) або 3 (270 градусів); TAn - повертає на кут n, де n змінюється від -360 до 360 градусів. При n> 0 поворот здійснюється проти годинникової стрілки, при 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"
здійснює переміщення без позначення шляху в точку (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 має вигляд
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
Цей оператор викликає звуковий сигнал певної частоти і тривалості 0,25 секунди. Використовується, коли потрібно привернути увагу при виконанні будь-якої частини програми.
4.4. Оператор SOUND
Цей оператор викликає звуковий сигнал частоти x (від 37 до 32767 Гц) і тривалості в "тіках" (1/18 секунди) y
SOUND x, y
Оператор SOUND з нульовою тривалістю перериває роботу попереднього оператора SOUND, навіть якщо той не відзвучав до кінця. Використовується для спеціальних звукових ефектів (сирена і пр.).
4.5. Оператор PLAY
Цей оператор дозволяє створювати музику. Загальний вигляд оператора
PLAY символьний вираз
де символьний вираз задає порядок звучання нот, їх тривалість, номер октави і т.д., використовуючи наступні параметри: букви C, D, E, F, G, A, B (ноти від "до" до "сі"), A # , або A +, позначає A дієз, A-позначає A бемоль, аналогічно - для інших нот; On означає грати в октаві n (n змінюється від 0 до 6, октава починається з ноти "до" (літера C), за замовчуванням n = 4). Наприклад,
PLAY "O3 FGA O4 ABC"
У цьому прикладі в 3-ої октави звучать ноти F, G, A, у четвертій октаві ноти A, B, C. Якщо перед нотою використовується знак "або A,
Можна замість номера октави і символу ноти поставити її порядковий номер (від 1 до 84), вказавши перед ним букву N. Наприклад,
PLAY "O4G" аналогічно оператору
PLAY "N44"
Загальна тривалість ноти встановлюється параметром Ln, де n може приймати значення від 1 до 64 і позначає частку повної ноти, тобто
L1 означає повну ноту, L2 позначає половинну, L4 - четвертної ноту і т.д.
Пауза задається параметром Pn (n - довжина паузи, вимірюється в тривалості, встановлених параметром L).
Темп задається параметром Tn, де n - число четвертної нот за хвилину, може приймати значення від 32 до 255 (за замовчуванням n =
120). Параметри MS, MN або ML визначають частку часу звучання кожної ноти від тривалості, визначеної параметром L:
MS - у 3/4 цієї тривалості (стаккато),
MN - в 7/8 (звичайне, нормальне звучання),
ML - повне час (легато).
Режим звучання може бути основним, коли наступний оператор програми не буде виконуватися, поки оператор PLAY не завершений (параметр MF), або фоновим, коли виконання оператора PLAY не перешкоджає виконанню інших операторів програми (параметр MB). Наприклад,
PLAY "L8 MF MS O3 GG L4 AG O4 C O3 L2 B"
Окремі музичні відрізки можна описати попередньо у вигляді символьних рядків і використовувати їх потім в операторі PLAY. Наприклад,
A $ = "EDE": B $ = "CDE": PLAY A $ + B $
4.6. Функція INKEY $
Функція INKEY $ діє аналогічно оператору INPUT, однак при введенні на екрані не висвітлюється вводиться символ і не вимагається натискання клавіші "Введення". Програма при цьому не перериває роботу, як при виконанні оператора INPUT. При виконанні оператора
X $ = INKEY $
символ, що відповідає тій самій клавіші, присвоюється змінної X $.
Розглянемо як примі?? а програму:
PRINT "Задайте напрям: 1-північ, 2-південь, _
3-захід, 4-схід "
aa:
D $ = INKEY $
IF D $ = "" THEN aa
ON VAL (D $) GOTO nn, ww, ee, ss
PRINT "Неправильна клавіша": GOTO aa nn:
...
ww:
...
Тут, поки не буде натиснута будь-яка клавіша, 3-й і 4-й оператори виконуються в циклі, забезпечуючи режим очікування. Коли клавіша "1", "2", "3", або "4" натиснута, відповідне значення присвоюється змінній D $. Далі в операторі ON здійснюється її перетворення до числовому значенню і перехід до зазначеної мітці для відповідної обробки.
5. БІБЛІОТЕКА СТАНДАРТНИХ ПРОЦЕДУР У ТУРБО-БЕЙСІК
1. Рішення систем лінійних алгебраїчних рівнянь (SIMQ.BAS)
2. Інтерполяція функцій (ALI.BAS)
3. Звернення матриці та обчислення визначника (MINV.BAS)
4. Множення матриць (GMPRD.BAS)
5. Обчислення кореня рівняння (RTMI.BAS)
6. Рішення систем нелінійних рівнянь (SNEN.BAS)
7. Обчислення коренів полінома (POLRT.BAS)
8. Обчислення похідної (DCAR.BAS)
9. Обчислення інтеграла (QATR.BAS)
10. Екстремум функції (FMCG.BAS)
11. Рішення систем звичайних диференціальних
рівнянь (RKGS.BAS)
12. Згладжування функцій (SG13.BAS)
13. Апроксимація функцій (APFS.BAS)
14. Упорядкування значень (використовується при
інтерполяція функцій) (ATSG.BAS)
15. Обчислення поліномів Чебишева (використовується
при апроксимації функцій) (APCH.BAS)
Підключення бібліотечної процедури здійснюється оператором
$ INCLUDE "ім'я бібліотечної процедури"
Приклад використання бібліотечної процедури QATR.BAS
$ INCLUDE "QATR.BAS"
CLS
PRINT "ОБЧИСЛЕННЯ ІНТЕГРАЛА"
CALL QATR (0, 1, .0001, 24, INTEGRAL, IER%)
PRINT "ІНТЕГРАЛ =";
PRINT USING "###.####"; INTEGRAL
PRINT "КОД ПОМИЛКИ ="; IER%
DEF FNFCTN (X) = LOG (1 + X)/(1 + X * X)
END
6. Рекомендовані ПОРЯДОК РОБОТИ НА ПЕОМ ПРИ СТВОРЕННІ
І ВИКОНАННЯ ПРОГРАМ НА МОВІ ТУРБО-БЕЙСІК
1. Увійти в Турбо-Бейсік. Для цього набрати tb в командному рядку і натиснути клавішу "Введення". Ще раз натиснути "Введення".
У верхній частині екрана висвічується головне меню.
2. Для початкового введення або виправлення програми увійти до редактор (пункт меню EDIT).
3. Після того, як програма складена (або внесені виправлення), її необхідно записати в пам'ять на диск або дискету (пункт головного меню FILE, підпункт SAVE або клавіша F2).
Зауваження. Рекомендується після набору кожних 10 рядків записувати програму на диск (простим натисканням клавіші F2), щоб у разі збою ПЕОМ програма не пропала.
4. Виконати програму (пункт RUN головного меню), перехід на великий екран для аналізу результатів - команда ALT/F5.
5. Вийти з Турбо-Бейсіка (пункт FILE, підпункт EXIT або команда ALT/X).
Зауваження. У кожному режимі в нижній частині екрана вказано призначення функціональних клавіш. Наприклад, якщо курсор знаходиться в головному меню, то натискання клавіші F1 (Help) викликає появу на екрані відомостей щодо використання відповідного режиму, перехід до наступної сторінки - "Введення". Натискання F5 (Zoom) викликає розкриття поточного вікна на весь екран, повторне натискання F5 - повернення у вихідне положення; F6 (Next) - перехід до наступного вікна; F7 (Goto) - перехід в режим редагування; ALT/X (Exit) - вихід з Турбо-Бейсі