Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PASСAL_a4_2007.doc
Скачиваний:
31
Добавлен:
13.09.2019
Размер:
2.51 Mб
Скачать

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

Это такой тип данных, при котором количество всех возможных значений ограничено (можно перечислить). Стандартные типы Integer, Char и Boolean относятся к перечислимым, а тмп Real не является перечислимым (т.к. нельзя перечислить все возможные значения вещественных чисел).

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

Boolean=(False,True)

Integer=(-32768,-32767,-32766..32766,32767)

Можно вводить новые перечислимые типы:

Type

Computer=(IBM,Yamaha,Atari);

Name=(Pete,Kate,Nick,Bob);

mark=(1,2,3,4,5);

Color=(Black,White,Red,Yellow,Green);

Week=(Mn,Tu,We,Th,Fr,Sa,Sn);

После того, как создан такой тип, можно объявлять в блоке Var переменные такого типа, а их значениями индексировать массивы и организовывать циклы.

Например:

Var m:mark;

pupil:Name;

col1,col2:Color;

Следует отметить, что важно, в каком порядке перечислены идентификаторы при определении типа, т.к. первому идентификатору присваивается порядковый номер 0, второму - 1 и т.д. Один и тот же идентификатор можно использовать в определении только один раз.

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

Для работы с переменными перечислимого типам могут быть использованы функции: Ord, Pred, Succ.

Примеры:

. . .

pupil:=Nick;

writeln(ord(pupil)); { будет выведено 2 }

col1:=Red;

col2:=pred(col1); {значение переменной col2 стало White}

col2:=succ(col1); {значение переменной col2 стало Yellow}

. . .

3. Ограниченный тип данных

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

Примеры:

Type

Century=1..20; {числа от 1 до 20}

Letter='a'..'z'; {буквы от а до z}

Используя описание перечислимых типов, приведенные в вышеописанных примерах (раздел *.*) можно записать следующее:

Type

Work_day=Mn..Sa;

Fav_color=White..Green;

Для переменных ограниченного типа могут использоваться функции Ord, Pred, Succ.

4. Множества

Вам, несомненно известно следующее определение: "Множество - это многое, мыслимое как целое". Множества курящих водолазов, лохматых девушек, рыжих, клавиш и т.п. отличаются одной особенностью: они не упорядочены (вряд ли существует общепринятое правило ранжирования лохматых девушек или курящих водолазов).

В отличие от других языков в языке Pascal можно работать с множествами. Множества задаются перечислением своих элементов, т.е. отвечается на вопрос "Множество чего?". Если элементов нет, считается, что множество ПУСТО.

Множество-константа обозначается в квадратных скобках:

[] - пустое множество. В нем ничего нет.

[1..10] - в множестве - целые число от 1 до 10.

['B','O','Y'] - множество из трех символов B,O и Y.

['A'..'Z'] - множество символов от A до Z.

[#72..#80] - множество символов, имеющих коды с 72 до 80.

Если есть потребность в переменных типа множество, то их описание возможно как в блоке Var, так и в блоке Type. Описание множества осуществляется с помощью фразы

Set of <базовый тип>,

где <базовый тип> - любой из перечислимых типов языка (либо стандарный: integer, byte, word, Char, Boolean, либо перечислимый или ограниченный тип, организованный на базе стандартных).

Например:

Type month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);

year=set of month;

Today=set of 1994..2994;

numbers=set of '0'..'9';

...

var

times:numbers;

boys:set of char;

girls: year;

...

Есть одна особенность: количество элементов в множестве ограничено. Для версии языка Pascal, имеющейся у Вас, это значение не может превышать 256. Именно поэтому приходится указывать конкретные диапазоны значений. Исключением является тип char и байт: они имеют ровно столько значений.

Как показала практика, cамая главная операция, которая выполняется для множеств - это проверка включения элемента в множество: if ch in [#72..#80] then ...

Операция IN позволяет составить выражение, значение которого равно True, если элемент принадлежит множеству и False - в ином случае.

Другие возможные операции:

= проверка на равенство множеств. Порядок элементов значения не имеет;

<> проверка на неравенство. Результат сравнения множеств неравенство равен True, если эти множества отличаются хотя бы одним элементом.

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

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

+ объединение множеств:

girls:=[1994..2000]+[1995..2100];

{в girls будет множество [1994..2100], т.е. все элементы, входящие в оба множества. Повторяющиеся элементы остаются в одном экземпляре}

- разность множеств:

boys:=['к','р','о','д','и','л'] - ['р','и','д'];

{в boys будет множество ['к','о','д'], т.е. все элементы, которые входят в первое множество, но не входят во второй}

* пересечение множеств:

times:=['0'.'5','7','9']*['3'..'6','8','9'];

{в times будет множество ['3','4','5','9'], т.е. те элементы, которые содержатся одновременно в первом и втором множестве }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]