- •Введение
- •1. Вычисление функций
- •Пояснения к программе
- •Пояснения к программе
- •2. Одномерные массивы
- •3. Матрицы
- •Пояснения к программе
- •4. Обработка текстов
- •Пояснения к программе
- •Пояснения к программе
- •5. Процедуры и функции
- •Пояснения к программе
- •Пояснения к программе
- •Пояснения к программе
- •6. Перечисляемый и диапазонный типы
- •Пояснения к программе
- •7. Записи
- •8. Множества
- •9. Файлы
- •10. Списки
- •Пояснения к программе
- •Пояснения к программе
- •Литература
- •Приложение 1 Комбинации клавиш управления в среде Turbo Pascal
- •Приложение 2 Сообщения об ошибках периода компиляции
- •1. Вычисление функций 5
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).