В 5.7 я говорил о порядковых типах - это те типы, все значения которых можно выстроить по порядку и перечислить от начала до конца. Мы пока знаем, что в Паскале порядковыми типами являются целочисленные типы, символьный тип и логический тип. Кроме того, программист может придумывать собственные порядковые типы. Рассмотрим, например, такую конструкцию:
VAR Month : (january, february, march, april, may, june, july, august, september, october, november, december)
Она означает, что переменная Month может принимать только одно из перечисленных в скобках значений. Например, можно записать Month:= may. Переменная Month является переменной перечислимого типа, который является одним из видов порядковых типов.
Эти значения ни в коем случае не являются строками. Так, нельзя записать Month:= ‘may’. Кроме того, их нельзя вывести на печать, вообще они не могут быть введены в компьютер или выведены из него, например, при помощи операторов Read и Write. Однако, их удобно применять при программировании. Это удобство выяснится из следующего примера.
Задача: Известно, сколько дней в каждом месяце года. Сколько дней летом?
Сначала запишем программу традиционным способом.
Программа:
CONST dni :array[1..12]
of Byte = (31,28,31,30,31,30,31,31,30,31,30,31);
VAR s,i :Integer;
begin
s:=0; {Сумматор летних
дней}
for i:=6 to 8 do s:=s+dni[i]; {Летние месяцы - 6,7,8}
WriteLn(s)
end.
Недостаток приведенной программы - не самая лучшая наглядность, к тому же приходится самому на пальцах вычислять номера месяцев начала и конца лета (6 и 8). Паскаль имеет средства повысить наглядность и удобство таких программ. Запишем нашу программу по-новому, с использованием перечислимого типа данных:
TYPE mes = (january,
february, march, april, may, june, july, august, september,
october, november, december);
CONST dni :array[january..december] of Byte =
(31,28,31,30,31,30,31,31,30,31,30,31);
VAR s :Integer;
i :mes;
begin
s:=0;
for i:=june to august do s:=s+dni[i];
WriteLn(s)
end.
Пояснения: Основное достижение нашей программы в том, что в операторе for можно написать june to august вместо 6 to 8, а в определении массива dni можно написать array[january..december] вместо array[1..12]. Для этого пришлось определить специальный перечислимый тип mes, перечислив в скобках произвольные имена месяцев, а переменную цикла i задать типом mes, а не Integer.
Синтаксис перечислимого типа:
(имя , имя , имя , . . . . , имя)
Значения перечислимого типа можно использовать так же свободно, как и значения порядковых типов, например:
if i = february then dni[i]:= 29
Скачано с www.znanio.ru
© ООО «Знанио»
С вами с 2009 года.