-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbas01-02.txt
216 lines (198 loc) · 20.8 KB
/
bas01-02.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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
I.5. МАССИВЫ ПЕРЕМЕННЫХ . ОПЕРАТОР ERASE
Фома идет в реку. Фома не труслив,
Хоть там аллигаторов целый м а с с и в.
Почти по С.Михалкову
Для возможности о д н о т и п н о й обработки большой совокупности
данных в программировании введено понятие м а с с и в а.
М а с с и в - это конечное множество значений (числовых или строковых),
обозначенных одним именем (и м е н е м м а с с и в а), причем каждый эле-
мент этого множества идентифицируется с помощью одного или нескольких чис-
ловых индексов.
Правила образования имени массива то же, что и для имени простой пере-
менной.
И н д е к с ы - это своего рода числовые координаты, указывающие место-
нахождение конкретного элемента как в массиве данных, так и в массиве яче-
ек памяти, отведенных для хранения этих данных.
Массив характеризуется р а з м е р н о с т ь ю,то есть количеством ин-
дексов, необходимых для поиска элемента в массиве, а также г р а н и ц а-
м и и з м е р е н и я , то есть границами изменения каждого индекса.
Массив описывается (объявляется) с помощью о п и с а т е л я размерно-
сти. Описатель записывается следующим образом: сразу после имени массива
в круглых или квадратных скобках указывается верхняя граница изменения ин-
декса. Если индексов несколько, то верхние границы изменения каждого ин-
декса разделяются запятой. Нижние границы индексов всегда равны н у л ю.
При обращении к элементу массива указывается и м я э л е м е н т а
м а с с и в а (имя индексируемой переменной). Имя элемента массива состо-
ит из имени массива и следующего(их) за ним в круглых или квадратных скоб-
ках индекса(ов) (если индексов два, то они разделяются запятoй).
В качестве индекса может использоваться в ы р а ж е н и е (разумеется
не строковое!), частными случаями которого являются к о н с т а н т а или
и м я п е р е м е н н о й (понятие в ы р а ж е н и я см. в разделе I.8).
Старайтесь в качестве индексов использовать ц е л о ч и с л е н н ы е
выражения (выражения,которые могут принимать только целочисленные значе-
ния), так как в противном случае компьютер автоматически преобразует ве-
щественные константы, представляющие значения индексов, в целые константы,
на что расходуется машинное время.
Например, целесообразно писать A(K%), а не A(К).
П р и м е р ы:
─────────────
1) C%(100)
имя массива - C
тип элементов массива - целочисленный
размерность - одномерный
количество элементов - 100 + 1 = 101
имена элементов массива - C%(0),C%(1),...,C%(100;
2) A(5,10)
имя массива - А
тип элементов массива - двойная точность
размерность - двумерный
количество элементов - (5+1)*(10+1) = 66
имена элементов массива - А(0,0), А(0,1),..., А(0,10),
А(1,0), А(1,1),..., А(1,10),
··· ··· ··· ···
А(5,0), А(5,1),..., А(5,10);
3) Е$[20]
имя массива - Е
тип элементов массива - строковый
размерность - одномерный
количество элементов - 20 + 1 = 21
имена элементов массива - Е$[0],Е$[1],...,Е$[20] .
Максимальная размерность вещественного массива - 11, целого или строко-
вого - 13, максимальное число элементов массива определяется размером опе-
ративной памяти компьютера и типом массива.
Перед использованием в Вашей программе массивов необходимо выделить
для них место в памяти ("зарезервировать место"). Это осуществляется при
помощи специального оператора о б ъ я в л е н и я (описания) м а с с и-
в о в.
Его структура: DIM α, δ, β,... ,
где DIM ("DIMension"- "размерность") - служебное слово;
α, δ, β,...- список описателей размерности встречаемых в программе
массивов; описатели отделяются друг от друга запятой.
Например, DIM C%(100),A(5,10),E$(20) ,
здесь C%(100),A(5,10),E$(20) - описатели размерности массивов.
Запомните: в любом месте программы,где имя массива встречается в п е р-
в ы й раз (конечно, не в операторе DIM), используется н е я в н ы й опе-
ратор DIM с верхней границей индекса(ов), равной 10. Таким образом, напри-
мер, одномерный массив, содержащий м е н е е 11 элементов, можно не опи-
сывать оператором DIM !
Оператор DIM может находиться в любом месте программы, но обязательно
п е р е д работой с массивом, к которому он относится.
При выполнении оператора DIM всем элементам объявляемых числовых масси-
вов присваивается значение 0 ("нуль"), а всем элементам объявляемых стро-
ковых массивов присваивается значение
"" ("нуль-строка" или "пустая" строка).
Если для размещения всех массивов программы объем памяти оказывается
недостаточным, на экран дисплея выдается сообщение
"Out of memory"
("Н е х в а т а e т п а м я т и")
или "Out of string memory"
("Н е х в а т а е т с т р о к о в о й п а м я т и")
для случая массива символьных строк,и оператор DIM резервирует место толь-
ко для первых перечисленных в нем массивов, которые полностью уместились
в памяти.
Кроме очевидного использования для создания массивов требуемого типа и
размера, имеет смысл применять оператор DIM для объявления всех перемен-
ных. Например, DIM MIN%,AB1#,X,C[15,4],X(6),AB1#(4,8).
Обратите внимание на то, что, хотя простая переменная X и массив X(6)
имеют одинаковые имена, для компьютера же - это разные объекты!
Если в программе уже описаны массивы, содержащие большое количество
элементов, то для создания новой простой переменной потребуется несколько
секунд машинного времени (оно уходит на поиск места для новой переменной
в оперативной памяти), определение же всех простых переменных оператором
DIM в начале программы позволяет сэкономить это время (см. пример 8 в раз-
деле 7.5).
Приведем очень важную таблицу, указывающую количество байтов, занима-
емых элементом массива, в зависимости от типа массива.
┌────────────────┬───────────────────────────────┬──────────────────────┐
│ Тип массива │Количество байтов на один элем.│ Количество элементов │
├────────────────┼───────────────────────────────┤──────────────────────│
│ Целый │ 2 │MSX1:14343; MSX2:14323│
├────────────────┼───────────────────────────────┤──────────────────────│
│ Одинарной точн.│ 4 │MSX1: 7171; MSX2: 7161│
├────────────────┼───────────────────────────────┤──────────────────────│
│ Двойной точн. │ 8 │MSX1: 3585; MSX2: 3580│
├────────────────┼───────────────────────────────┤──────────────────────│
│ Строковый │Длина области,занятой строкой+3│MSX1: 9562; MSX2: 9548│
└────────────────┴───────────────────────────────┴──────────────────────┘
Определив размерность некоторого массива посредством оператора DIM, ее
уже нельзя изменить с помощью некоторого другого оператора DIM. Для этого
необходимо сначала удалить соответствующий массив из оперативной памяти
компьютера с использованием "стирающего" оператора ERASE .
Оператор состоит из служебного слова ERASE ("to erase"-"вычеркивать")
и следующего за ним списка имен уничтожаемых массивов. Имена массивов в
этом списке перечисляются через запятую,причем скобки и максимальное зна-
чение индексов массивов не указываются.
Например, если массив А в программе описан как DIM A(30), то оператор
ERASE A
"уничтожает" одномерный массив А(30); после этого мы можем оператором
DIM A(4,10)
определить двумерный массив А(4,10) с тем же именем!
Заметим,что если попытаться объявить заново с помощью оператора DIM
массив без предварительного использования оператора ERASE, то выдается со-
общение об ошибке "Redimensioned array"
("П е р е о п р е д е л е н и е м а с с и в а").
Следующий раздел при первом прочтении можно пропустить!
Однако о б я з а т е л ь н о в е р н и т е с ь к нему позднее!
I.6. ИМЕНА, ЗНАЧЕНИЯ И ТИПЫ
Часто оказывается труднее хранить
богатства, чем добывать их.
Демосфен
Ясно, что цель программы состоит в вычислении з н а ч е н и й . В свою
очередь компьютер оперирует не со значениями,а скорее с п р е д с т а в-
л е н и я м и значений,которые являются конфигурациями байтов памяти ЭВМ.
Так как физические представления зависят от изображаемых объектов, то для
того, чтобы оперировать со значениями, необходимо специфицировать их т и-
п ы.Это кажущееся ограничение может оказаться на деле выгодным,потому что
оно заставляет программиста точно определить все используемые им объекты
и лучше контролировать свою программу.
Итак, к а ж д ы й программный объект имеет т и п и з н а ч е н и е.
Разумеется, он должен иметь также и и м я в программе, чтобы мы могли
отличить его от других объектов с аналогичными типом и значением.
1. К о н с т а н т а
имеет фиксированное имя,фиксированный тип и фиксированное значение.
───────────── ───────────── ─────────────
Например, обозначение
134
есть и м я константы типа "целое" и фиксированного з н а ч е н и я 134
(сто тридцать четыре).
Для констант тип и значение выводятся непосредственно из и м е н и.
Язык MSX-BASIC, как и многие другие языки программирования позволяют про-
граммисту выбрать другое имя для обозначения константы. Например, програм-
мист может связать с константой 3.14159 имя PI при помощи оператора
PI = 3.14159 .
В таких случаях говорят, что PI есть с и м в о л и ч е с к а я к о н с-
т а н т а (т.е. такая, которая обозначается некоторым символом вместо при-
нятого для константы обозначения объявлением ее значения).
Использование символических констант - хороший прием программирования:
он исключает ситуации, при которых значения, являющиеся по существу пара-
метрами выполняемой программы, используют в явной форме многократно в раз-
ных местах программы. Такие ситуации осложняют модификацию и расширение
программ. Значение символической константы появляется только в одном мес-
те программы, в о б ъ я в л е н и и с и м в о л и ч е с к о й констан-
ты, которое позволяет связать значение константы с выбранным именем; если
появляется необходимость перейти к другому значению,модифицируется только
это объявление.(В некоторых языках программирования строго применяется
этот принцип, з а п р е щ а я использование констант, имеющих отличную от
символической форму!).
2. П е р е м е н н а я
имеет фиксированное имя, фиксированный тип и переменное значение.
───────────── ───────────── ──────────
Имя переменной называется и д е н т и ф и к а т о р о м. Тип переменной
связывается с ее именем при помощи о б ъ я в л е н и я т и п а, которое
может быть неявным.
В заключение определим п е р е м е н н у ю в информатике как совокуп-
ность трех элементов:
идентификатора, типа и значения ,
────────────── ──── ────────
где только третий элемент является переменным (однако, в некоторых языках
программирования (например, Рапира) тип является переменным!).
Заметим, что понятие переменной в информатике о т л и ч а е т с я от
понятия переменной в математике!
3. М а с с и в
имеет фиксированное имя, фиксированный тип и конечное множество значений.
───────────── ───────────── ──────────────────
О б ъ я в л е н и е м а с с и в а уточняет его тип (который может за-
даваться неявно), число его измерений и границы каждого измерения.
Отметим,что любое объявление массива определяет две категории имен:имя
массива в целом и имена для обозначения каждого элемента массива(имена ин-
дексируемых переменных).