Одномерные и двумерные массивы Раздел описания типов В разделе описания типов пользователь может определять свои типы данных, присваивая каждому из них определенный идентификатор. Синтаксис данного раздела описан на рис. Рис. 1.
Рис. 1. Синтаксическая диаграмма для раздела описания типов
Пример 11.1. Используя раздел описания типов можно переопределить имена существующих типов данных.
Type int=integer; {к целому типу теперь можно будет обращаться}
float=real; {через идентификатор int, к вещественному – }
Symbol=char; {через float, к символьному – через symbol}
Var x:int;
Rez:float;
Ch:symbol;
Чаще всего раздел type используют для определения идентификаторов структурированных типов данных. Хотя введение идентификатора типа не является обязательным, это позволяет улучшить читабельность программы и уменьшает вероятность внесения ошибок при наборе, а в некоторых случаях бывает просто необходимым. Описание массива x, содержащего 40 элементов целого типа возможно в разделе описания переменных:
Var x:array[1..40] of integer;
Однако, программа будет более понятной, если использовать разделы описания констант и типов:
Const NMax = 40;
Type TArray = array[1..NMax] of integer;
Var x:TArray;
Определение пользовательского типа TArray, позволит использовать его для определения новых массивов, структура которых аналогична структуре массива x. Введение константы NMax позволит уменьшить вероятность внесения ошибок в программу при ее изменении и доработке, т.к. отпадет необходимость всегда помнить, что в массиве именно 40 элементов, а не какое-то другое количество.
Пример 11.2
Не используем описания типов.
Var x:array[1..4] of byte;
z:string[10];
y:array[1..4] of Byte;
a:array[1..10] of string[10];
Присваивание x:=y при таком описании будет недопустимо.
| Используем раздел type.
Type TArray = array[1..4] of byte;
TName = string[10];
Var x:TArray;
z:TName;
y:TArray;
a:array[1..10] of TName;
Присваивание x:=y будет допустимо.
| Описание одномерных массивов Массив – регулярный тип данных; совокупность пронумерованных однотипных элементов, имеющих общее имя.
Название регулярный тип массивы получили за то, что в них объединены однотипные (логически однородные) элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве.
Например, введем 30 целых чисел в диапазоне от 21 до 50 и объединим их общим именем А.
Получается таблица, состоящая из одной строки данных. Такие таблицы называются линейными.
Таблица 1. Пример линейной таблицы
№
| 1
| 2
| 3
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29
| 30
| А
| 21
| 22
| 23
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 49
| 50
| Для хранения подобных таблиц используют одномерные массивы (векторы). Количество элементов в массиве всегда конечно.
Чтобы обратиться к отдельному элементу таблицы, надо указать индекс (номер). Например, элемент с индексом 3 равен 23.
Объявление одномерных массивов Массив можно описать разными способами:
1. В разделе описания переменных
Var <имя массива>:Array [<тип индекса>] Of <тип элементов>;
Тип индекса – порядковый тип, кроме Integer. Часто используют интервальный тип (указывают допустимый диапазон значений). При указании диапазона начальный индекс не должен превышать конечный. Тип элементов массива может быть любым (стандартным или описанным ранее). Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.
2. В разделе описания типов
Type <имя типа> = Array [<тип индекса>] Of <тип элементов> ;
Var <имя массива> : <имя типа> ;
3. В разделе констант (задание типизированной константы)
Const <имя массива>:Array [<тип индекса>] Of <тип элементов> = (<список элементов>);
Пример 11.3. Способы описания массивов.
1. Var А:Array [1..30] Of Byte;
При описании массива можно использовать предварительно объявленные константы:
Const NMax=30;
Var А:Array [1..Nmax] Of Byte;
2. Type TArray= Array [1..30] Of Byte;
Var A: TArray;
В результате описаний 1-2 на этапе трансляции программы будет выделена память под массив А размером 30 байт.
3. Const A:Array [1..30] Of Byte=(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);
В описании 3 происходит не только выделение памяти под массив А размером в 30 байт, но и выполняется присваивание элементам значений элементам массива.
4. Const A:Array[-2..2] Of Char =(‘1’,’2’,’3’,’4’,’5’);
В описании 4 задается массив из пяти элементов символьного типа. Индексы элементов массива меняются в пределах от -2 до 2. Массив содержит значения в диапазоне от ‘1’ до ‘5’.
При написании программы надо учитывать, что на хорошем выборе типов данных (в частности, индексов) можно сэкономить – получить более красивый, эффективный код, избавиться от «лишних» переменных и действий соответственно.
Пример 11.4. Описать массив для хранения и последующей обработки информации о количестве студентов группы, родившихся за каждый год в период от 1993 до 1987 годы.
Описание массива может быть таким:
Var k:Array [1987..1993] Of Integer;
Для обращения к элементам массива надо указать имя массива, а затем в квадратных скобках – индекс элемента. Например, обращение к 3-му элементу массива: A[3]. Изменение значения пятого элемента: A[5]:=30;. Для элемента массива в квадратных скобках может стоять не только непосредственное значение индекса, но и выражение, приводящее к значению индексного типа: A[k], A[N-k+1].
|