Вспомогательная функция, которая позволяет размещать по центру экранной строки набор из N элементов данных одинаковой ширины. Эта функция возвращает горизонтальную координату, начиная с которой следует выводить I-й элемент набора (I меняется от 1 до N) при условии, что ширина каждого элемента равна W позициям, а между элементами надо указывать B пробелов. Функция Center обычно используется в качестве параметра X в процедурах групп Data и Result при выводе однотипных наборов данных (в частности, элементов массива).
В качестве примера приведем фрагмент, обеспечивающий формирование и вывод в разделе исходных данных массива вещественных чисел:
n := RandomN(2, 10);
DataN('N = ', n, 0, 2, 1);
for i := 1 to n do
begin
a[i] := RandomR(-9.99, 9.99);
DataR(a[i], Center(i, n, 5, 1), 4, 5);
end;
Вначале (во второй строке области исходных данных) выводится размер N массива, определяемый с помощью датчика случайных чисел и принимающий значения в диапазоне от 2 до 10 (он снабжается комментарием N = "). Затем (в четвертой строке) выводятся сами элементы массива, причем благодаря использованию функции Center весь список выравнивается относительно центра экранной строки независимо от количества элементов. Целые части всех элементов лежат в диапазоне от -9 до 9, т. е. представляются одной цифрой, одна позиция отводится под знак числа, еще одна -- под отображение десятичного разделителя-точки; наконец, по умолчанию указываются два дробных знака, поэтому для каждого элемента следует выделить 5 экранных позиций; это число указывается дважды: как второй параметр функции Center и как последний параметр процедуры DataR. Промежуток между элементами полагается равным 1 экранной позиции (это последний, четвертый параметр функции Center).
При использовании функции Center строку комментария следует оставлять пустой (начиная с версии 4.11 конструктора, в этом случае строку комментария можно просто не указывать).
Начиная с версии 4.9 конструктора учебных заданий, для процедур групп Data и Result, в том числе DataComment и ResultComment, в качестве параметра Y разрешено указывать значение,
В задании запрещено использовать прокрутку раздела, если в нем уже имеется внешний" объект (файл или динамическая структура). Если делается попытка вызвать какую-либо процедуру с параметром Y, большим 5, для раздела, уже содержащего внешний объект, то выводится сообщение об ошибке "
Возможность прокрутки разделов исходных и результирующих данных добавлена, прежде всего, для использования в заданиях по параллельному программированию. Однако она может оказаться полезной и в других случаях, например, при использования в качестве исходных данных нескольких двумерных массивов или массива строк. Заметим, что ни в одном из 1300 заданий, входящих в базовый набор задачника Programming Taskbook, прокрутка разделов исходных и результирующих данных не используется. Большое количество заданий с прокруткой разделов исходных и результирующих данных содержится в группе Align, входящей в задачник по строковым алгоритмам биоинформатике Programming Taskbook for Bio.
В режиме окна с динамической компоновкой, появившемся в версии 4.11 задачника, раздельная прокрутка разделов не поддерживается, поэтому описанные в данном пункте возможности приводят в данном режиме лишь к увеличению высоты соответствующего раздела задания.
procedure UseTask(GroupName: string; TaskNumber: integer);