Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2.DOC
Скачиваний:
0
Добавлен:
09.11.2018
Размер:
52.74 Кб
Скачать

2.8. Упорядоченные типы

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

К упорядоченным типам относятся:

- целый;

- булевский;

- символьный;

- перечислимый (см.п.2.9).

Данные целого типа нумеруются своими значениями, булевского: FALSE - 0, TRUE - 1, символьного - в соответсвии с кодом ASCII.

К данным упорядоченных типов применимы следующие стандартные функции:

- Ord(x) - порядковый номер значения x в типе;

- Pred(x) - предшествующее значению x в типе;

- Succ(x) - следующее за x значение в типе.

Например, выражения Ord(5)=5; Pred(5)=4; Succ(5)=6; Pred(TRUE)=FALSE; Pred('d')='c'; Succ('x')='y'; Ord(TRUE)=1 имеют значение TRUE (т.е.истинны).

Пример 2.8.1. Ввести 3 символа. Подсчитать, сколько среди них символов # . PROGRAM Kos; VAR a,b,c : char; k : integer; BEGIN Write('3 символа :'); ReadLn(a,b,c); k:=Ord(a='#') + Ord(b='#') + Ord(c='#'); WriteLn('Количество "#" = ', k) END. Здесь использован тот факт, что Ord(FALSE)=0, Ord(TRUE)=1. Зна-чение функции Ord(a='#') будет равно 0 или 1 в зависимости от того, ложно или истинно выражение в скобках.

Задачи

2.8.1. Ввести 3 символа. Подсчитать, сколько среди них: а) прописных букв латинского алфавита; б) букв латинского алфавита.

2.8.2. Ввести две пары символов. Определить количество пар, в которых оба символа соседние в наборе ASCII.

2.8.3. Ввести символ. Напечатать два следующих за ним символа.

2.8.4. Ввести 2 числа. Определить: 1) наибольшее из них; 2) сумму отрицательных; 3) количество отрицательных.

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

Перечислимый тип задает упорядоченное множество значений путем перечисления имен, обозначающих эти значения.

Например, тип day - 7 дней недели от понедельника - можно опре-делить следующим образом:

TYPE day = (mon,tue,wed,thu,fri,sat,sun).

Перечислимый тип относится к упорядоченным, следовательно, к нему применимы функции Pred, Succ, Ord .

Пример 2.9.1. Приведем программу, содержащую несколько возмож-ных операторов с данными перечислимого типа. PROGRAM Week; TYPE day = (mon, tue, wed, thu, fri, sat, sun);

VAR a : day;

n : integer;

BEGIN

a:=wed;

a:=Succ(fri);

n:=Ord(sun)-Ord(mon)+1; {Количество значений в типе}

IF a>mon THEN a:=Pred(a);

WHILE a<>sat DO a:=Succ(a);

CASE a OF

mon : WriteLn('Понедельник');

tue..fri : WriteLn('Вторник-пятница');

sat,sun : WriteLn('Выходной')

END; END.

Данные перечислимого типа предназначены обычно для "внутреннего" потребления программы, поэтому в языке Паскаль не предусмотрен их ввод/вывод. Если же потребность в этом имеется, то программист должен сам позаботиться о методе реализации.

2.10. Ограниченный тип (тип "диапазон")

Ограниченный тип определяется путем наложения ограничения на значения любого упорядоченного типа, называемого базовым. Иными словами, указывается диапазон значений базового типа, например:

TYPE chi = 8..125; sm = 'd'..'k'; VAR z,a : chi; kl : sm; b : 'm'..'z'; Здесь определены два ограниченных типа: chi имеет базовый тип целый, а sm - символьный.

Переменные a,z , в соответствии с описанием, могут принимать зна-чения из диапазона 8 .. 125, а переменная kl - из диапазона 'd'..'k'.

Для переменной b указан диапазон непосредственно в разделе описа-ний переменных, что тоже допустимо.

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

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