Перечисляемый и ограниченный типы данных

### Конспект урока | Вопросы самопроверки | Задания на дом | Практикум | Тест

## Перечисляемый и ограниченный типы данных.

### Перечисляемый и ограниченный типы данных относятся к так называемым порядковым типам данных, то есть таким, областью значений которых является упорядоченное множество. Каждому элементу такого множества соответствует некоторое порядковое число, являющееся его номером при перечислении. Для порядковых типов данных существуют специальные функции, с помощью которых можно работать с этими типами данных.
SUCC(a)- следующий элемент области значений порядкового типа (если он есть);
PRED(a)- предыдущий элемент области значений порядкового типа (если он есть);
ORD(a) – номер элемента в области значений порядкового типа.

##

## Перечисляемый тип.

### Для данного типа значения, которые может иметь переменная такого типа, перечисляются по именам. Ввод и вывод значений переменных с помощью стандартных процедур ввода и вывода невозможен.
Описание производится следующим образом:
Type chisla=(2,8,9,4,7);
Рассмотрим программу:
Program swet;
Var f,g:color;
Begin
For g:=blue to brown do
Case g of
Blue:write(‘голубой’);
Brown:write(‘коричневый’);
Green:write(‘зеленый’);
Red:write(‘красный’);
Cyan:write(‘желтый’);
End;
End.

## Ограниченный тип.

### Для порядкового типа в качестве множества значений можно указать какой - либо интервал.
Например:
Type
Alfavit=’’;
Chislo=1..31;
Var a:alfavit;b:chislo;
Или
Var c,m:1..100;
В этих случаях переменные a,b,c,m могут принимать только те значения, которые входят в указанный для них интервал.
Пример, который иллюстрирует использование этого типа данных.
С клавиатуры вводятся две даты. Выдать сообщение «правильно», если первая введенная дата предшествует второй, и «неправильно», если наоборот.
Так как в условиях задачи ничего не сказано об интервале дат, то возьмем полный формат даты. Условие будет выполнено, если номер первого года меньше номера второго, или номер первого месяца меньше второго при одинаковом годе, или номер первого дня меньше номера второго при одинаковом месяце в годе.
Program data(input,output);
Uses crt;
Var d1,d2:1..31;
Mes1,mes2:1..12;
God1,god2:1900..2100;
Begin
Write(‘Введите первую дату(день, месяц, год через пробел или нажимая ENTER)’);
Readln(d1,mes1,god1);
Write(‘Введите вторую дату(день, месяц, год через пробел или нажимая ENTER)’);
Readln(d2,mes2,god2);
If (((d2>d1) or (mes2>mes1)) and (god1=god2)) or (god2>god1) then
Writeln (‘Правильно’)
Else writeln (‘Неправильно’);
Repeat until keypressed;
End.

### 1. Что является областью значений перечисляемых и ограниченных типов данных?
2. Перечислите функции, с помощью которыз можно работать с перечисляемыми и ограниченными типами данных.
3. Возможен ли ввод и вывод значений этих типов переменных с помощью стандартных процедур ввода вывода?
4. Каким образом описывается переменная перечисляемого типа?

### 1. Переменная перечисляемого типа DETI описана в программе следующим образом:
Type name(Vika,Petr,Viktor,Vila,Igor);
Var Deti:name;
Определить результат операции для переменной Deti, переменной x типа Integer, переменной U типа Boolen;
а) x:=ord(succ(Viktor))+1;
б)deti:=name(ord(Petr)+3);
в) deti:=pred(pred(Igor));
г) x:=ord(succ(Viktor))-ord(pred(Viktor));
д) u:=pred(Viktor)>Vika;
е) u:=succ(Viktor)>pred(Viktor);
2. Определите, почему не работает программа (переменные те же);
a) deti:=succ(Igor);
б) deti:=ord(Viktor);
в) deti:=pred(Vika);
г) deti:=succ(‘ПЕТЯ’);
д) deti:=name(8);
е) x:=ord(succ(Viktor)+1);
3. Прочитать теорию урока.