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

С учетом этих замечаний изменим основную процедуру группы InitTask следующим образом:


>procedure InitTask(num: integer);

>begin

>case num of

>1..2: UseTask('Begin', num);

>3: MakerDemo3;

>4: MakerDemo4;

>5: MakerDemo5;

>6: MakerDemo6;

>7: MakerDemo7;

>8: if CurrentLanguage and lgWithPointers <> 0 then

>MakerDemo8

>else

>MakerDemo8Obj;

>9: MakerDemo8Obj;

>end;

>end;


В этой процедуре используется функция CurrentLanguage, позволяющая определить текущий язык программирования, используемый задачником. Если текущий язык относится к категории языков, поддерживающих указатели (в том числе PascalABC.NET), то в качестве задания номер 8 вызывается процедура MakerDemo8, в которой задание формулируется в терминах указателей. В противном случае вызывается вариант задания, использующий объектную терминологию. При использовании языка PascalABC.NET число заданий в группе будет равно 9; при этом дополнительное задание номер 9 будет представлять собой объектный" вариант задания номер 8.

Функцию CurrentLanguage потребуется использовать и в начале процедуры inittaskgroup для того, чтобы правильно определить количество заданий в группе для разных языков программирования. Приведем фрагмент, на который надо заменить вызов процедуры CreateGroup и предшествующее ему ключевое слово begin (обратите внимание на то, что теперь в качестве предпоследнего параметра процедуры CreateGroup используется переменная n):


>var

>n: integer;

>begin

>n := 7;

>if CurrentLanguage = lgPascalABCNET then

>n := 9

>else

>if CurrentLanguage and (lgWithPointers or lgWithObjects) <> 0 then

>n := 8;

>CreateGroup('MakerDemo', 'Примеры различных задач',

>'М. Э. Абрамян, 2013', 'qwqfsdf13dfttd', n, InitTask);


Приведенный набор условий будет правильно определять количество заданий и в случае, если состав языков, поддерживаемых задачником, будет расширен. Это обеспечивается тем, что в условиях используются не константы для конкретных языков (за исключением константы lgPascalABCNET), а битовые маски lgWithPointers и lgWithObjects. Первая из этих масок включает все языки, для которых в задачнике можно использовать варианты заданий на динамические структуры, основанные на указателях, а вторая -- все языки, позволяющие использовать варианты аналогичных заданий в объектной терминологии.

В среде PascalABC.NET можно протестировать оба варианта реализованного задания. Приведем вид окна задачника для этого задания (первый рисунок соответствует варианту задания, использующему указатели, второй -- варианту, использующему объекты). Обратите внимание на кнопки, расположенные справа от формулировки задания и обеспечивающие ее прокрутку.

Завершая оформление модуля PT4MakerDemo, добавим комментарии к новым подгруппам заданий (указанные операторы следует поместить в конец процедуры inittaskgroup):


>Subgroup('Двумерные массивы (матрицы): вывод элементов');

>CommentText('Данное задание дублирует задание Matrix7.');


>Subgroup('Символьные и строковые файлы');

>CommentText('Данное задание дублирует задание File63.');

>CommentText('Оно демонстрирует особенности, связанные с двоичными');

>CommentText('\Iстроковыми\i файлами.');