Тема: «Перечисляемый тип данных»

Тема: «Перечисляемый тип данных»

Этот тип данных получил название перечисляемого, потому что он задается в виде перечисления некоторых значений. Эти значения образуют упорядоченное мно­жество и являются константами. Для объявления пере­менной список возможных значений, разделенных за­пятой, указывается в круглых скобках. Например,

Var month: (January, February, March, April, May, June, July, August, September, October, November, December);

Порядок элементов перечисляемого типа определяет­ся порядком их следования в описании. Левый имеет минимальное значение (значение функции Ord для него равно 0), а правый — максимальное.

Задание

Вычислить значения:

a) Ord(august);

b) Ord(succ(September));

c) Pred(Pred(december)).

К переменным перечисляемого типа можно приме­нять операции сравнения. Так, например, february < november.

. Использование перечисляемого типа данных повы­шает читабельность программы. Однако в языке Пас­каль нельзя вводить и выводить элементы перечисляе­мого типа. Этот недостаток легко преодолевается, так как всегда можно ввести число, являющееся порядко­вым номером элемента перечисляемого типа, и вывести на экран значение переменной перечисляемого типа, используя, например, оператор выбора Case.

Задание

Написать фрагмент программы, формирующий зна­чения переменной month, используя перечисляемый тип данных, внести соответствующие изменения в решение

примера 1.

Решение задач

1. Имеются описания:

Var x, y:(winter, spring, summer, autumn);

НЕ нашли? Не то? Что вы ищете?

t:(cold, warm) ;

a) Допустимы ли присваивания:

x: = spring; t:=warm; t:=hot; у:=х; у:=t;

b) Вычислить, значения выражений:
spring < summer;

autumn < winter ;

Succ(spring);

Pred(autumn);

Ord(spring);

Winter <= summer ;

Spring <> warm;

Pred(spring);

Pred(cold);

Pred(autumn) + Ord(cold) ;

c) Допустим ли оператор цикла с заголовком
For х: = spring To autumn Do?

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

3. Даны описания следующих переменных:
Var m, ml: (January, February, march, April, may, June, July, august, September, October, November, December);

k: 1..maxint; n: 1..12;

Присвоить переменной ml:

a)  название месяца, следующего за месяцем m;

b)  название к-го месяца после месяца n.

4. В старояпонском календаре был принят 60-летний цикл, состоящий из пяти 12-летних подциклов. Подциклы обозначались названием цвета: зеленый, красный, желтый, белый и черный. Внутри каждого подцикла годы носили названия животных: крысы, коровы, титра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. Напишите программу, которая по номеру года определяет его название по старояпонскому календарю (1984-й — год Зеленой Крысы).

5. Дано неотрицательное число k, не превышающее десяти тысяч. Напечатать фразу "k ворон", подставив вместо k соответствующее числительное. (Пример: при k=23 должно быть напечатано "двадцать три вороны"; при k=3651 — "три тысячи шестьсот пятьдесят одна ворона".)

6. Имеются описания:

Var d:'0'..'9'; k:0..9; n: Integer;

a) Какие значения может принимать переменная d? Каков ее базовый тип? Допустимы ли присваивания: d: = 7; d: = 'a'; d:= 7?

b) Какие значения может принимать переменная k? Каков ее базовый тип? Допустимы ли присваивания: k:=5; k:=10; k:=-0; k:='5'?

c) Есть ли ошибки в операторе:

If k+n>7*k Then k:=abs(n) mod 10

Else d:=chr(k+Ord('0')?

7. Имеются описания переменных:
Var kl, k2; (north, east, south, west);

pr: (forward, right, back, left) ;

Корабль сначала шел по курсу kl, а затем его курс был изменен согласно приказу pr. Определить k2 — новый курс корабля.