Тема: «Перечисляемый тип данных»
Тема: «Перечисляемый тип данных»
Этот тип данных получил название перечисляемого, потому что он задается в виде перечисления некоторых значений. Эти значения образуют упорядоченное множество и являются константами. Для объявления переменной список возможных значений, разделенных запятой, указывается в круглых скобках. Например,
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 — новый курс корабля.


