Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Алгоритмизация и программирование.doc
Скачиваний:
57
Добавлен:
11.03.2015
Размер:
796.67 Кб
Скачать

19.1. Одномерные массивы

Если указан только один тип индекса, массив является одномерным.

Примеры описаний одномерных массивов:

constMAXLEN=100;{константа удобна для изменения размера массива}

type t_vect =array[1.. MAXLEN] of integer;

var a :t_vect; {для хранения целочисленных последовательностей}

b : t_vect;

c, d : array[1.. MAXLEN] of integer;

point : array[(x, y, z)] of real; {для хранения координат точки или

вектора}

flag : array[‘A’..‘Z’] of boolen;

Массивы a,b,c,dимеют одинаковые размеры (=100). Размер массиваpointравен 3,flag26.

Компоненты (элементы) массива занимают последовательные ячейки памяти. Объем памяти, выделяемой массиву, равен произведению размера массива на объем, занимаемый элементом. Переменная азанимает 100*2=200 байтов,point3*6=18 байтов,flag26*1=26 байтов.

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

Согласно приведенным выше описаниям, типы переменных aиbтождественны, так как переменные описаны с использованием имени типаt_vect. Переменныесиdтоже имеют тождественные типы, так как описаны в одной секции.

Над массивами любой размерностикак над едиными целыми не определены никакие операции. Разрешено присваивание переменной типа массив значения переменной тождественного типа, то естьдля совместимости массивов по присваиванию требуется тождественность типов.

Если массивы aиdинициализированы, то допустимы операторыb:=aиc:=d.

Имя массива является общим именем совокупности компонентов (элементов) массива. Обращение к отдельным компонентам массива осуществляется с помощью переменных с индексами:

Выражение в квадратных скобках должно иметь тип индекса. Например, a[1], d[MAXLEN div 2], point[x], point[y], flag[‘X’], flag[succ(‘G’)].

Переменные с индексами можно использовать в любом месте программы, где допустим базовый тип. Ввод и вывод массива производится покомпонентно, обычно в цикле for.

Пример. Составим программу для определения максимального члена данной целочисленной последовательности, длиной не больше 100, и номера этого элемента:

Program max_elem;

const MAXLEN=100;

var v : array [1.. MAXLEN] of integer;

max:integer; {для максимального значения}

n: 1..MAXLEN; {n- длина последовательности}

imax,i: 1..MAXLEN; {imax- для номера максимального члена}

Begin

write('Введите длину последовательности ',MAXLEN);

read (n);

write('Введите члены последовательности ');

for i:=1 to n do read(v[i]);

{Поиск максимального элемента}

max:=v[1];imax:= 1; {инициализация переменных}

for i:=2 to n do

if v[i] > max then

begin{запоминаем большее значение}

max:=v[i];

imax:=i

end;

writeln(‘ Максим. член последовательности - v[’,imax, ‘] = ’,max)

End.

19.2. Упакованные массивы

Если в одном машинном слове можно разместить несколько элементов массива, то для экономии памяти можно использовать упакованный массив. Для этого при описании массива перед ключевым словом arrayследует указать ключевое словоpacked.

Например, при описании

var a : packed array [1..10] of 0..7;

в двухбайтовом машинном слове размещается 5 элементов, для массива потребуется 2 слова, то есть 4 байта.

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