Перечислимые типы
Оценка 4.8

Перечислимые типы

Оценка 4.8
docx
информатика
06.05.2020
Перечислимые типы
0.1. Перечислимые типы
75.docx

0.1. Перечислимые типы

В 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

Перечислимые типы В 5.7 я говорил о порядковых типах - это те типы, все значения которых можно выстроить по порядку и перечислить от начала до…

Перечислимые типы В 5.7 я говорил о порядковых типах - это те типы, все значения которых можно выстроить по порядку и перечислить от начала до…

Значения перечислимого типа можно использовать так же свободно, как и значения порядковых типов, например: if i = february then dni[i]:= 29

Значения перечислимого типа можно использовать так же свободно, как и значения порядковых типов, например: if i = february then dni[i]:= 29
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
06.05.2020
Посмотрите также: