top of page

Лабораторная работа № 5

 

Тема: Решение задач на работу с перечисляемым типом

 

Цель работы: Закрепить на практике понятие перечисляемого и ограниченного типов.

 

Теория.

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

Перечисляемый тип - это тип, составленный из множества упорядоченных элементов. При определении перечисляемого типа перечисляются все значения, которые может принимать переменная этого типа. Создаваемый перечисляемый тип определяется в разделе типов ТУРЕ:

<имя типа>=(значение1, значение2,…, значение n);

<имя типа> - имя типа, определяемого программистом;

( значение 1,...; значение п) являются константами определяемого типа. Переменные перечисляемого типа в программе могут принимать только перечисленные в скобках значения. Значения перечисляемого типа считаются пронумерованными, начиная с нуля, в порядке их перечисления.

К примеру, определим тип «дни недели»:

Type day_of_week=(mon,tue,wed,thu,fri,sat,sun); Затем в разделе описаний опишем переменные типа day_of_week:

Var day: day_of_week;

Теперь этой переменной day можно присваивать значения, перечисленные в скобках в описании типа.

Над значениями перечисляемого типа определены только операции сравнения и функции SUCC, PRED, ORD.

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

Переменные перечисляемого типа можно использовать в управляющих структурах.(IF, FOR ...). Например:

If day=sat then {действия для субботы}; For day :=mon to sun do {тело цикла}

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

Ограниченные типы данных могут принимать значения в заданном диапазоне значений. Ограничение диапазона задается указанием минимального и максимального диапазона:

<мин.значение>.. <макс.значение>

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

Var i: 1 ..100;

simvol: 'a’..'z';

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

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

Пример

Определить является ли день недели рабочим днем. PROGRAM PRIMER;

TYPE

WEEK = (monday, tuesday,friday,sunday);

VAR  DAY: WEEK;

BEGIN

DAY:= Tuesday;

IF DAY= sunday

WRITELN(‘ выходной день') ELSE

WRITELN(‘ рабочий день'); END.

 

Задание 1.

 

Вариант 1.  Имеются следующие описания:

type месяц=(янв, фев, март, апр, май, июн, июл, авг, сен, окт, ноя, дек);

 день = 1..31;

var d1,d2:день; ml, m2:месяц; t:boolean;

Переменной t присвоить значение true, если дата dl,ml предшествует (в рамках года ) дате d2,m2, и значение false иначе.

Вариант 2. Имеются следующие описания:

type месяц=(янв, фев, март, апр, май, июн, июл, авг, сен, окт, ноя, дек);

var m, m1:месяц;

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

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

а) название месяца , следующего за месяцем т (с учетом того, что за декабрем идет январь);

б) название k-го месяца после месяца т;  в) название п-го месяца года .

Вариант 3.  Имеются следующие описания:

type страна=(Австрия, Болгария, Греция, Италия, Норвегия, Франция, ФРГ);

столица=(Вена, София ,Афины, Рим , Осло, Париж, Бон);

 var st: страna; cap: столица;

По значению переменкой st (названию страны ) присвоить переменной cap название столицы этой страны .

Вариант 4.  Имеются следующие описания:

var Р:(ада, бейсик , модула2, лисп ,паскаль,пл1, фортран);

A:(ada, basic,modula2,lisp,paskal, pll,fortran);

По Р - русскому названию языка программирования присвоить переменной А английское название.

Вариант 5.  Имеются следующие описания:

type название = (ноль, один, два, три, четыре, пять);

var :d:'0’..'5'; n:название;

По литере -цифре d присвоить переменной п название этой цифры,

Вариант 6.  Имеются следующие описания:

type нота = (до, ре, ми, фа, соль, ля, си);

интервал=(секунда, терция, кварта, квинта, секста, септима);

 var n 1 ,n2: нота: i: интервал:

Определить i-интервал, образованный нотами nl и n2(nl  <>  n2 );  секунда-это интервал из двух соседних (по кругу) нот (например, ре и ми, си и до),терция-интервал через ноту (например, фа и ля, си и ре) и т.д.

Вариант 7. Имеются следующие описания:

 type сезон = (зима, весна, лето, осень);

месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);

var m: месяц; s: сезон;

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

Вариант 8.       Имеются следующие описания:

type страна = (ГДР, Куба, Лаос, Монако, Непал, Польша );

континент = (Азия, Америка, Европа);

var s: страна; с: континент;

По s- названию страны определить с- название ее континента.

Вариант 9.       Имеются следующие описания:

type единица - (дециметр,  километр,  метр,  миллиметр, сантиметр);

длина = real;

var s: страна; р: единица;

Значение переменной х. означающее некоторую длину в единицах р, заменить на величину этой же длины в метрах.

Вариант 10.     Имеются следующие описания:

type падеж = ( им , род, дат, вин, твор, предл );

слово - ( степь, боль, тетрадь, дверь);

 var  w: слово; р: падеж;

Напечатать слово w в падеже р и единственном числе (например, при w=степь и р = твор надо напечатать слово степью ).

Вариант 11.     Имеются следующие описания:

type курс - ( С, В, Ю, 3,); { север, восток, юг, запад }

приказ = ( вперед, вправо, назад, влево );

 var   K1,K2: курс;

         ПР: приказ;

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

Вариант 12.     Имеются следующие описания:

var  d:28..31;   .

       m: месяц;

Переменной d присвоить количество дней в месяце т ( год считать невисокосным ).

Вариант 13.     Имеются следующие описания:

var у: 1901..2000;

      m: месяц; d: 1..31;

      t: boolean;

Переменной t присвоить значение true, если тройка у, т, d образует правильную дату, и значение false - иначе ( при 31 июня и т.п.).

Вариант 14.     Имеются следующие описания:

var  d,dl: 1..31; m, ml: месяц;

       у: 1901..2000;yl: 1901..2001;

По дате d, т, у определить d1, m1, yl - дату следующего дня.

Вариант 15.     Имеются следующие описания:

var k: 1.366; d: 1..31; m: месяц;

а) Определить k - порядковый номер того дня високосного года, который имеет дату d, m;

б) Определить d, m - дату k-то по счету дня високосного года.

Вариант 16.     Имеются следующие описания:

type число = 1..31;

месяц = ( янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);

день__недели ~ ( вс, пн, вт, ср, чт, пт, сб );

var d: число; m: месяц; wdl, wd: день недели;

       k: 0..12;

Считая, что год невисокосный и его 1 января приходится на день недели wdl определить:

а) wd- день недели, на который приходится день с датой d, m;

б) k- количество понедельников в году, приходящихся на 13-е числа.

 

Контрольные вопросы

1. Что такое перечислимый тип?

2. Какие операции допускаются с данными перечислимого типа?

3. Какие стандартные функции можно использовать для данных перечислимого типа?

4. Что такое ограниченный тип?

5. Может ли быть последующее значение больше предыдущего при определении

ограниченного типа?

6. Какие операции допускаются над переменными ограниченного типа?

bottom of page