Одномерные массивы символов имеют некоторые особенности по сравнению с другими типами массивов. Им можно приваивать начальные значения как обычным массивам - каждому элементу в отдельности, так и всем сразу, как это делается для строк:
var ch: array[1..6] of char = ('s', 't', 'r', 'i', 'n', 'g'); var ch: array[1..6] of char = ('string');
Затем можно присвоить новое значение и каждому элементу массива, и всему массиву разом:
ch[1]:= 's’; ... ch:= 'string';
Массивы символов можно сравнивать между собой, даже если они не идентичных типов и разной длины, и объединять в один массив операцией конкатенации.
Таким образом, с массивом символом можно обращаться и как со строкой фиксированной максимальной длины (в данном случае в переменную нельзя «вогнать» больше 6 символов), и как с обычным массивом.
Типы индексов
В качестве индекса может быть использован не только ограниченный целый тип, как во всех наших примерах, но и любые другие ограниченные типы (поэтому нельзя использовать типы integer и real - первый слишком большой, второй - вообще бесконечный).
Логический тип:
var al: array[boolean] of integer;
Поскольку логический тип имеет всего 2 элемента, то и в массиве их будет тоже 2. Обратиться к ним можно так:
al[false]:= 0; al[true]:= 1;
Диапазон:
var ad: array[1..10] of boolean;
Этот тип индексов встречается чаще всего. Обычно для конечного индекса используют константу
const MAX_INDEX= 10; var ad: array[1.. MAX_INDEX] of boolean;
Эту же константу следует записывать и в исходном коде программы при обозначении максимального индекса массива. Такой способ задания диапазона индексов позволяет легко модифицировать программу (достаточно изменить в одном месте значение константы), да и идентификатор MAX_INDEX гораздо понятнее, чем просто числовая константа 10.
А такой массив, индексами которого являются все заглавные буквы латинского алфавита
var ad: array['A'..'Z'] of Integer;
поможет вам подсчитать, сколько раз они встречаются в каком-либо тексте:
ad[’A’]:=0;
Затем увеличиваем счётчик каждый раз, когда найдём букву А:
inc(ad['A']);
Для других букв действуйте аналогично.
Перечисляемый тип можно употребить и как тип элементов, и как тип индексов:
type color= (red, orange, yellow, green, cyan, blue, violet, black);
cells= array[1..8,1..8] of color; var field: cells;
Теперь вы можете раскрашивать любое игровое поле (хотя бы шахматную доску) во все цвета радуги:
field[1,1]:= red; field[1,2]:= orange; и так далее.
type cells2= array[color] of boolean; var clr: cells2;
clr[black]:= false; //- такого цвета в радуге нет
Типы индексов можно смешивать:
Var field2: array[1..8, color] of boolean;
Field2[2, violet]:= true;
Литерный тип состоит из всех символов ASCII:
Var Lit: array[char] of byte;
Объявив таким образом переменную, мы можем задать коды символов:
Lit [’0’]:= 48;
Lit [’1’]:= 49;
Если вы вдруг переврёте коды символов, то сможете шифровать свои сообщения и смело делиться своими сообщениями с товарищами - а пусть они голову поломают!
Операции с массивами
Одному массиву можно присвоить значение другого массива, при условии, что они имеют одинаковый тип. Но тут есть определённая тонкость. Если объявить тип массива, то все переменные этого типа можно присваивать друг другу:
type mas= array[1..10] of integer; var a1,a2: mas; a1:= a2;
Если переменные объявить в одном списке, то они также будут иметь одинаковый тип:
var a1,a2: array[1..10] of integer;
Однако совершенно одинаковые массивы, объявленные раздельно, однотипными не считаются:
var a1,a2: array[1..10] of integer; a3: array[1..10] of integer;
и операция присваивания a1:= a2; вызовет ошибку несовместимости типов!
Для всех массивов определены функции:
length - возвращает число элементов в массиве (для а1 - 10)
low - возвращает начальный (минимальный) индекс массива (для а1 - 1)
high - возвращает конечный (максимальный) индекс массива (для а1 - 10)
Если присоединить к программе модуль Math, то станут доступны функции для числовых массивов целого типа и типов double и extended.
Объявим массив целых чисел и заполним его:
var a1: array[1..10] of integer; for n := 1 to 10 do a1[n]:= n;
Теперь с помощью функции MaxIntValue мы легко найдём минимальное и минимальное значение в массиве:
MinIntValue(a1) 1
MaxIntValue(a1) 10
И при этом нам не пришлось перебирать элементы массива!
Функции для массивов вещественного типа работают аналогично:
var ad: array[1..10] of double; for n := 1 to 10 do ad[n]:= n;
Аналогично находим
MinValue(ad) 1 - минимальное значение
MaxValue(ad) 10 - максимальное значение