Читайте также:
|
|
В основе программы лежит обычный алгоритм поиска максимума, использование перечисляемых типов Club и Seson позволяет сделать программу наиболее удобочитаемой. Также легко реализуется пропуск января при подсчете очков. Единственная проблема состоит в том, что значения перечисляемого типа нельзя использовать в процедурах ввода и вывода. Поэтому для вывода клуба-победителя используется стандартный прием — вывод с применением оператора-варианта.
program Champion;
Type
Club = (Inter, Roma, Napoli, Juventus, 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('Наполи');
Juventus: 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).
Записи
7.1 Используя следующий фрагмент программы, опишите логическую функцию High (К1, К2: card; КМ: mast), проверяющую, «бьет» ли карта К1 карту К2, с учетом того, что масть КМ является козырной.
Type
mast = (piki, tref, bubi, chervi);
value = (six, seven, eight, nine, ten, jack, queen, king, ace);
card = record
m: mast;
d: value
end;
7.2 Используя следующий фрагмент программы, опишите перечисленные ниже функции:
Type
field = record
file: (а, b, с, d, e, f, g, h);
horizontal: 1.. 8
end;
а) функция ХодСлона(f1, f2) проверяет, находится ли фигура с поля f2 под боем у слона, который стоит на поле fl;
б) функция ХодЛадьи(f1, f2, f3) проверяет, может ли ладья за один ход перейти с поля fl шахматной доски на поле f2. Если нет, надо указать промежуточное поле f3, через которое ладья может попасть на поле f2 за два хода;
в) функция ХодКоня(f1, f2) проверяет, можно ли конем с поля f1 объявить шах, если король находится на поле f2;
г) функция ХодФерзя(f1, f2) проверяет, может ли ферзь за один ход перейти с поля fl шахматной доски на поле f2.
7.3 Используя следующий фрагмент программы, найдите самую длинную реку из списка и напечатайте ее название.
Type
river = record
name: string[25];
length: integer
end;
list = array [1..30] of river;
7.4 Используя описание костей домино с помощью типа Domino, проверьте, правильно ли выставлены кости домино в ряду A (равна ли правая цифра очередной кости левой цифре следующей кости).
Program Domino28;
Type
Domino = record
Left, Right: 0.. 6
end;
rank = array [1..28] of Domino;
Var
A: rank;
i, N: Integer;
f: Boolean;
Begin
Repeat
Writeln('Введите число костей');
readln(N)
Until N in [1..28];
for i:= 1 to N do
Begin
Repeat
Writeln('левое значение',i:3,'-ой кости');
Readln(A[i].Left)
Until A[i].Left in [0..6];
Repeat
Writeln('правое значение',i:3,'-ой кости');
Readln(A[i].Right)
Until A[i].Right in [0..6]
end;
f:= True;
for i:= 1 to N-1 do
if A[i].Right <> A[i+1].Left then
Begin
f:= False;
break
end;
Writeln('Введенный ряд');
for i:= 1 to N do
write(A[i].Left,':',A[i].Right,' ');
Writeln;
if f then Writeln('Правильный ряд')
else Writeln('Неправильный ряд')
End.
7.5 Используя следующий фрагмент программы, опишите перечисленные ниже функции:
Type
name = (Аня, Валя, Женя, Петя, Саша, Таня, Шура, Юра);
information = record
pol: (man, woman);
height: 140..200
end;
group = array [name] of information;
а) функция СредРост(ГР) определяет средний рост женщин из группы ГР;
б) функция Высокий(ГР) определяет имя самого высокого мужчины из группы ГР;
в) логическая функция ОдинРост(ГР) проверяет, есть ли в группе ГР хотя бы два человека одинакового роста.
7.6 Используя следующий фрагмент программы, опишите процедуру ИронияСудьбы(С), которая печатает фамилии двух (любых) жителей из списка С, живущих в разных городах по одному адресу.
Type
citizen = record
last_name, city: string[20];
address: record
street: string[20];
house, apartment: 1..999
End
end;
Var
list: array [1..15] of citizen;
7.7 Используя следующий фрагмент программы, опишите перечисленные ниже процедуры:
Type
data = record
number: 1..31;
month: 1..12;
year: 1901..1997
end;
form = record
last_name: string[20];
pol: (man, woman);
birthday: data
end;
group = array [1..25] of form;
a) процедура Старший(Гр, Фам) присваивает строке Фам фамилию самого старшего мужчины из группы Гр (считать, что такой есть и он единственный);
б) процедура Печать(Гр, Бук) печатает все фамилии людей из группы Гр, начинающиеся с литеры Бук, и даты рождения этих людей.
7.8 В массиве содержится информация о зимней сессии. Сведения о каждом студенте содержат следующие данные: фамилию (до 12 символов), номер группы (от 1 до 7), оценки по трем предметам (математика, физика и программирование). Напишите программу, которая вводит эту информацию и печатает следующие данные:
a) фамилии студентов, имеющих задолженность хотя бы по одному предмету;
б) процент студентов, сдавших все экзамены на 5 и 4;
в) название предмета, который был сдан лучше всего;
г) номера групп в порядке убывания средней успеваемости их студентов.
7.9 Сведения о студентах вуза записаны в массиве и содержит следующую информацию: фамилия, имя, отчество, пол (М или Ж), возраст (от 16 до 35), курс (от 1-го до 5-го). Напишите программу, которая вводит эту информацию и печатает следующие данные:
a) номер курса, на котором наибольший процент мужчин;
б) самые распространенные мужские и женские имена;
в) фамилии (в алфавитном порядке) и инициалы всех студенток, возраст и отчества которых являются одновременно самыми распространенными.
7.10 Используя следующий фрагмент программы, опишите перечисленные ниже подпрограммы:
Type
fraction = record
numerator: integer;
denominator: 1..maxint
end;
massif = array [1..20] of fraction;
а) логическая функция Равно(a, b) сравнивает два рациональных числа а и b;
б) процедура Слож(a, b) складывает рациональные числа а и b;
в) процедура Сокр(z) приводит рациональное число z к несократимому виду;
г) процедура Мах(x, m) присваивает параметру m наибольшее из рациональных чисел массива х.
7.11 Используя следующий фрагмент программы, опишите процедуры для вычисления значения квадратного трехчлена y = ах2 + bх + с в точке х, при условии, что a, b, c, x относятся к типу complex.
Type
complex = record
re, im: real
end;
7.12 Используя следующий фрагмент программы, опишите процедуры для преобразования координат точки на плоскости из декартовых координат в полярные и наоборот из полярных в декартовы.
Type
decart = record
x, y: real
end;
polyar = record
r, fi: real
end;
7.13 Используя следующий фрагмент программы и считая, что все даты даются по григорианскому календарю (в «новом стиле»), опишите перечисленные ниже функции:
Type
data = record
number: 1..31;
month: 1..12;
year: 1901..1997
end;
week = (пн, вт, ср, чт, пт, сб, вс);
a) функция ПослЧисло(d) вычисляет количество дней в том месяце, которому принадлежит дата d;
б) логическая функция ВернаяДата(d) проверяет правильность даты d;
в) функция ЧислоДней(d) подсчитывает, сколько дней прошло с 1 января 1-го года нашей эры до даты d;
г) функция ДеньНедели(d) предназначена для определения дня недели, на который приходится дата d (учтите, что 1 января 1-го года нашей эры было понедельником);
д) функция Пятница13 (d) определяет количество дней в году y, которые были пятницами 13-го числа.
7.14 Пусть дан массив, содержащий даты. Каждая дата — это число, месяц, год (см. описание типа data в предыдущем задании). Найти:
a) год с наименьшим номером;
б) все весенние даты;
в) самую позднюю дату.
7.15 Используя следующий фрагмент программы, найдите наибольшее расстояние (D) между точками, рассматривая элементы массива М как координаты точек на плоскости:
Type
Point = Record
х, у: Real
end;
Var
М: Array [1..40] of Point;
D: Real;
Дата добавления: 2015-07-08; просмотров: 466 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пояснения к программе | | | Множества |