procedure InitTask(num: integer);
begin
case num of
1..2: UseTask('ExamBegin', 70 + num);
3..4: Exam1(num - 2);
5..16: UseTask('ExamTaskC', 20 + num);
end;
end;
Необходимо также увеличить на 2 пятый параметр процедуры CreateGroup, определяющий общее количество заданий в группе (теперь это количество должно быть равно 16).
Для просмотра новых заданий в окне задачника надо заменить в параметре процедуры Task тестирующей программы символ "#" на "?": Task('ExamDemo?').
При нажатии клавиши [F9] мы увидим на экране окно задачника в демо-режиме, в котором можно выбрать и просмотреть все задания, включенные к настоящему моменту в нашу группу. Приведем вид окна для задания ExamDemo4 (напомним, что это задание инициализируется посредством вызова процедуры Exam1 с параметром, равным 2):

Добавление заданий повышенной сложности
Наша группа ExamDemo к настоящему моменту содержит 12 заданий повышенной сложности, импортированных из группы ExamTaskC. Все эти задания связаны с общей предметной областью; они содержат сведения об абитуриентах и включают их фамилии, номера школ и годы поступления в вузы. Для того чтобы проиллюстрировать некоторые особенности, связанные с разработкой подобных заданий, дополним набор уже имеющихся заданий двумя новыми заданиями из той же предметной области.
Новые задания будут связаны с группировкой абитуриентов по школам: для каждой школы надо найти связанный с ней минимальный (или максимальный) год поступления абитуриента. Второе из двух заданий мы усложним, дополнительно потребовав, чтобы полученные результаты были отсортированы по убыванию максимального года (а для одинаковых годов -- по возрастанию номера школы). Первое задание сделаем более простым: в нем результирующие данные надо располагать по возрастанию номеров школ.
При генерации наборов исходных данных нам потребуются не только числа (номера школ и годы поступления), но и строковые данные -- фамилии абитуриентов (хотя для выполнения этих заданий они не требуются). Проще всего определить массив возможных фамилий достаточно большого размера, из которого выбирать элементы случайным образом. Заметим, что в условии заданий не говорится о том, что все фамилии в исходном наборе должны быть различными, поэтому совпадения фамилий вполне допустимы (если в некоторой группе заданий все фамилии должны быть уникальными, то целесообразно дополнять их инициалами , чтобы обеспечить большее разнообразие; кроме того, для таких заданий при добавлении к набору исходных данных новой фамилии необходимо проверять, что среди уже имеющихся элементов набора отсутствует данная фамилия с теми же инициалами).
Добавим к нашей библиотеке вспомогательный массив фамилий из 40 элементов (обратите внимание на то, что по правилам языка PascalABC.NET между описанием массива и списком инициализирующих значений указывается знак присваивания):
const
famcount = 40;
var
fam: array[1..famcount] of string :=
('Иванов', 'Петров', 'Сидоров', 'Кузнецов', 'Филиппов',
'Сергеев', 'Александров', 'Петухов', 'Пономарев', 'Яшин',
'Греков', 'Иванова', 'Кузнецова', 'Алексеева', 'Зайцев',
'Волкова', 'Фролов', 'Юрьев', 'Бондарев', 'Семенов',
'Семенова', 'Федченко', 'Марченко', 'Борисова', 'Петровский',
'Беляева', 'Белкин', 'Лысенко', 'Сорокина', 'Пастухов',
'Юрьева', 'Кондратьев', 'Тимофеев', 'Степанова', 'Якимов',
'Юсов', 'Степанов', 'Руденко', 'Демидов', 'Леонидов');
Оба новых задания, как и два предыдущих, мы реализуем в виде одной процедуры с параметром m, принимающим значения 1 или 2:
procedure Exam2(m: integer);
var
n, i, y, num, max, k: integer;
a: array[1..100] of integer;
nums: array[1..10] of integer;
begin
CreateTask('Обработка сложных наборов данных');
case m of
1:
begin
TaskText('На вход подаются сведения об абитуриентах. В первой строке указывается',0,1);
TaskText('количество абитуриентов {N}, каждая из последующих {N} строк имеет формат',0,2);
TaskText('\(\M<���Год поступления> <���Фамилия> <���Номер школы>\m\)',0,3);
TaskText('Номер школы содержит не более двух цифр, годы лежат в диапазоне от 1990',0,4);
TaskText('до 2010. Для каждого номера школы, присутствующего в исходных данных,',0,5);
TaskText('определить связанный с ним минимальный год поступления (вначале указывать',0,0);
Читать дальше