Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal_учебник_3.doc
Скачиваний:
33
Добавлен:
11.04.2015
Размер:
937.47 Кб
Скачать

9. Использование переменных перечисляемого типа

Перечисляемый тип (или перечислимый) описывается путем перечисления имен КОНСТАНТ, представляющих упорядоченное множество его значений.

Первая константа имеет порядковый номер 0, вторая - 1 и т.д.

Пример:

type

Color=(White,Red,Blue,Yellow,Purple,Green,Orange,Black);

Day =(Mon,Tue,Wed,Thu,Fri,Sat,Sun);

В перечислении все имена должны быть различными.

Пример неправильного описания:

type Workday=(Mon,Tues,Wed,Thur,Fri,Sat);

Free=(Sat,Sun);

В данном случае описание неверно, так как тип константы Sat определен неоднозначно.

Стандартный тип Boolean можно было бы описать так:

type Boolean=(false,true);

На множестве значений любого перечисляемого типа определе­ны все возможные операции отношения _, !=, <>, <, <=, >= и >. Необходимо, чтобы оба операнда относились к одному и тому же типу. Значения порядковых номеров констант определяются очередностью их записи при описании типа.

На множествах значений порядковых типов определены стан­дартные функции:

ord(X) - порядковый номер X, например ord(Blue)=2;

pred(X) - значение, предыдущее X, например pred(Blue)=Red;

succ(X) - значение, следующее за X, например succ(Blue)=Yellow.

Ввод и вывод значений переменных перечисляемого типа запрещен.

Следующая программа иллюстрирует некоторые операции над данными, относящимися к перечисляемому типу.

type

Color=(White,Red,Blue,Yellow,Purple,Green,Orange,Black);

var

C,C1,X,Y:Color;

i:integer;

begin

readln(i);

case i of { задание значения для С1 }

0 : C1:=White;

1 : C1:=Red

else C1:=Black

end;

for C:=Black downto C1 do

i:=i-1;

case C1 of { вывод значения С1 }

White : writeln('White');

Red : writeln('Red');

Black : writeln('Black')

end

end.

Задания

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

type Sezon=(Zima,Vesna,Leto);

var x,y:Sezon;

t:(Teplo,Holodno);

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

1) x:=ZimA; 2) y:=x; 3) y:=Vecna;

4) t:=Teplo; 5) y:=t; 6) t:=Jarko?

б) Вычислить значения выражений;

1) Vesna<Leto; 2) Zima<=Leto; 3) Osen<Zima;

4) Vesna<>Teplo; 5) succ(Vesna); 6) pred(Vesn);

7) succ(Osen); 8) pred(Holodno)

в) Вычислить значения выражений:

1) ord(Vesna); 2) ord(Leto)+ord(Holodno)

г) Допустим ли оператор цикла с заголовком

for x:=Zima to Leto do ?

д) Допустимы ли следующие операции ввода-вывода:

1) read(x); 2) write(Leto);

3) writeln('Зимой ',t)?

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

type Sezon=(Zima,Vesna,Leto,Osen);

Mesyc=(Jun,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,

Oct,Nov,Dec);

Var m:Mesyc; s:Sezon;

Написать программу для определения s - сезона, на который приходится месяц m.

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

type Edinica=(mm,sm,dm,m,km);

{мм, см, дм, м, км}

Dlina =real;

var x:Dlina; p:Edinica;

Написать программу, которая значение переменной x, означающей некоторую длину в единицах p, заменяет на величину этой же длины в метрах.

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

type Kurs = (S,V,U,Z); { север, восток, юг, запад }

Prikaz = (vpered,vpravo,nazad,vlevo);

var K1,K2:Kurs; Pr:Prikaz;

Корабль сначала шел по курсу K1, а затем его курс был изменен согласно приказу Pr. Определить K2 - новый курс корабля.

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

type Nota =(do,re,mi,fa,sol,lya,si);

Interval=(sekunda,terciya,kvarta,kvinta,sekta,septima);

var N1,N2:Nota; i:Interval;

Определить i-интервал, образованный нотами N1 и N2 (N1?N2). Секунда - это интервал из двух соседних (по кругу) нот (например, ре и ми, си и до), терция - интервал через ноту (например, фа и ля, си и ре) и т.д.

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