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

Одномерные массивы символов имеют некоторые особенности по сравне­нию с другими типами массивов. Им можно приваивать начальные значе­ния как обычным массивам - каждому элементу в отдельности, так и всем сразу, как это делается для строк:

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 - максимальное значение

������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: