Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Delphi_1курс лекции / Пр 6 Массивы.doc
Скачиваний:
44
Добавлен:
23.03.2015
Размер:
123.9 Кб
Скачать

Массивы 14

Массивы

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

Различают массивы статические, размеры которых устанавливаются в момент их объявления, и динамические, размеры которых могут изменяться во время выполнения. В функции или процедуры можно передавать в качестве параметров как массивы фиксированного размера, так и открытые массивы, размер которых неизвестен. Кроме того можно передавать открытые массивы констант, содержащие значения различных типов.

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

Объявление переменной как одномерного массива имеет вид:

var

<имя массива>: array [<ограниченный тип>] of <тип элементов>;

Например:

var

A: array [1..10] of integer;

объявляет массив с именем А, содержащий 10 целых чисел. Доступ к элементам этого массива осуществляется выражением A[i], где i индекс, являющийся в данном примере, как видно из объявления, целым числом в диапазоне от 1 до 10.

Например, А[1] — значение первого элемента, А[2] — второго, А[10] последнего.

Приведем примеры использования этого массива. Код

А[1] := 1;

А[2] := 1;

for i:=3 to 10 do A[i] := A[i-2]+A[i-l] ;

заполняет массив так называемыми числами Фибоначчи, первые 2 из которых равны 1, а каждое последующее равно сумме двух предыдущих.

Диапазон индексов совершенно не обязательно должен начинаться с 1. Например, можно объявить массив следующим образом:

var B: array [0..10] of integer;

Надо только не запутаться в количестве элементов такого массива. Поскольку индексы изменяются от 0 до 10, то в таком массиве 11 чисел.

Элементы массива могут иметь любой тип. Например, предложение

var S: array [0..10] of char;

определяет массив символов. Массив символов — это фактически строка. И с ним можно во многом обращаться как со строкой. Например, если вы определили массив S, как показано выше, то в дальнейшем допускается оператор вида

S := 'abcdefghijk’;

хотя можно обращаться с S и как с массивом. При использовании массива символов как строки надо только иметь в виду, что это строка фиксированной допустимой длины. И приведенный выше оператор не будет вызывать ошибок, только если число символов в строке не превышает объявленного размера массива.

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

Type

color=(red,yellow,green) ;

var

ACol: array [color] of integer;

В качестве типа индекса вы задали введенный вами перечислимый тип. И тогда, например, ко второму элементу массива вы можете обратиться как ACol[yellow].

Приведем еще несколько примеров определений массивов:

Var

Ch: array [ ' a ' . . ' z ' ] of char;

объявляет массив символов, индексами которого являются все символы латинского алфавита в нижнем регистре. Подобный массив можно использовать, например, для шифрования символов. Сначала загрузить в него символы:

Var i: char;

. . .

for i:='a' to ' z ' do Ch[i] := i;

Затем символы в массиве можно случайным образом перемешать, используя функцию генерации случайных чисел Random или каким-то другим образом, а затем заменять символы, пользуясь этим массивом как ключом. Например, если полученный от пользователя символ присвоен переменной Ch1, то он заменяется на символ Ch2:=Ch[Ch1] и в таком измененном виде пишется в зашифрованный текст. Расшифровка может осуществляться следующим образом. Если Ch2 — символ зашифрованного текста, то исходный символ Ch1 можно найти, например, оператором:

Ch1 := Decode (Ch2) ;

где Decode — функция, определенная следующим образом:

Function Decode (Ch2 :char) :char;

begin

for Result:='a' to 'z' do

if Ch [Result] =Ch2 then exit;

end.

Она возвращает индекс элемента массива, значение которого совпадает с заданным зашифрованным символом.

Во всех приведенных примерах объявлялись непосредственно переменные, являющиеся массивами. Можно объявить и тип массива, а затем объявлять переменные этого типа. Например, операторы

Type

Arr = array [0..10] of integer;

Var

А, B: Аrr;

объявляют тип Аrr как массив целых чисел размером 11 и объявляют две переменные А и В этого типа.

Объявление переменной типа массива можно совмещать с заданием элементам массива начальных значений. Эти значения перечисляются после знака равенства, разделяются запятыми и заключаются в круглые скобки. Например:

Var

Al: array[0..10] of integer = ( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11) ;

или аналогичное объявление типизированной константы:

Const

Al: array[0..10] of integer = (1,2,3,4,5,6,7,8,9,10,11);

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

Const

S:array[0. .3] of char = ( 'A' , 'В‘ , 'С' , 'D' ) ;

и

Const

S: array[0..3] of char = 'ABCD';

эквивалентны друг другу.

Имеется одно оговоренное в документации ограничение для массивов: константы — массивы не могут содержать значений типа файлов.