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

6. Перечисляемый и диапазонный типы

6.1 По названию страны (переменная типа Country) присвоить переменной типа Capital название столицы этой страны.

Type

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

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

6.2 В следующем фрагменте программы по значению переменной Р (русское на­звание языка программирования) присвоить переменной А английское на­звание этого языка.

Var

Р : (Ада, Бейсик, Модула2, Лисп, Паскаль, ПЛ1, Фортран);

А : (ADA, BASIC, MODULA2, LISP, PASCAL, PL1, FORTRAN);

6.3 В следующем фрагменте программы по значению символа-цифры d присво­ить переменной n название этой цифры.

Type

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

Var

d : '0'..'5';

n : название;

6.4 В следующем фрагменте программы определите i — интервал, образованный нотами nl и n2 (nl ≠ n2), секунда — это интервал из двух соседних (по кругу) нот (например, ре и ми, си и до), терция — интервал через ноту (например, фа и ля, си и ре) и т. д.

Type

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

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

Var

nl, n2 : нота;

i : интервал;

6.5 В следующем фрагменте программы замените значение переменной х, озна­чающее некоторую длину в единицах р, значением в метрах.

Type

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

длина = real;

Var

х : длина;

р : единица;

6.6 В следующем фрагменте программы выведите название цвета, отвечающее значению переменной с.

Type

цвет = (черный, белый, синий);

Var

с : цвет;

6.7 В следующем фрагменте программы введите литеру и присвойте перемен­ной х соответствующее этой литере значение типа letter.

Type

letter = ( a, b, с, d );

Var

x : letter;

6.8 Для значений целого числа k от 1 до 99 напечатайте фразу «мне k лет», учи­тывая при этом, что при некоторых значениях k слово «лет» надо заменить словом «год» или «года».

6.9 Для натурального числа k напечатайте фразу «мы нашли k грибов в лесу», согласовав окончание слова «гриб» с числом k.

6.10 Написать программу для подведения итогов чемпионата Италии по футболу среди наиболее вероятных претендентов на победу. Условно будем считать, что чемпионат проходит с сентября по май с новогодними каникулами в январе. Исходными данными являются очки, набранные клубами за каждый месяц первенства. Будем считать, что победитель чемпионата определяется однозначно, т.е. только один клуб набирает максимальное количество очков.

Пояснения к программе

В основе программы лежит обычный алгоритм поиска максимума, использование перечисляемых типов Club и Seson позволяет сделать программу наиболее удобочитаемой. Также легко реализуется пропуск января при подсчете очков. Единственная проблема состоит в том, что значения перечисляемого типа нельзя использовать в процедурах ввода и вывода. Поэтому для вывода клуба-победителя используется стандартный прием — вывод с применением оператора-варианта.

program Champion;

Type

Club = (Inter, Roma, Napoli, Uventus, Fiorentina, Sampdoria, Milan);

Seson = (sep, oct, nov, dec, feb, mar, apr, may);

Var

V, Pr : Club; {клубы победитель и претендент}

Mes : Seson; {месяц футбольного чемпионата}

K, S, Max : Integer; {переменные для работы с очками}

Begin

Max := -1;

Writeln( 'Введите очки клубов');

{внешний цикл по клубам, для каждого клуба вводятся очки, набранные за сезон}

for Pr := Inter to Milan do

begin

Writeln( 'клуб №', ord( Pr ) + 1 :2 );

S := 0;

{внутренний цикл по месяцам}

for Mes := sep to may do

begin

Read( K );

S := S + K

end;

{поиск клуба с максимальным числом очков}

if S > Max then

begin

V := Pr;

Max := S

end

end;

{вывод клуба – чемпиона}

Write( 'Победитель чемпионата клуб ');

case V of

Inter : Write( 'Интер');

Roma : Write( 'Рома');

Napoli : Write( 'Наполи');

Uventus : Write( 'Ювентус');

Fiorentina: Write( 'Фиорентина');

Sampdoria : Write( 'Сампдория');

Milan : Write( 'Милан')

end;

Writeln( ' с результатом ', Max : 2, ' очков')

End.

6.11 В следующем фрагменте программы определите новый курс К2 корабля, если корабль сначала шел по курсу К1, а затем его курс был изменен согласно приказу ПР.

Type

курс = (СЕВЕР, ВОСТОК, ЮГ, ЗАПАД);

приказ = (ВПЕРЕД, ВЛЕВО, ВПРАВО, НАЗАД);

Var

Kl, К2 : курс;

ПР : приказ;

6.12 В следующем фрагменте программы переменной t присвойте значение true, если тройка у, m, d образует правильную дату, и значение false в противном случае (например, 31 июня и т. п.).

Type

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

Var

у : 1900..2000;

m : месяц;

d : 1..31;

t : boolean;

6.13 В следующем фрагменте программы по дате d, m, у определите дату следую­щего дня — dl, ml, yl.

Type

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

Var

d, dl : 1..31;

m, ml : месяц;

у : 1901..2000;

yl: 1901..2001;

6.14 Используя описания из предыдущего задания:

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

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

6.15 Пусть дан фрагмент программы:

Type

число = 1. .31;

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

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

Var

d : число;

m : месяц;

k : 0..12;

wdl, wd : день_недели;

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

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

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

6.16 Пусть значение функции f(n) равно количеству букв в записи числа n рус­скими словами f(l)=4 (один), f(3)=3 (три), f(42)=8 (сорок два) и т. п. Напеча­тайте все натуральные числа n, меньшие 100, для которых f(n)= n.

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

6.18 Напечатайте календарь заданного месяца 2005 года, зная, что 1 января 2005 го­да — суббота.

6.19 Пусть число записано римскими цифрами: М — 1000, D — 500, С — 100, L — 50, X — 10, V — 5, I — 1. Выведите его запись арабскими цифрами.

6.20 Пусть на шахматной доске заданы два поля: р1 и р2. Определите, какая из шахматных фигур при установке на поле р1 бьет фигуру, стоящую на поле р2. Координаты на шахматной доске определяются по горизонтали от а до h и по вертикали от 1 до 8. Белые фигуры двигаются от 8-й горизонтали к 1-й, а черные — от 1-й к 8-й.

6.21 По дате (месяц и день) рождения определите знак Зодиака (соответствие знаков Зодиака временным интервалам см. в задаче 4.41).