Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СТАНДАРТНЫЕ ТИПЫ ДАННЫХ.docx
Скачиваний:
0
Добавлен:
14.11.2019
Размер:
40.69 Кб
Скачать

Типы данных, определяемые пользователем Перечислимый и интервальный типы данных

Pascal предоставляет широкие возможности для задания дополнительных типов, характеристики которых можно определять самостоятельно. Новые типы описываются в специальном разделе типов или определяются непосредственно при описании переменных. В Pascal имеются два дополнительных порядковых типа, которые относятся к пользовательским: перечислимый и интервальный (диапазон).

Они используются для того, чтобы ещё больше ограничить количество значений, принимаемых переменными этого типа, и позволяют следующее:

- значительно улучшить наглядность программы;

- оптимально выделить память под переменные, т.к. в этом случае компилятор сам подбирает наиболее подходящий размер ячейки памяти;

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

Перечислимый тип данных задается списком значений (объектов), которые могут принимать переменные этого типа. При этом каждый обьект есть имя. Числа, логические и символдьные константы не могут являться обьектами перечислимых типов. Сами значения указываются через запятую, а весь список заключается в круглые скобки. Первое значение имеет порядковый номер 0, второе – 1 и т.д.

Например:

Type Color=(red, blue, green, blak);

Var A,X,Y: Color;

Можно записать следующие операторы присваивания:

A:=red;

X:=blue;

Y:=blak;

В приведенном примере создается новый перечислимый тип данных Color. Переменные этого типа могут принимать всего четыре значения: red, blue, green, blak.

Для значений перечисления одного и того же типа допустимы операции сравнения. Упорядочение осуществляется по номеру элемента в описании типа. Например, будет истинно выражение blue < green, т.к. blue имеет меньший номер по порядку в описании типа, чем green.

Для обьектов перечислимых типов определены стандартные функции Pred, Succ и Ord, имеющие тот же смысл, что и для скалярных стандартных типов:

Функция

Назначение

Результат

Ord(X)

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

Целочисленное значение

Pred(X)

Определение предыдущего значения величины Х. Аргумент – величина любого порядкового типа.

Совпадает с типом аргумента. При применении функции к первому элементу последовательности возникает ошибка

Succ(X)

Определение последующего значения величины Х. Аргумент – величина любого порядкового типа.

Совпадает с типом аргумента. При применении функции к последнему элементу последовательности возникает ошибка

Например, для типа Color результатом функции Succ(red) является значение blue, результатом функции Pred(blak) – green. Функция Ord(blue) выработает значение, равное единице, так как нумерация объектов в списке начинается с нуля.

В языке Pascal применение перечислимого типа ограничено тем, что значения данных этого типа нельзя вводить с клавиатуры или выводить на какое-либо устройство вывода, а также нельзя выполнять обычные арифметические операции. Их можно только присваивать переменной перечислимого типа.

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

Оператор варианта Case удобно использовать для ввода и вывода значений перечислимых скалярных типов.

Например, разработаем программу, которая по названию страны определяет столицу этой страны.

Program lab;

Uses WinCrt;

Type Land=(Avstriya,USA,Rusland,Franziya);

Stolica=(Vien,Washington,Moskou,Pariz);

Var str:Land;

Gorod: Stolica;

N: integer;

Begin

ClrScr;

For str:= Avstriya to Franziya do

Case str of

Avstriya: writeln(‘Vien’);

USA: writeln(‘Washington’);

Rusland: writeln(‘Moskou’);

Franziya: writeln(‘Pariz’);

End;

Readln;

End.

Интервальный тип представляет собой диапазон (интервал) значений какого-либо порядкового типа, называемого базовым. При описании этого типа указывается минимальное и максимальное значения диапазона значений, допустимого для этого типа.

Например:

Type

Month=1..12;

Z=’a’..’z’;

Day=Mon..Fri;

Переменная Month может принимать значения от1 до 12, переменная Z может принимать значения букв латинского алфавита, переменная Day – значения от Mon до Fri.

Для каждой операции с переменной интервального типа автоматически выполняется проверка: остается ли значение переменной внутри установленного для неё диапазона. Автоматическая проверка объявленных границ позволяет не отвлекаться на организацию собственного контроля, что является существенной выгодой от использования интервального типа.

К переменным интервального типа применимы все операции и стандартные функции, которые допустимы при работе с переменными соответствующего базового скалярного типа.

Например, разработаем программу, определяющую по дню и месяцу рождения определить знак Зодиака.

Program 222;

Uses Crt;

Var

M: 1..12; {месяц}

D: 1..31;{день};

Zod:(Овен, Телец, Близнецы, Рак, Лев, Дева, Весы, Скорпион, Стрелец, Козерог,

Водолей, Рыбы);

Begin

ClrScr;

Writeln (‘Введите месяц рождения:’);

Readln(m);

Writeln (‘Введите день рождения:’);

Readln(d);

Case m of

1: if d<=20 then Zod:=Козерог else Zod:=Водолей;

2: if d<=18 then Zod:=Водолей else Zod:=Рыбы;

3: if d<=20 then Zod:=Рыбы else Zod:=Овен;

4: if d<=20 then Zod:=Овен else Zod:=Телец;

5: if d<=21 then Zod:=Телец else Zod:=Близнецы;

6: if d<=21 then Zod:=Близнецы else Zod:=Рак;

7: if d<=22 then Zod:=Рак else Zod:=Лев;

8: if d<=23 then Zod:=Лев else Zod:=Дева;

9: if d<=23 then Zod:=Дева else Zod:=Весы;

10: if d<=20 then Zod:=Весы else Zod:=Скорпион;

11: if d<=22 then Zod:=Скорпион else Zod:=Стрелец;

12: if d<=21 then Zod:=Стрелец else Zod:=Козерог;

end;

writeln(‘Ваш знак зодиака:’);

case Zod of

Козерог: writeln(‘Козерог’);

Водолей: writeln(‘Водолей’);

Рыбы: writeln(‘Рыбы’);

Овен: writeln(‘Овен’);

Телец: writeln(‘Телец’);

Близнецы: writeln(‘Близнецы’);

Рак: writeln(‘Рак’);

Лев: writeln(‘Лев’);

Дева: writeln(‘Дева’);

Весы: writeln(‘Весы’);

Скорпион: writeln(‘Скорпион’);

Стрелец: writeln(‘Стрелец’);

Козерог: writeln(‘Козерог’);

End;

Readln;

End.