-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbas02-03.txt
148 lines (136 loc) · 11.2 KB
/
bas02-03.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
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 Январь,Февраль,Март,Ап
рель,Май,Июнь,Июль,Август,Сентя
брь,Октябрь,Ноябрь,Декабрь