.
Контент, который может быть интересен каждому. Без ограничений по темам, форматам и стилям подачи.
Массив есть упорядоченный набор переменных одинакового типа. Каждая отдельная величина называется компонентой массива. Тип компонент может быть любым, принятым в языке Паскаль, кроме файлового типа. Тип компонент называется базовым типом. Каждая компонента может быть явно обозначена с помощью имени переменной-массива, за которым в квадратных скобках следует индекс. Их тип называется типом индекса. Время, требуемое для доступа любой компоненты, не зависит от значения индекса. Поэтому о массивах можно говорить как об объектах, структура которых допускает случайный (или прямой) доступ.
Переменная массивового типа описывается в разделе описания переменных в следующей форме:
Чаще всего в качестве типа индекса употребляется интервальный тип. Например, одномерный массив среднемесячных температур опишется так:
Описание массива определяет, во-первых, размещение массива в памяти, во-вторых, правила его дальнейшего употребления в программе. Последовательные элементы массива располагаются в последовательных ячейках памяти (T[1], T[2] и т.д.), причем значения индекса не должны выходить из диапазона 1. 12. В качестве индекса может употребляться любое выражение соответствующего типа. Например:
Тип индекса может быть любым скалярным порядковым типом, кроме integer (в реализации Turbo Pascal). Например, в программе могут присутствовать следующие описания:
В такой программе допустимы следующие обозначения элементов массивов:
В некоторых случаях бывает удобно в качестве индекса использовать перечисляемый тип. Например, данные о количестве учеников в четырех десятых классах одной школы могут храниться в следующем массиве:
И если, например, элемент Class_10[A] равен 35, то это означает, что в 10 «А» классе 35 человек. Такое индексирование улучшает наглядность программы.
Часто структурированному типу присваивается имя в разделе типов, которое затем используется в разделе описания переменных.
Многомерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов). Например, среднемесячную температуру за 10 лет можно можно хранить в массиве, описанном следующим образом:
Вот примеры обозначения некоторых элементов этого массива:
Однако чаще употребляется другая, эквивалентная форма обозначения элементов двумерного массива:
Переменная Н[1981] обозначает всю первую строку таблицы, т.е. весь массив температур за 1981 г. Другим вариантом, эквивалентным приведенному выше описанию, является следующий:
Наиболее краткий вариант описания данного массива такой:
Трехмерный массив можно определить как одномерный массив, у которого элементами являются двумерные массивы. Вот пример описания трехмерного массива:
Это массив, состоящий из 10x20x30 = 6000 целых чисел и занимающий в памяти 6000x2 = 12000 байт. В Паскале нет ограничения сверху на размерность массива. Однако в каждой конкретной реализации Паскаля ограничивается объем памяти, выделяемый под массивы.
По аналогии с математикой одномерные числовые массивы часто называют векторами, а двумерные — матрицами. Размер массивов не может быть изменен в процессе выполнения. Изменение размеров массива происходит через изменение в тексте программы и повторную компиляцию. Для упрощения таких изменений удобно определять индексные параметры в разделе констант:
Теперь для изменения размеров массива Mas и всех операторов программы, связанных с этими размерами, достаточно отредактировать только одну строку в программе — раздел констант.
Действия над массивом как единым целым. Такие действия допустимы лишь в двух случаях:
В обоих случаях массивы должны иметь одинаковые типы (тип индексов и тип элементов). Пример:
При выполнении операции присваивания P := Q все элементы массива P станут равны соответствующим элементам массива Q.
В многомерных массивах переменная с индексом может обозначать целый массив. Например, если в таблице H требуется, чтобы данные за 1989 г. были такими же, как за 1981 г. (девятой строке присвоить значение первой строки), то это можно делать так:
А если нужно поменять местами значения этих строк, то это делается через третью переменную того же типа:
где P описана так:
Обработка массивов в программах производится покомпонентно. Вот примеры ввода значений в массивы:
Здесь каждое следующее значение будет вводиться с новой строки. Для построчного ввода используется оператор read. Аналогично в цикле по индексной переменной организуется вывод значений массива. Например:
Следующий фрагмент программы организует построчный вывод матрицы на экран:
После печати очередной строки матрицы оператор writeln без параметров переведет курсор в начало новой строки. Следует заметить, что в последнем примере матрица на экране будет получена в естественной форме прямоугольной таблицы, если JMax не превышает 12.
Во FreePascal, Delphi добавлена интересная возможность описания массивов без указания размерностей и, соответственно, пределов изменения индексов:
Такие массивы являются динамическими и изначально имеют нулевую длину. Установка размера массива и определение его во время выполнения программы производится так же как и для строк, с помощью функций SetLength и Length, соответственно. Элементы в данном случае нумеруются от нуля.
Переменные-динамические массивы являются указателями и операции с ними производятся как с указателями. Например, при присвоении одного массива другому элементы одного массива не копируются во второй, а копируется адрес массива. Соответственно, сравнение двух массивов в логических выражениях типа «равно — не равно» производится сравнением адресов. Пример присвоения одного массива другому:
Отметим существенное отличие в работе со строками и динамическими массивами, имеющими одинаковое внутреннее представление на основе указателей, но разные методы работы. Две разные строки, состоящие из одинакового набора символов, считаются равными, а два разных массива, содержащие одинаковые элементы, не равны.
Платформа предназначена для свободного распространения информации, собранной из доступных сетевых источников. Мы стремимся дать пользователю выбор и разнообразие, не навязывая тематику и формат.
Дайджесты по темам, вызывающим интерес у широкой аудитории.
Справочная информация по бытовым, культурным, технологическим вопросам.
Подборки контента, отобранного по тематике и релевантности.
Хронологическая лента публикаций без ограничений доступа.
📍 г. Челябинск, ул. Рубежная, д. 5, офис 122
☎ +7 (351) 800-54-91
📧 info@site.ru
🕓 Время приёма: ежедневно с 09:00 до 21:00
Сайт использует контент, размещённый в открытом доступе. Мы не проверяем его происхождение вручную и не редактируем содержимое. Материалы обрабатываются в автоматическом режиме.
Если вы считаете, что ваши права нарушены, пожалуйста, сообщите нам — информация будет проверена и при необходимости удалена.
Ресурс не является СМИ и не осуществляет журналистскую деятельность.