Одномерные массивы
VI. МАССИВЫ. ДАННЫЕ ТИПА ARRAY
Скалярный тип - простой тип данных. Скалярное данное неделимо. Массивы - это структурированные типы данных. Массив состоит из нескольких элементов. Ко всему массиву можно обращаться по его имени. Можно обращаться к его элементу, но для этого надо задать индекс (индексы). Массивы бывают одномерные и многомерные. Для объявления массива необходимо задать типы его индексов и компонент.
СИНТАКСИЧЕСКАЯ ДИАГРАММА
Тип компонент массива - это просто тип данных, ассоциированный с каждой компонентой массива. Тип компонент может быть любым REAL, INTEGER, CHAR, BOOLEAN, перечислимым, интервальным. В качестве компоненты массива может быть взят и тип массив.
Тип индекса должен быть одним из упорядоченных типов, т.е. любым скалярным типом, кроме REAL: INTEGER, CHAR, интервальный, перечислимый. Тип индекса определяет границы изменения индекса. Если сделана попытка использовать несуществующую компоненту, то возникает ошибка (ошибка неверного индекса).
Одномерный массив можно задать двумя способами:
1. с помощью служебного слова TYPE описывается тип массива, а затем с помощью VAR вводится переменная этого типа;
ОБЩАЯ ФОРМА ЗАПИСИ:
TYPE <тип массива> = ARRAY[тип индекса] OF <тип компонент>;
VAR <переменная>: <тип массива>;
2. с помощью слова VAR сразу описывается переменная типа массив;
ОБЩАЯ ФОРМА ЗАПИСИ:
VAR <переменная>: ARRAY [тип индекса] OF <тип компонент>;
Например, объявление массива из 100 элементов типа REAL можно осуществить следующими двумя способами:
1. type R100 = array[1..100] of real;
var A: R100;
2. var A: array[1..100] of real.
Здесь задан массив с именем "А" и его элементы имеют имена: А[1],…,A[100]. Чаще всего для типа индекса используют интервальный тип на основе типов INTEGER и CHAR. Однако можно в качестве индексов брать перечислимый тип.
Пример 1. Подсчет числа вхождений букв в текст определенной длины
program COUNTER;
var COUNT: array['a'..'z'] of integer;
CH: char; N: integer;
begin
for CH:= 'a' to 'z' do
COUNT [CH]:= 0; N:= 0;
repeat
read(CH); N:= N+1;
if (CH >= 'a') and (CH <= 'z') then
COUNT [CH]:= COUNT [CH]+1;
until CH = '.';
for CH:= 'a' to 'z' do
writeln(CH, COUNT [CH]:5);
end.
Пояснение. В этом примере тип индекса есть интервальный тип на базе типа CHAR, а тип компонент есть целое число. Таким образом, элементы массива - числа, а их индексы - буквы, т.е. число элементов массива равно 26 (число букв латинского алфавита). Рассмотрим теперь случай, когда тип индекса задан перечислимым типом, а компоненты массива представлены компонентами интервального типа на базе типа INTEGER.
ПРИМЕР 2. Присваивание переменной с именем месяца числа дней этого месяца
DAY: | Значениеэлементов | ||||||||||
Значение индексов | |||||||||||
JAN | FEB | MAR | APR | MAY | JUN | JUL | AUG | SEP | OKT | NOV | DEC |
program NUMBRDAY;
type MONAT = (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,
SEP, OKT, NOV, DEC);
var DAY : array [MONAT] of 28..31; T : MONAT;
begin
for T := JAN to DEC do
case T of
JAN, MAR, MAY, JUL, AUG, OKT, DEC: DAY[T]:= 31;
APR, JUN, SEP, NOV: DAY[T]:= 30;
FEB : DAY[T]:= 28;
end;
end.