<���Номер школы> <���Год поступления> <���Фамилия>
Номер школы содержит не более двух цифр, годы лежат в диапазоне от 1990 до 2010. Для каждого года, присутствующего в исходных данных, вывести общее число абитуриентов, поступивших в этом году (вначале выводить год, затем число абитуриентов). Сведения о каждом годе выводить на новой строке и упорядочивать по возрастанию номера года.
Программа-заготовка, созданная для этого задания, подобно заготовкам для заданий группы ExamBegin, будет использовать специальный модуль PT4Exam:
usesPT4Exam;
begin
Task('ExamTaskC25');
end.
При запуске этой программы на экране появится окно задачника, содержащее следующие данные:
Окно будет иметь такой вид, если при его предшествующем закрытии оно находилось в режиме отображения всех данных. Для отображения всех данных на экране может потребоваться увеличить высоту окна; для этого достаточно зацепить мышью заголовок окна и переместить его вверх (для перемещения заголовка окна задачника вверх и вниз можно также воспользоваться клавиатурными комбинациями Ctrl+Upи Ctrl+Down).
При первом тестовом испытании программы ей будет предложен для обработки набор данных не слишком большого размера (порядка 10-20 элементов).
Вначале следует определиться со структурами данных, которые будут использоваться в программе. Поскольку требуется найти одну характеристику для каждого года, а число лет невелико, можно использовать числовой массив year, каждый элемент которого соответствует определенному году. Так как в языке Pascal можно использовать произвольные границы индексов, удобно в качестве диапазона индексов указать диапазон лет, который требуется проанализировать: 1990..2010. В начале программы выполним инициализацию элементов массива, положив их значения равными 0 (заметим, что если после обработки исходных данных некоторые элементы массива year останутся нулевыми, то это будет означать, что соответствующие годы не были представлены в наборе исходных данных, и выводить информацию о них не следует).
После инициализации массива следует прочесть информацию о количестве абитуриентов и организовать цикл, в котором будут обрабатываться данные о каждом абитуриенте и соответствующим образом корректироваться элементы массива year. В дальнейшем сведения об уже обработанном абитуриенте нам не будут нужны, поэтому сохранять их в специальном наборе данных (например, массиве) не требуется. Заметим также, что фамилия абитуриента для решения задачи не требуется, поэтому после чтения двух числовых данных можно сразу переходить к новой строке, пропуская строковый элемент данных (фамилию). В задаче не нужно использовать и номера школ, однако их придется считывать, так как только после номера школы указывается интересующий нас год поступления абитуриента.
Когда данные обо всех абитуриентах будут обработаны, в массиве year будет содержаться вся необходимая информация, которую останется вывести в формате, указанном в условии задачи.
Приведем первый вариант решения (этот вариант содержит одну ошибку):
usesPT4Exam;
var
n, i, k, m: integer;
year: array[1990..2010] of integer;
begin
Task('ExamTaskC25');
fori := 1990 to2010 do
year[i] := 0;
readln(n);
fori := 1 ton do
begin
readln(k, m); { k - номер школы, m - год поступления }
Inc(year[m]);
end;
fori := 1990 to2010 do
writeln(i, ' ', year[i]);
end.
Ошибка связана с тем, что на экран выводится информация о годах, отсутствующих в наборе исходных данных. Поэтому она сразу будет выявлена при обработке наборов данных небольшого размера, предлагаемых программе при первом тестовом запуске (для большей наглядности приведем окно задачника в режиме сокращенного отображения данных, при котором выводятся только пять первых элементов из каждого набора данных):
Для исправления ошибки достаточно добавить в последний цикл условный оператор:
fori := 1990 to2010 do
Читать дальше