II.4.5. О п е р а т о р ы в в о д а д а н н ы х DATA и READ. О п е р а т о р RESTORE Б л о к о м д а н н ы х будем называть последовательность констант. С блоком данных связана некоторая величина,называемая у к а з а т е л е м с ч и т ы в а н и я . Она всегда "настроена" на конкретную константу бло- ка данных. При запуске программы на счет указатель "метит" позицию первой константы блока. Оператор DATA предназначен для хранения данных в блоке данных и для ввода его в программу. Структура оператора DATA: DATA β1[,β2][,β3]... где: DATA ("data"-"данные") - служебное слово; β1, β2, β3, ... - числовые константы или строковые константы в ка- вычках или без кавычек (но в этом случае не содержащие запятых, кавычек и двоеточий (,":)). Оператор DATA позволяет хранить "начальные" значения в теле программы и может находиться в любом ее месте. В режиме прямого выполнения команд оператор DATA игнорируется. О с н о в н о й х а р а к т е р и с т и к о й оператора DATA являет- ся его полное игнорирование и пропуск во время выполнения программы - он используется только тогда, когда в программе встречается оператор READ. Каждый оператор DATA считается частью общего "банка данных" программы. По- этому 10 разбросанных по всей программе операторов DATA,каждый из которых содержит одну константу, аналогичны одному оператору DATA,содержащему все константы из этих операторов. При чтении данные берутся из самого первого встретившегося в программе оператора DATA (в смысле номеров строк); все последующие операторы DATA выбираются по очереди. Для повторного считывания данных из блока данных следует использовать оператор RESTORE (см. данный раздел ниже). Апостроф "'" не считается признаком конца оператора DATA и началом ком- ментария: в операторе DATA такую роль играет двоеточие ":" и следующий за ним апостроф "'". Например: DATA 5,"кабан",3Е-4 :'Начальные значения! В операторе DATA допускается использование числовых констант любых ти- пов (но не выражений или имен переменных): в частности числовые константы могут содержать префиксы &H, &O, &B или могут быть записаны в экспоненци- альной форме, а также могут иметь указатель типа (!, %, #). Оператор DATA - это самый короткий способ инициализации переменных и массивов в программе. Он очень удобен при документировании программ. Оператор READ предназначен для организации выборки (чтения) данных из блока данных. Формат оператора READ: READ α1[,α2][,α3]... где: READ ("to read"-"читать") - служебное слово; α1, α2, α3, ... - имена переменных или имена элементов массива(ов). При выполнении оператора READ из блока данных последовательно считыва- ются константы β1, β2,... и их значения присваиваются соответствующим пе- ременным α1, α2,... в операторе READ. Считывание начинается с той констан- ты, на которую "настроен" указатель считывания.При этом сам указатель при каждом считывании смещается по блоку данных на одну позицию вправо. Этот процесс повторяется до исчерпания всех переменных в списке оператора READ или до исчерпания данных в списке оператора DATA. В последнем случае выво- дится сообщение об ошибке: "Out of DATA" ("Д а н н ы е и с ч е р п а н ы"). После считывания последней константы блока значение указателя не определе- но. Типы констант в операторе DATA и типы переменных в операторе READ долж- ны совпадать! В противном случае выводится сообщение об ошибке: "Syntax error" ("С и н т а к с и ч е с к а я о ш и б к а"). П р и м е р 1. Написать программу вычисления значения функции Y ───────────── a·b² Y=√────── (k-m)² при следующих значениях аргументов: a=5.3; b=14.7; k=1.44; m=0.508. NEW Ok 10 DATA 5.3,14.7,1.44,0.508 20 READ A,B,K,M 30 Y=SQR(A*B^2/(K-M)^2):PRINT"Y=";Y 40 END run Y= 36.311095958874 Ok В результате совместного выполнения операторов READ и DATA переменные A,B,K,M получат следующие значения: А=5.3; B=14.7; K=1.44; M=.508 (отметим, что порядок выборки констант из блока данных строго соответству- ет порядку следования имен переменных в операторе READ). После действия оператора READ соответствующие значения удаляются из блока данных. Очевидно, что подобная форма ввода данных более экономична, чем с помощью оператора присваивания и, вдобавок, она позволяет уменьшить затраты труда программиста при изменении входных данных. Действительно, при изменении значений переменных A, B, K, M достаточно переписать только одну программную строку с номером 10. П р и м е р 2. NEW ───────────── Ok 10 DATA "ДИСПЛЕЙ","DISKETTA":READ X$,Y$ 20 ?X$Y$'знак конкатенации можно опускать! run ДИСПЛЕЙDISKETTA Ok Ясно, что в результате выполнения оператора READ строковые переменные X$,Y$ получили значения: X$="ДИСПЛЕЙ" и Y$="DISKETTA". П р и м е р 3. NEW ───────────── Ok 100 DATA 34 110 READ A,B,C$,D$,E 120 DATA 234e-7,goldfish 130 DATA "testing,1..2..3!" 140 PRINT A,B,C$,D$,E 1000 DATA 22 run 34 2.34E-05 goldfish testing,1..2..3! 22 Ok Общий вид оператора RESTORE: RESTORE [n] где: RESTORE ("to restore"-"восстанавливать") - служебное слово; n - номер программной строки, n∈[0,65529]. Этот оператор изменяет состояние указателя считывания. Напомним, что оператор READ перемещает указатель "вниз" по мере ввода данных,пока не бу- дет исчерпано "содержимое" всех операторов DATA. Оператор RESTORE без указания параметра n возвращает указатель в нача- ло блока данных,после чего все данные могут быть снова прочитаны операто- ром READ. Кроме того, в операторе RESTORE может быть задан параметр n,в этом слу- чае указатель считывания указывает на первую константу в операторе DATA в строке с номером n . Оператор RESTORE может быть использован неоднократно и в любом месте Вашей программы. П р и м е р ы: ───────────── 1) NEW 2) NEW Ok Ok 10 DATA 10,11 10 INPUT "Номер месяца (1-12)";N 20 DATA YAMAHA,12,13:DATA "MSX",14 20 IF N<1 OR N>12 THEN 10 40 READ X,Y,Z$ 30 RESTORE 100 50 PRINT X;Y;Z$:RESTORE 20 40 FOR I=1 TO N 70 READ L$,A,B,M$:PRINT L$;A;B;M$ 50 READ M$ run 60 NEXT ·10··11·YAMAHA 70 PRINT M$ YAMAHA·12··13·MSX 80 GOTO 10 Ok 100 DATA Январь,Февраль,Март,Ап рель,Май,Июнь,Июль,Август,Сентя брь,Октябрь,Ноябрь,Декабрь