Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Інформатика корект.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
638.98 Кб
Скачать

Вправи та запитання

1. Скільки елементів мають описані нижче масиви та до якого типу вони належать, якщо мінімальне значення індексу є 1:

а) DIM А%(5), В(60), С(2,3);

б) DIM А(8), В!(2,40),С1%(5); в)DIMA#(2,5),B%(150),C1(30);

r) OPTION BASE 1918

DIM A (1923), B%(1925), СЩ1919);

д)OPNION BASED

DIM A(13), B%(15), D$(17) ?

2. Чому розміри масивів рекомендують задавати за допомогою оператора INPUT?

16. Нестандартні функції та підпрограми

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

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

Самостійно модулі не виконуються. Спочатку виконується частина програми, яка називається головною (основною) програмою, або головним (основним) модулем. Інші модулі є допоміжними й викликаються в процесі виконання головної програми. Після виконання чергового допоміжного модуля знову продовжує виконуватися головна програма.

Модулі відповідно можуть викликати інші модулі. У програмі може бути будь-яка кількість модулів, які обмінюються значеннями не тільки з головною програмою, але й між собою. В останньому випадку модульна структура програми має складний розгалужений вигляд (мал. 13).

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

Функція 1

Підпрограма 1

Функція 2

Підпрограма 2

Функція 3

Підпрограма 3

Підпрограма 4

Maл. 13. Модульна структура програми.

Складання програм з добре організованими модулями - це також ознака доброго стилю програмування й завдання структурного програмування.

Поняття модуля в інформатиці є досить загальним. Стосовно мови Бейсик розрізняють два види модулів: нестандартні функції (функції користувача) та підпрограми.

2. Нестандартні функції. Функції поділяються на стандартні та нестандартні.

Кількість стандартних функцій обмежена. Тому користувач має змогу створити будь-які інші функції. Відповідні модулі називаються нестандартними функціями (або функціями користувача). Нестандартну функцію використовують так само, як і стандартну.

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

Нестандартну функцію треба описати. Для опису нестандартної арифметичної функції є оператор опису функції:

DEF FN ім'я (А) = арифметичний вираз

Тут DEF FN (описати функцію) - службові слова. Ім'я - це ідентифікатор, який користувач називає функцією, і необов'язковий символ (%, #, !, $),який зазначає тип функції. Аргументом А є проста змінна. В арифметичному виразі можуть бути змінна А, сталі, інші змінні, інші функції. Аргумент А називається формальним параметром. Функція може мати не один, а декілька формальних параметрів. Оператор DEF є описовим. Найчастіше функції описують на початку програми.

Приклад 1. Розглянемо два оператори опису функції:

10DEFFNA(X) = 2*X 20DEFFNC(A,B) = SQR(A^2 + B^2)

Обчислення функції. Функції обчислюються в момент звертання до неї за допомогою вказівника функції

FNім'я(В)

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

Дія вказівника. Якщо в конкретному арифметичному виразі трапляється вказівник нестандартної функції, то система виконує такі дії:

  1. обчислює значення фактичного параметра;

  2. звертається до оператора опису даної функції;

  3. надає формальному параметру в арифметичному виразі значення фактичного та обчислює весь вираз;

  4. отримане значення присвоює вказівнику;

  5. продовжує обчислення конкретного арифметичного виразу.

Приклад 2. Нехай у програмі є такі оператори;

10 DEF FNA(X) = 2*X 20 DEF FNC(A,B) = SQR(A^2 + В^2)

30 Х = 0 : А = 3 : В = 4 40 Z=FNA(X) + FNA(A) + FNA (2) 50 W = FNC(A,B)

Взаємодія операторів у рядках 10-50 дасть такі результати:

Z = 0 + 6 + 4-10, W=SQR(9+ 16) = 5

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

Довідка 1. Оператор DEF дає змогу описувати функції за допомогою тільки одного програмного рядка. В сучасних системах модуль опису функції може складатися з декількох операторів і рядків. Він починається оператором

DEF FN ім’я (список формальних параметрів) і закінчується спеціальним оператором - .

ENDDEF

(або FNEND, або іншим залежно від системи). У середині модуля функцію описують так:

серія операторів

FN <ім'я> = арифметичний вираз.

Отже, модуль опису функції має такий вигляд:

DEF FN ім'я (список формальних параметрів)

серія операторів

FN ім'я = арифметичний вираз

EMDDEF

Робота з файлами даних

Основні поняття про файли даних.

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

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

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

Оператори роботи з файлами даних на дискових томах.

З кожним файлом даних пов'язані два поняття: фізичні і логічні записи. Фізичний запис безпосередньо зв'язаний з типами дискового пристрої введення - виведення (ПВВ) і магнітного носія (дискети чи жорсткого диска) і представляє собою одиницю носія, наприклад, сектор, з якою працює ПВВ при обміні інформацією з дисковим томом. Програми ж користувача, як правило, мають справу з логічними записами, які представляють собою логічно пов'язану сукупність байтів інформації, які здійснюють в БЕИСІК-програмі обмін з дисковим файлом за одну операцію (читання/запис). Якщо фізичний запис (сектор) має довжину 512 байтів, то довжина логічного запису може досягати довжини в 32767 байтів. БЕИСІК автоматично розподіляє сектори дискового тома під логічні записи файла. Це досягається як блокуванням записів, так і можливістю заняття одним логічним записом декількох фізичних записів. Наприклад, логічний запис може починатися в середині одного сектора і закінчуватись в будь-якому місці сектора, який відстає від початкового на К секторів. Файл даних будь-якого з названих двох типів складається з логічних записів.

При створенні найбільш простим є послідовний файл. Однак при використанні даних готового послідовного файла відсутня гнучкість та швидкість в зверненні до його окремих записів. При створенні послідовного файлу записи в ньому поміщаються послідовно один за одним по мірі їх поступлення. При необхідності прочитати з такого файлу (К+1)=ю запис ми вимушені будемо прочитати і попередні йому К записів. Для поповнення послідовного файла новими записами недостатньо відкрити його для запису як старий файл; при відкритті такого файлу для до запису слід використати режим APPEND оператора OPEN відкриття файлу. Числова інформація в послідовний файл записується в символьному вигляді, і тому для свого розміщення на томі вони потребують багато місця.

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

При роботі з файлами в середовищі мови БЕИСІК використовується буфер вводу-виводу розміром в 128 байт (по замовчуванню).

Загальна схема організації обміну з файлом даних має наступний вигляд: в залежності від типу файлу (послідовного чи довільного доступу) логічні записи поміщаються спочатку в програмний буфер, потім в системний і по мірі його заповнення переписується в дисковий файл. При читанні із файла описана процедура відбувається в протилежному порядку. Розмір програмного буфера вказується в програмі оператором FIELD і системним параметром "/S:" в команді BAS завантаження інтерпретатора БЕЙСІКА. Максимальне число файлів, які можна відкрити в БЕИСІК-програмі, по замовчуванню рівне 3.

Оператор OPEN має два формата:

1) OPEN "СФ" [FOR <режим>] AS [#] <нф> [LEN=K]

2) OPEN X$, [#] <нф>, "СФ" [,К]

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

OUTPUT - послідовний запис інформації в файл;

INPUT - послідовне читання інформації з файлу;

APPEND - дозапис в кінець послідовного файлу.

При відсутності параметру "режим" пропонується відкриття файлу довільного доступу. Необов'язковий параметр "#" ідентифікує логічний номер файлу, а параметр "нф" вказує саме значення логічного номера. Параметр "нф" представляє собою АВ з цілочисельними значеннями в діапазоні 1÷М, де М=3.

Параметр "К" визначає АВ з цілочисельними значеннями в діапазоні 1:32767 (по замовчуванню <К>=128) і задає довжину запису файлу довільного доступу.

Символьний параметр "Х$" визначає СВ, в значенні якого грає роль тільки перший його символ:

О - еквівалентний режиму відкриття OUTPUT;

І - еквівалентний режиму відкриття INPUT;

R - режим довільного вводу і виводу.

Даний параметр в другій формі вказує на режим відкриття файлу даних.

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

PRINT, PRINT USING, INPUT, LINE INPUT, WRITE , CLOSE, GET#, PUT#, LOC, LOF.

Один і той ж файл можна відкривати під різними логічними номерами в різних допустимих для даного файлу режимах. В цьому випадку кожному логічному номеру відводиться свій буфер вводу-виводу, однак БЕИСІК не перевіряє коректність використання даних в такому режимі роботи з файлами.

Наведемо приклади коректного відкриття файлів:

OPEN "B:PTI" FOR OUTPUT AS #2 - відкривається на ПВВ "В" новий послідовний файл

РТІ з логічним номером 2; якщо на томі вже існує файл з таким іменем, то в нього буде

записуватись нова інформація;

OPEN "B:AGN" FOR INPUT AS 1 - відкривається на ПВВ "В" для читання послідовний

файл AGN з логічним номером 1;

OPEN "В:А.01" FOR APPEND AS #G - відкривається на ПВВ "В" для дозапису в кінець

послідовний файл А.01 з логічним номером рівним значенню G;

OPEN "R", #4, "B:STRUCTUR", 1024 - відкривається на ПВВ "В" файл STRUCTUR

довільного доступу з логічним номером 4 і довжиною запису 1024 байта; в файл можна

записувати і з нього можна читати;

OPEN "B:STRUCTUR" AS #4 LEN=1024 - аналогічно прикладу 4;

OPEN A42$ FOR INPUT AS #2 - відкривається файл на читання під логічним номером 2, шлях до якого визначається в змінній А42$.

Оператор CLOSE має формат:

CLOSE [<Список логічних номерів файлів>]

і служить для закриття файлів, логічні номера яких перечисленні в його параметрі "список" Закриття будь-якого файлу відбувається в анулюванні логічного зв'язку між файлом (пристроєм) і його номером. Після закриття файлу можна в результаті по оператору OPEN присвоїти новий логічний номер, а попередній номер використати для іншого файлу даних.

При використання оператора CLOSE без параметра в БЕИСІК-програмі закриваються всі відкриті файли і пристрої. Подібно оператору CLOSE без параметра всі відкриті файли закриваються по наступним операторам і командам мови БЕИСІК: END, RESET, NEW, SYSTEM i RUN з параметром "R". Слід пам'ятати, що оператор STOP не закриває відкриті файли, що дозволяє в результаті відновити виконання програми.

При закритті по оператору CLOSE послідовного файла останнє вмістиме його буфера вводу-виводу записується в файл. Наведем приклади використання оператора CLOSE

CLOSE #1, #4, 6 -закриваються файли з логічними номерами 1,4 і 6; CLOSE -закриваються всі відкриті в програмі файли і пристрої.

Оператор PRINT має формат:

PRINT # <нф>, [USING X$;] <Список виводу>

і служить для розміщення в відкритий послідовний файл з логічним номером номером <нф> наступного логічного запису, який містить значення елементів "списка виводу". Параметр <нф> визначає логічний номер файлу, відкритого по оператору OPEN.

Параметр "Х$" визначає СВ, яке описує формат аналогічно оператору PRINT USING. Параметр "список виводу" містить АВ і /чи СВ, розділені крапкою з комою (;). Якщо числові елементи "списка" розділяються комою (,), то в полі значення елемента добавляється код "порожньо". Тому рекомендується в "списку виводу" оператора PRINT # використовувати в якості розділювача тільки крапку з комою.

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

10 Х$="Дата":У$="6.09.88":Х=46:У=41

20 OPEN "B:DATA" FOR OUTPUT AS #1

30 PRINT #1, X$; Y$; X; Y; Z$="#####"

40 PRINT #1, USING Z$; X*Y; X+Y

Більш зручним відносно PRINT # являється оператор WRITE #, який має формат:

WRITE # <нф>, [<Список виводу>]

і служить для поміщення наступного логічного запису, який визначається параметром "список виводу", в відкритий послідовний файл з номером <нф>. Параметр "список виводу" містить АВ і/чи СВ, розділені комами чи крапкою з комою. При відсутності параметра "список виводу" в файл поміщається порожній запис. Відмінність між PRINT # і WRITE # така ж , як і між операторами PRINT і WRITE. Наведемо приклад використання

оператора WRITE #:

10 X$="AaTaH:Y$-n6.09.88":X=46:Y=41

20 OPEN "B:DAT1" FOR OUTPUT AS #2

30 WRITE #2, X$; Y$; X*Y; Y+X

Приклад подібний попередньому прикладу, наведеному для оператора PRINT #.

Оператор WRITE # не рекомендується використовувати для формування файлів вихідних текстів програм, так як програмні рядки поміщаються в файл в лапках і пряме використання такого файла приводить до помилки з кодом ERR=60 (Багато файлів).

Оператор INPUT # має формат:

INPUT # <нф>, <Список елементів введення>

і служить для читання наступного логічного запису із відкритого послідовного файла (з каналу зв’язку чи з клавіатури) з номером <нф> і присвоєння його значень елементам "списка". В якості елементів "списка" можуть виступати числові і/чи символьні змінні і елементи масивів, розділені комою. Значення зчитуючих з файла чи пристрою даних повинні по типу співпадати з елементами "списку" оператора INPUT #. При цьому співпадання обмежується тільки рівнем числової чи символьної інформації, не можна змішувати тільки числові і символьні дані. В рамках ж числової інформації допустимі любі співпадання типів, які приводять, в загальному до зміни даних.

Оператор LINE INPUT # має формат:

LINE INPUT #<нф>,Х$

і служить для читання символьного рядка з відкритого послідовного файла з логічним номером <нф> і присвоєння його значень символьним змінним чи елементу масива Х$. Оператор читає послідовний файл до знака "Enter".

1 REM Вихідний модуль БЕЙСІК-програми,

2 REM, який зчитується в програму

3 REM по оператору LINE INPUT #

10 OPEN "B:PROG.BAS" FOR INPUT AS 3

20 LINE INPUT #3, X$:PRINT X$

30 IF EOF (3) THEN END ELSE 20 RUN

Слід відмітити, що перед використанням операторів INPUT # і LINE INPUT # слід відкрити файл, до якого вони звертаються, щоб почати читання його записів з самого початку. В протилежному випадку виникає особлива ситуація "кінець файла".

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

LOC - визначення положення поточного файла;

LOF - визначення розміру заданого файла;

EOF - індикація умови "кінець заданого файла"

INPUT $ - читання символів із заданого файла.

В конструкціях, які використовують оператори читання послідовних файлів, як правило, застосовується і системна функція EOF (<нф>), яка ідентифікує умову "кінець файла" з логічним номером <нф>. Дана функція має смисл тільки для відкритих послідовних файлів і приймає значення "1" при досягненні кінця файлу і значення "О" в протилежному випадку. В момент досягнення кінця файла функція EOF (<нф>)=1, а зчитаний з файла запис є останнім записом файлу.

Системна функція LОF(<нф>) по логічному номеру <нф> відкритого файла визначає довжину файла в байтах. Дана функція застосовується тільки для дискових та комунікаційних файлів. Для комунікаційних файлів значенням функції LOF буде число байтів обміну в буфері вводу-виводу каналу зв’язку. З допомогою даної функції можна відстежувати розмір файла на диску і вільне місце в буфері вводу-виводу комунікаційного файлу.

Системна функція INPUT $, яка має формат

INPUT $ <К[,[#]<нф>]),

може використовуватись тільки з послідовними файлами зв’язку і служить для читання наступних <К> символів з відкритого файла з логічним номером <нф>. В якості параметрів "К" і "нф" можуть використовуватись АВ з допустимими цілочисельними значеннями (<К> <256; <нф> <М+1, де значення М=3)

Наведем приклад на використання оператора читання INPUT #, LINE INPUT # і системної функції EOF:

1 ON ERROR GOTO 14:KILL"B:G947" 2А$="Контрольнийфайл";М=46:КІЬЬ"В:А492"

3 OPEN "B:A942" FOR OUTPUT AS #1

4 OPEN "B:G947" FOR OUTPUT AS #2

5 PRINT #2, А$+"номер 1":FOR K=l TO 3

6 WRITE #1, K*M+41:NEXT:CLOSE #1, #2

7 OPEN "B:A942" FOR APPEND AS 3

8 FOR K=l TO,2:PRINT #3, (M-5)*K+KA2:NEXT

9 CLOSE:OPEN "B:A942" FOR INPUT AS 2

10 OPEN "B:G947" FOR INPUT AS 1

11 LINE INPUT #1,B$:PRINTB$:CLOSE#1

12 WHILE 46:P=P+1:INPUT#2, R:PRINT "R";P;"=";R;

13 IF EOF (2)=-1 THEN END ELSE WEND

14 IF ERR-8 THEN RESUME NEXT ELSE RESUME NEXT

RUN

Контрольний приклад І

Rl=87 R2-133 R3-179 R4-42 R5-86

Представимо загальну схему роботи з файлами такого типу:

для роботи з послідовним файлом в будь-якому режимі (створення, до запис, або читання) необхідно його відкрити з допомогою оператора OPEN;

запис чи дозапис в послідовний файл нових логічних записів здійснюється операторами PRINT, PRINT USING чи WRITE; в загальному випадку дозволяється чергування цих операторів при роботі з одним і тим файлом;

читання записів з послідовного файла здійснюється операторами INPUT і LINE INPUT; за допомогою системної функції INPUT$ з файла можна читати задане число символів в кількості не більше 255;

для читання записів з послідовного файла, створеного чи обновленого в цій ж програмі, слід його попередньо закрити оператором CLOSE, а потім знову відкрити оператором OPEN для читання записів з початку файла за допомогою системних функцій EOF, LOC і LOF є можливість обробки ситуації "кінець файла" і отримання інформації про довжину файла і останній запис, з яким в ньому працювали. За допомогою оператора INPUTпрочитати відкритий файл зовнішнього пристрою і розмістити його в програмний модуль.

На закінчення обговорення послідовних файлів приведемо комплексний приклад, який показує засоби мови по роботі з файлами такого типу:

1 REM Комплексний приклад на послідовні файли

2 FOR K=l TO 255:C$=C$+"A":NEXT:ON ERROR GOTO 20

3 KILL "B:SVEGAL-':PRINT "Задати пароль?": X$=INPUT$(6)

4 KILL "B:A":KILL "B:S":KILL "B:STRUCTUR.AGN"

5 OPEN "B:PAROL" FOR INPUT AS#1:Y$=INPUT$(5,#1):CLOSE

6 IF VAL (X$)^VAL (Y$) GOTO 7 ELSE T=T+1:IF T<3 THEN 3 ELSE 21

7 INPUT "Число записів"; N:OPEN"B;SVEGAL" FOR OUTPUT AS 1

8 FOR K=l ТОК™ІОТ#1,С$:ЖХТ^тТ"Довжинафайлу=\ LOF(l);

9 PRINT "Число 128-байтних блоків=";ЬОС(1):СШ5Е #1

10 OPEN k-B:SVEGAL" FOR APPEND AS 2:FOR K=l TO 100

11 WRITE #2, STR1NG(255,86):NEXT:PRINT "LOC(2)="; LOC(2);

12 FOR K=l TO 10:PRINT #2, USING "####.##"; 19.42*KA2 NEXT

13 CLOSE 2:OPEN "B:SVEGAL" FOR INPUT AS #2

14 OPEN "B:A" FOR OUTPUT AS 3:FOR K=l TO INT (LOF(2)/(2*255))

15 INPUT #2, B$:WRITE #3, B$:NEXT:PRINT"LEN A=";LOF(3);

16 CLOSE #3:OPEN "B:S" FOR OUTPUT AS 3: WHILE 464121! P-P+1

17 LINE INPUT #2, Z$;IF P<INT (LOF(2)/(2*255)) THEN 19 ELSE

18 IF EOF (2) THEN PRINT "LEN S="; LOF(3):END ELSE WRITE #3, Z$

19 WEND:REM Закінчення створення нових файлів

20 RESUME NEXT:REM Обробка особливих ситуацій

PRINT "Неправильне завдання паролю - Kmeub":END

RUN

Задати пароль? .

Число записів? 20

Довжина файла=5140 Число 128-байтних блоків=40,'

LOC(2)=202 LEN А=8169 LEN S=15740

Оператори LSET і RSET служать для поміщення даних з вирівнюванням відповідно зліва і справа в буфер вводу-виводу файла довільного доступу. Числові функції СVD, CVS і CVI символьних аргументів служать для перетворення символьного значення відповідно в число подвійної, звичайної точності і ціле число. Символьні функції MKD$, MKS$ і МКІ$ служать для перетворення відповідно числа подвійної, звичайної точності і цілого числа в символьне значення.

Оператор FIELD має формат

FIELD [#] <нф>, <Р1> AS Xl$, …, <Pk> AS Xk$

і служить для виділення пам'яті під перемінні логічні записи в буфері вводу-виводу (БВ/В) файла даних довільного доступу (ФДДД визначеного номером <нф>.

Параметр <Pk> визначає розмір пам'яті в БВ/В для змінної «Xk$» (k=l÷M). В якості параметрів <Pk> і <нф> можуть бути числові змінні чи АВ, цілочисельні значення яких використовуються оператором FIELD, при цьому сумарна величина значень параметрів <Pk> не повинна перевищувати значення довжини логічного запису, визначеного в операторі OPEN для даного ФДДД. Оператор FIELD зв'язує змінні, які складають логічний запис, з БВ/В для цього файла, Після закриття ФДДД закриваються і зв'язані з ним всі БВ/В, тому кожне нове відкриття ФДДД слід зв'язувати з новими БВ/В, задаючи відповідні оператори FIELD.

Слід відмітити, що символьні змінні «Xk$» оператора FIELD не можна використовувати в операторах вводу чи присвоювати їм значення звичайних операторів присвоєння. В протилежному випадку буде порушено логічний зв'язок між цими змінними і буфером ФДДД

Для формування логічного запису можна вказувати декілька операторів FIELD, які в операції обміну з ФДДД беруть участь як єдине ціле. При цьому логічний запис формується шляхом накладання вмістимого БВ/В, яке визначене всіма операторами FIELD для даного ФДДД.

Наприклад, оператори FIELD з наведеного прикладу

10 KILL "B:RRR":OPEN "b:rrr" AS #2 LEN=58:T=2:D=10

20 X 1$=STRING $(10,"1"):Y1$=STRING $(30,"2")

30 Z 1$=STRING $(18,"3"):M1$=STRING $(1(V'4")

40 P 1$=STRING $(20,"5"):C1$=STRING $(18,"6")

50 D 1$=STRING $(15,"7"):GOSUB200:LSETX $-X1$

100 LSETY $=Y1$:LSETZ $=ZI$:LSETM $=M1$

110 LSETP $=P1$:LSETC $=CI$:LSETD $=D1$

120 PUT #2,1 :PRINT LOF (2):CLOSE:CLEAR

130 OPEN "B:RRR" AS #2:GOSUB 200:GET#2,1

140 PRINT X$, Y$:PRINT Z$, M$

145 PRINT PS, C$:PRINT D$:END

200 FIELD #T, DASX$,3*DAS Y$, 18 AS Z$

210 FIELD #T, DASM$,2*DASP$, 18ASCS

220 FIELD #T, 15 AS D$:RETURN

RUN

58

7777777777 7777755555555555556666666666 666666663333333333 7777777777 77777555555555555555 666666666666666666 77777777777777

визначають три БВ/В для логічного запису довжиною 58 байтів ФДДД з номером 2. Запис формується наступним чином: на значення поля X$+Y$+Z$ буфера І (рядок 200) накладається значення поля М$+Р$+С$ буфера 2 (рядок 210) і на результат такого накладання впливає значення поля DS буфера 3 (рядок 220). При цьому всі накладення здійснюються із значеннями буферів, які вирівняні по їх лівій границі. Результат такого накладання і складає вмістимо логічного запису, який вміщається в ФДДД RRR (оператор PUT#).

При зчитуванні логічного запису із ФДДД (оператор GET#) вище описана процедура використання БВ/В 1:3 повторюється в зворотному порядку: полям кожного БВ/В присвоюються послідовно значення логічного запису, починаючи з початку.

Слід відмітити, що обмін з ФДДД здійснюється тільки символьними даними, тому числові дані перед їх поміщенням в БВ/В слід перетворити в символьні засобами символьних функцій МКІ$, MKS$ і MKD$, а потім помістити в БВ/В з допомогою операторів LSET або RSET. Оператор FIELD, який формує БВ/В тільки визначає змінні для обміну по операторах PUT# і GET#, але сам не переміщає ніяких даних. Наприклад, по

фрагменту:

1 OPEN "В:ККЮ AS #2:LEN=4:FIELD #2,4 AS Y$

2 FOR K=l TO 200:LSET Y$=MKS$(K):PUT#2,K

3 NEXT: PRINT LOF(2);:CLOSE:OPEN'TT, #1, "B:KKK",4

4 FIELD #1,4 AS X$:GET #1,100:PRІNT CVS(X$)

RUN

800 100

відкривається ФДДД з іменем ККК і логічним номером 2. Розмір логічного запису файлу рівний 4 байта. Оператором FIELD відкритому файлу ККК приписується БВ/В для змінної Y$ і в циклі значення <К> змінної циклу функцією MKS перетворюється в рядок символів і вирівнюванням поміщається в БВ/В. Після цього оператори PUT# наступний запис із БВ/В поміщається в файл ККК. Закінчення циклу завершує формування ФДДД, на екран виводиться довжина файлу і він закривається. Потім файл ККК відкривається знову і з нього зчитується запис з номером 100, числове значення якого, одержане засобом функції CVS, виводиться на екран.

При використанні декількох операторів FIELD довжина запису в операторі OPEN для ФДДД повинна бути не менше розміру максимального із БВ/В, які відзначаються цими операторами FIELD.

Оператор PUT# має формат:

PUT[#] <нф> [,К]

і служить для поміщення логічного запису із БВ/В, визначених відповідними операторами FIELD, в ФДДД з номером <нф>. Параметр "К" визначає номер логічного запису. При відсутності параметру "К" необхідний номер наступного логічного запису. Наприклад:

1 OPEN "B:KKK" AS #2:LEN=4:FIELD #2,4 AS Y$

2 FOR K=l TO 200:LSET Y$=MKS$(K):PUT#2

3 NEXT: PRINT LOF(2);:CLOSE:OPEN"R", #1, "B:KKK",4

4 FIELD #1,4 AS X$:GET #1,200:PRINT CVS(X$)

RUN

800 200

В даному фрагменті ФДДД ККК формується в кількості 200 записів з використанням оператора PUT# без номера запису. На екран з метою контролю виводиться значення останнього запису файлу.

Оператор GET# має формат:

GET[#] <нф> [К]

і служить для читання в БВ/В, визначених відповідними операторами FIELD значень логічного запису з номером <К> із ФДДД з номером <нф>. Оператор читання GET# є оберненим для оператора запису PUT#. Зміст і значення параметру <LK> відповідає аналогічному параметру оператора PUT#. В загальному випадку, подібно оператору PUT#, оператор GET# не здійснює фізичного читання логічного запису із ФДДД

Розглянувши всі оператори та функції мови БЕЙС1К, призначені для забезпечення роботи із ФДДД приведемо основні етапи технології використання файлів даних такого типу.

1.1 для створення ФДДД необхідно його відкрити оператором OPEN, як файл довільного доступу із казанням довжини логічного запису;

1.2 засобом операторів FIELD розподілити пам'ять в БВ/В ФДДД для значень змінних, які складають його логічний запис;

1.3 числові значення логічного запису перетворити в символьні рядки засобами символьних функцій MKІ$, MKS$, MKD$;

1.4 операторами LSET і/або RSET помістити символьні значення логічного запису у відповідні поля БВ/В, визначені операторами FIELD для даного ФДДД (ця операція обов’язкова);

1.5 вивести значення логічного запису із БВ/В в ФДДД на дисковому томі засобом оператора PUT#;

1.6 оператором CLOSE або END закрити створений ФДДД;

2.7 для доступу до існуючого ФДДД його необхідно відкрити оператором OPEN із казанням довжини запису, якщо до цього він не був відкритий;

2.8 засобом операторів FIELD розподілити пам'ять в БВ/В ФДДД для значень змінних, які складають його логічний запис;

2.9 зчитати засобом оператора GET# із заданого ФДДД потрібний логічний запис в БВ/В, створені операторами E1ELD для даного файлу;

2.10 для перетворення символьних значень зчитаного із ФДДД в БВ/В логічного запису використати числові функції CVI, CVS, CVD;

2.11 після завершення роботи з ФДДД його слід закрити оператором CLOSE або END.