Песни о Паскале | страница 160
Прежде, чем пользоваться массивом, его надо объявить: либо в секции VAR, либо через объявление пользовательского типа в секции TYPE.
Рассмотрим сначала первый способ, – объявим массив в секции VAR.
>VAR Имя_Массива : ARRAY [
Здесь использована пара ключевых слов ARRAY… OF…, что переводится как «массив… из…». Имя массива – это обычный идентификатор, его программист придумывает сам; будем считать это имя названием команды переменных.
Справа, после двоеточия, указывают две характеристики массива: 1) диапазон для индексов и 2) тип элементов массива. Рассмотрим эти атрибуты массива подробней.
Диапазон для индексов определяет допустимые номера элементов внутри массива. Диапазон указывают в квадратных скобках после слова ARRAY, – это два выражения порядкового типа, условно обозначенные мною как MIN и MAX, они разделяются двумя точками. Говоря спортивным языком, здесь назначается диапазон номеров для «игроков команды».
После ключевого слова OF следует второй атрибут массива – тип данных для всех его элементов. Прибегнув вновь к спортивному языку, скажем, что здесь объявляют «вид спорта» для команды.
Вот пример объявления трех массивов: Names (фамилии), Ratings (оценки) и ChampShip (чемпионат).
>VAR { объявления переменных-массивов }
> { 30 строковых переменных с фамилиями учеников класса }
> Names : ARRAY [1..30] OF string;
> { 30 байтовых переменных с оценками учеников этого класса }
> Ratings : ARRAY [1..30] OF byte;
> { 16 чисел с очками, набранными командами в чемпионате }
> ChampShip : ARRAY [1..16] OF integer;
Как видите, массив можно составить из элементов любого типа. Так, массив Names содержит внутри себя 30 переменных строкового типа: Names[1], Names[2] и так далее (номера переменных указывают в квадратных скобках).
Объявление массивов в секции VAR не слишком удобно. Почему? Рассмотрим следующий пример.
>var A : array [1..5] of integer;
> B : array [1..5] of integer;
>begin
> A:= B; { здесь компилятор видит ошибку несовместимости типов}
>end.
Мы объявили массивы A и B; на первый взгляд, это массивы одного типа, поскольку каждый из них содержит по пять целых чисел. Для однотипных переменных, включая массивы, Паскаль допускает операцию копирования. Например, оператором
> A:=B
все элементы массива B копируются в элементы массива A. Увы, компилятор увидит здесь ошибку несовместимости типов. В чем дело? А в том, что он считает разнотипными массивы, объявленные в разных операторах. Даже если массивы совершенно одинаковы! Скажете, компилятор недостаточно умен? Может быть, но нам придётся как-то выкручиваться, и для этого есть два пути.