Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Введение в язык Pascal
Посмотреть оригинал

Типы индекса

Значением индексного выражения всегда является конкретное данное, по которому однозначно можно установить номер компоненты массива. Поэтому, очевидно, тип индекса может быть только скалярным. Рассмотрим последовательно скалярные типы и укажем, какие из них могут использоваться как типы индекса, а какие не могут и почему.

В первую очередь нужно отвергнуть тип integer, так как множество значений этого типа в самом языке неограничено, а также тип real, у которого множество значений тоже неограничено (более того, в паскале оно и неупорядочено).

Наиболее часто в качестве типа индекса используется ограниченный тип, причем в большинстве случаев — это ограниченный целый тип. Действительно, множество значений ограниченного типа конечно, оно упорядочено и является перенумерованным. Так, массив из 100 компонент вещественного типа может быть задан следующим образом:

array [1..100] of real

Ограниченный целый тип 1 .. 100 определяет количество компонент (сто) и их упорядоченность (от первой до сотой). Во многих задачах нумерация компонент начинается с 1 и ограничивается положительным целым числом. Однако это вовсе не обязательно. Если, например, в программе используется вектор, компоненты которого представляют собой численность населения города Москвы в отдельные годы, то нумерацию компонент удобнее начинать с целого числа 1147 — года основания Москвы. Пусть последняя компонента этого вектора имеет номер 1999 — предпоследний год нашего столетия. Тогда этот вектор может быть задан следующим образом: array [1147..1999] of integer

Если же в программе обрабатывается численность населения города Рима до нашей эры, то удобно ввести целочисленный вектор с нумерацией компонент, начиная с отрицательного целого числа —754 (года основания Рима) до —1 (последнего года исчисления до нашей эры). Задать такой вектор можно следующим образом:

array [-754..-1] of integer

Каждому задаваемому регулярному типу можно дать имя с помощью описания типа, так что указанные выше регулярные типы можно ввести в употребление с помощью следующего фрагмента программы: type

границы=1..100;

Вектор=аггау [границы] of real; чМосквы=аггау [1147..1999] of integer; чРима=аггау [-754..-1] of integer;

Переменные регулярного типа рассмотренных видов вводятся в употребление обычным способом, с помощью соответствующего описания в разделе переменных. Если нужный тип был описан (т.е. ему было дано имя), то в описании переменных достаточно указать имя типа:

var

А,В: Вектор; c,d: чМосквы;

Регулярный тип можно задать и непосредственно при описании переменных: var

г,t: array [граница] of real;

s,q: array [1147.. 1999] of integer;

g,h: array [-754..-1] of integer;

k,m: array [1..50] of (шар, куб, пирамида);

Предыдущие примеры убеждают, что использование лишь ограниченного целого типа в качестве типа индекса открывает большие возможности для задания одномерных массивов.

Множество значений перечислимого типа также образует ограниченное перенумерованное множество. Следовательно, перечислимый тип также может применяться в качестве типа индексов. Действительно, значения перечислимого типа упорядочены (порядок задается порядком перечисления имен, являющихся значениями этого типа) и число их конечно (определяется количеством имен в этом типе). Нетрудно представить и случай, когда в качестве индексов удобно использовать именно значения перечислимого типа. Действительно, пусть в какой-то задаче пользуются массивом из двенадцати вещественных компонент, являющихся среднемесячными температурами воздуха в году. Конечно, можно в качестве типа индекса использовать и ограниченный целый тип 1..12. Но тогда программа проигрывала бы в наглядности и понятности: ведь двенадцатиэлементный вектор из вещественных чисел может представлять в общем случае что угодно. Поэтому введем перечислимый тип, состоящий из имен — названий месяцев года, и назовем его Месяц:

Тогда переменные регулярного типа, являющиеся по своему смыслу векторами среднемесячных температур, можно определить следующим образом:

Частичные переменные, обозначающие температуру конкретного месяца, выглядят следующим образом: t [январь], t [февраль], t [март] и т.д. Если в программе введена в употребление переменная типа Месяц, например

var

month: Месяц

то эту переменную можно использовать в качестве индекса:

Конкретная компонента вектора t, обозначаемая этой частичной переменной, будет определяться текущим значением переменной month.

В предыдущей главе отмечалось, что тип boolean является стандартным перечислимым типом, а следовательно, и его значения могут быть использованы в качестве значений индекса. Соответственно, индексные выражения могут представлять собой логические выражения.

При введении стандартного типа char подробно обсуждался вопрос об упорядоченности значений этого типа. В главе 2 говорилось о влиянии конкретной реализации на способ упорядочения значений этого типа. Сейчас же важно, что при любой реализации значения стандартного типа char образуют ограниченное перенумерованное множество, а значит, могут быть использованы в качестве индексов. Ниже приведены примеры регулярных типов, у которых в качестве типа индекса указаны стандартные типы boolean и char:

Примеры частичных переменных с постоянными значениями индексов:

и с переменными значениями индексов (b, d — логические переменные; sym — литерная переменная):

 
Посмотреть оригинал
< Предыдущая   СОДЕРЖАНИЕ   Следующая >
 

Популярные страницы