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

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.