Предыдущая версия справа и слева
Предыдущая версия
Следующая версия
|
Предыдущая версия
|
bb:redbook:108 [2017/08/30 15:20] prospero78 [4. Заключение] |
— (текущий) |
===== 1.8 Знакомство с массивами ===== | |
| |
==== 1. Общие сведения о массивах ==== | |
//Массивом// называется выделенный блок однотипных переменных, например 1000 переменных типа ''INTEGER'' или 1000000 типа ''CHAR''. Или даже ещё больше. Поскольку разные типы переменных занимают разное число байтов в памяти, массивы из одного количества элементов (например 1000) могут занимать разное количество байт (например ''SHORTCHAR'' займёт 1000 байт, а ''LONGINT'' --- 8000). Необходимость в массивах возникает довольно часто, особенно при обработке больших массивов данных. Например, **Большой адронный коллайдер** (БАК) в **Швейцарии** (родине **Никлауса Вирта**) создаёт такие огромные массивы данных, что после каждого запуска **БАК** //все// ведущие университеты мира и исследовательские организации по полгода обрабатывают накопленные данные. | |
| |
| |
==== 2. Объявление массива ==== | |
Массив, по сути это такая же переменная, как и например, ''BOOLEAN''. Поэтому объявление массивов не выбивается из общих правил: | |
<code oberon2> | |
VAR | |
мцАцп: ARRAY 1000 OF INTEGER; | |
</code> | |
| |
Как видно из приведённого текста массив объявляется ключевым словом ''ARRAY'', после чего через пробел указывается его размерность. После определения размерности следует ключевое слово ''OF'' с указанием типа элементов ''INTEGER''. Точно также, как и в случае с обыкновенными переменными окончание объявление массива ограничивается точкой с запятой. | |
| |
Ничто не мешает объявить два или больше массивов сразу, через одно объявление типа: | |
<code oberon2> | |
VAR | |
мцАцп1, мцАцп2, мцАцп3, мцАцп4: ARRAY 1000 OF INTEGER; | |
</code> | |
| |
Всё это допустимые формы объявления переменных (массив особый случай переменной, но по большому счёту — это переменная). | |
| |
| |
==== 3. Объявление многомерного массива ==== | |
''Многомерным массивом'' называется такой массив, в котором расположение элементов не только по одной линии (друг за другом), но и в более высоких размерностях. Например, массив с двумя измерениями можно уподобить фигуре на плоскости. При этом при размерности 1000×1000 он будет в общей сложности иметь 1 млн. элементов (1000<sup>2</sup>). Такой массив называется прямоугольным или квадратным по аналогии с планиметрией. Массив с тремя измерениями будет иметь размер 1000×1000×1000 --- 1 млрд. элементов (1000<sup>3</sup>). А это уже даже для современных компьютеров довольно много. Такой массив называется //объёмным// или //кубическим// по аналогией со стереометрией. Можно создать массив с еще более высокими размерностями и адекватно представить даже в воображении такой массив трудно, если не невозможно. Но тем не менее, аналогии можно провести с реальностью. Например структура <<Города-улицы-дома-квартиры>>. Ниже пример объявления многомерных массивов: | |
<code oberon2> | |
VAR | |
мцКвадрат1, мцКвадрат2: ARRAY 1000, 1000 OF INTEGER; | |
мвКуб3, мвКуб4: ARRAY 1000, 1000, 1000 OF REAL; | |
</code> | |
| |
В первом случае объявлены два массива типа ''INTEGER'' с двумя измерениями. Во-втором случае объявлены два массива с тремя измерениями типа ''REAL''. | |
| |
Количество измерений массивов и их размер не может быть бесконечным по нескольким причинам: | |
| |
- Размер памяти компьютера ограничен | |
- Если массив даже будет с небольшими несколькими размерностями — их может оказаться достаточно, что бы памяти компьютера не хватило | |
- Если компьютер с 32-х битной архитектурой, то обратиться к ячейке памяти с адресом свыше 2<sup>32</sup> (примерно 4,2 млрд.) компьютер не сможет, хотя размерностей может быть будет всего 4-5-6 (более того, реально доступно только половина из этой памяти для одного процесса, из-за особенностей адресации процессора) | |
| |
Частично, подобные проблемы можно решить через внешнюю память (например, жесткий диск или сетевое хранилище), но это требует дополнительных усилий, и скорость обработки таких массивов будет в сотни-тысячи раз меньше. | |
| |
| |
==== 4. Заключение ==== | |
Как работать с массивами рассмотрим в следующих главах. Но уже сейчас полезно знать, что программист не оставлен "1 на 1" с огромными данными, не нужно руками описывать сотни тысяч переменных, чтобы хранить большие объёмы данных. Кроме того, массивы, по сути --- те же переменные, и всё что справедливо для переменных --- справедливо и для массивов с дополнением буквально нескольких особенностей. | |
| |