×
Traktatov.net » Описание языка PascalABC.NET » Читать онлайн
Страница 248 из 252 Настройки

>TaskText('\(\M<Год поступления> <Фамилия> <Номер школы>\m\)',0,3);

>TaskText('Номер школы содержит не более двух цифр, годы лежат в диапазоне от 1990',0,4);

>TaskText('до 2010. Для каждого номера школы, присутствующего в исходных данных,',0,5);

>TaskText('определить связанный с ним минимальный год поступления (вначале указывать',0,0);

>TaskText('номер школы, затем минимальный год). Сведения о каждой школе выводить',0,0);

>TaskText('на новой строке и упорядочивать по возрастанию номера школы.',0,0);

>k := 1;

>for i := 1 to 100 do

>a[i] := 2100;

>end;

>2:

>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);

>TaskText('максимальный год, затем номер школы). Сведения о каждой школе выводить',0,0);

>TaskText('на новой строке и упорядочивать по убыванию максимального года,',0,0);

>TaskText('а для совпадающих годов \= по возрастанию номера школы.',0,0);

>k := -1;

>for i := 1 to 100 do

>a[i] := 0;

>end;

>end;

>StartExam;

>if Random(2)=0 then

>n := RandomN(50, 100)

>else

>n := RandomN(10, 20);

>case CurrentTest of

>1: n := RandomN(10, 20);

>2: n := RandomN(50, 100);

>end;

>if n <= 20 then

>for i := 1 to 10 do

>nums[i] := RandomN(1, 100);

>writeln(f1,n);

>for i := 1 to n do

>begin

>y := RandomN(1990, 2010);

>if n <= 20 then

>num := nums[RandomN(1, 10)]

>else

>num := RandomN(1, 100);

>case m of

>1: writeln(f1, y, ' ', fam[RandomN(1, famcount)],' ', num);

>2: writeln(f1, num, ' ', fam[RandomN(1, famcount)],' ', y);

>end;

>if k*a[num] k*y then

>a[num] := y;

>end;

>case m of

>1: for i := 1 to 100 do

>if a[i] < 2100 then

>writeln(f2, i, ' ', a[i]);

>2: while true do

>begin

>max := 0;

>for i := 1 to 100 do

>if a[i] max then

>begin

>max := a[i];

>num := i;

>end;

>if max = 0 then

>break

>else

>begin

>writeln(f2, max, ' ', num);

>a[num] := 0;

>end;

>end;

>end;

>EndExam;

>SetTestCount(5);

>end;


Обсудим детали реализации этих заданий. Начальная часть их формулировки посвящена описанию предметной области и является стандартной для данной серии заданий. Обратите внимание на то, что поля исходных записей в заданиях указываются в различном порядке. Этот прием используется во всех сериях группы ExamTaskC, чтобы обеспечить большее разнообразие входящих в них задач.

При определении завершающей части формулировки заданий последний параметр процедур TaskText полагается равным 0. Это означает, что в режиме окна с фиксированной компоновкой данные строки при первоначальном отображении задания не видны на экране, однако их можно просмотреть, используя прокрутку раздела с формулировкой задания. В режиме с динамической компоновкой полный текст формулировки задания сразу отображается на экране.

В процедуре используются два массива: массив a предназначен для хранения контрольных (правильных) результатов, а массив nums является вспомогательным (его назначение описывается далее). Для хранения исходных данных массив не предусматривается, поскольку после генерации полей очередной записи они будут немедленно записываться в исходный файл и обрабатываться.