Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

I : integer;

k : array [n .. m] of integer;

begin

for i:= n to m do read (k[i]);

for i:= n to m do write (k[i] * pi)

end.

Использование раздела констант позволяет сгруппировать в начале программы величины, характерные для конкретного примера. Здесь их легче изменить. Например, если программу pri нужно выполнить для массива, состоящего из сорока элементов, то достаточно изменить лишь раздел констант. В случае когда константы записаны в программе явно, изменения приходится вносить в различные части программы, при этом некоторые части, требующие изменения, могут остаться не замеченными. Особенно часто это бывает, если программа достаточно велика. Использование констант не только облегчает процесс изменения программы, но и делает его более надежным.

Массивовый тип является типом, определяемым пользователем, его можно определить в разделе описания типов:

type

аr = array [n .. m] of integer.

Тогда в разделе переменных необходимо указать

k: аr.

Синтаксис описания типа массива:

<имя типа> = array [<сп. инд. типов>] of < тип>

Здесь <имя типа> - правильный идентификатор; array, of - зарезервированные слова (массив, из); <сп. инд. типов> - список из одного или нескольких индексных (порядковых) типов, разделенных запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса; < тип> - любой тип Турбо Паскаля.

В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы, кроме longint.

Так как тип <тип>, идущий за словом of, - любой тип Турбо, Паскаля, то он может быть и другим массивом, например:

type

mat = array [0 .. 5] of array [-2 .. 2] of real,

или более компактно:

type

mat = array [0 .. 5, -2 .. 2] of real.

Еще пример описания:

type

color = (red, green, blue);

truthtable = array [boolean] of boolean;

height = 0..200;

var

square : array [color] of height;

matrix : array [2..8] of array [2..8] of integer;

table : truthtable;

Тип truthtable связан с набором массивов с индексами и элементами типа boolean. Переменная square является массивом с индексами типа color и элементами типа heigth. Переменная matrix является массивом с индексами в диапазоне 2 .. 8 и элементами, являющимися, в свою очередь, массивами с индексами 2 .. 8 и элементами целого типа. Переменная table является массивом типа truthtable, то есть с индексами и элементами типа boolean.

Значения индексных выражений должны находиться в диапазоне, установленном типом индексов в описании массива.

Глубина вложенности структурированных типов вообще, а следовательно, и массивов - произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничено, однако суммарная длина внутреннего представления любого массива не может быть больше 65520 байт.

Рисунок 5.4 - Синтаксическая диаграмма для массивового типа

В целях совместимости со стандартным Паскалем в Турбо Паскале разрешаемся перед описанием структурированного типа ставить зарезервированное» слово packed, предписывающее компилятору, по возможности, экономить память, отводимую под объекты структурированного типа; но компилятор фактически игнорирует это указание: "упаковка" данных в Турбо Паскале осуществляется автоматически везде, где это возможно.

В приведенном выше примере через mat [i][j] обозначается j-я компонента i-й компоненты массива mat. Обычно для многомерных массивов удобнее пользоваться такой сокращенной формой как mat [i,j]. Массив mat можно рассматривать как матрицу и говорить, что mat [i,j] относится к компоненте, находящейся в j-ом столбце i-й строки этой матрицы. Дело не ограничивается двумерными массивами. Если задано n типов индексов, то массив называется n-мерным, а его компоненты обозначаются с помощью n индексных выражений.

Если есть переменные - массивы А и В одного типа, то присваивание:

А := В

возможно, если массивы допускают покомпонентное присваивание

А [ i ] := В [ i ]

(для всех i, относящихся к типу индекса), и представляет собою сокращенную запись такого покомпонентного присваивания.

Однако над массивами не определены операции отношения. Нельзя, например, записать

if a = b then ...

Сравнить два массива можно поэлементно, например:

for i := 1 to 5 do

if a[i] <> b[i] then ...

При работе с массивами часто используется поэлементная обработка массива в рамках цикла for ... to ... do. Так, с помощью фрагмента программы

for i := 2 to 7 do index[i] := 0;

всем элементам массива index присваивается значений 0.

В качестве начального значения типизированной константы-массива используется список констант, отделенных друг от друга запятыми; список заключается в круглые скобки, например:

type

colors = (white, red, black);

const

colst : array [colors] of string[5] = ('white', 'red', 'black');

vector : array [1..5] of byte = (0, 0, 0, 0, 0);

При объявлении многомерных констант-массивов множество констант, соответствующих каждому измерению, заключается в дополнительные круглые скобки и отделяется от соседнего множества запятыми. Зададим двумерный массив из трех строк и пяти столбцов с монотонно увеличивающимися целыми числами:

сonst

matr : array [1..3, 1..5] of byte = ((0, 1, 2, 3, 4),

(5, 6, 7, 8, 9),

(10,11,12,13,14))