233 lines
12 KiB
HTML
233 lines
12 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||
<param name="Keyword" value="">
|
||
</object>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||
<title></title>
|
||
<link rel="StyleSheet" href="../../default.css">
|
||
</head>
|
||
|
||
<body>
|
||
<H1>Модуль PT4TaskMakerNET: общее описание</H1>
|
||
<hr>
|
||
|
||
|
||
<H2>Назначение и состав конструктора учебных заданий</H2>
|
||
|
||
<p><i>Конструктор учебных заданий PT4TaskMaker</i> позволяет разрабатывать
|
||
новые группы заданий для электронного задачника Programming Taskbook.
|
||
</p>
|
||
<p>
|
||
Начиная с версии 4.11, новые группы заданий, доступные
|
||
для всех поддерживаемых задачником сред, можно
|
||
разрабатывать не только на языке Pascal, но и на языках C++ и C#, причем
|
||
конструктор для языка Pascal можно использовать и в среде PascalABC.NET.
|
||
Конструктор для среды PascalABC.NET реализован в виде модуля PT4TaskMakerNET.
|
||
</p>
|
||
<p>
|
||
Каждая группа учебных заданий оформляется в виде отдельной динамической библиотеки
|
||
(dll-файла). Dll-файлы с новыми группами могут находиться либо
|
||
в рабочем каталоге учащегося, либо в подкаталоге Lib системного каталога
|
||
задачника. Подключение новых групп происходит автоматически при инициализации
|
||
задания, поэтому вид проекта-заготовки при работе с новыми группами
|
||
не отличается от стандартного вида проекта, ориентированного на
|
||
базовые группы заданий. Кроме того, новые группы автоматически
|
||
добавляются в список доступных групп в программных модулях PT4Demo и PT4Load.
|
||
Созданные в виде dll-файлов новые группы заданий могут использоваться
|
||
не только в любых средах программирования, поддерживаемых универсальным вариантом задачника,
|
||
но и в среде PascalABC.NET; для этого достаточно разместить dll-файл в
|
||
подкаталоге PT4\Lib системного каталога PascalABC.NET или в рабочем каталоге учащегося.
|
||
</p>
|
||
|
||
|
||
<h2>Обзор элементов конструктора учебных заданий</h2>
|
||
<p>Конструктор учебных заданий представляет собой набор констант, функций и процедур,
|
||
предназначенных для определения каждого из входящих в группу заданий, а также для настройки свойств группы в целом.
|
||
</p>
|
||
<p>Ниже перечислены элементы, входящие в конструктор PT4TaskMaker:
|
||
</p>
|
||
<ul>
|
||
<li>процедурный тип <a href="tmaker_proc1.html#TInitTaskProc">TInitTaskProc</a>;
|
||
в библиотеке с группой заданий должна быть определена <i>основная процедура группы</i> типа TInitTaskProc,
|
||
позволяющая генерировать задание с требуемым номером;
|
||
<li>процедура CreateGroup, определяющая <a href="tmaker_proc1.html#CreateGroup">общие характеристики</a> группы заданий;
|
||
<li>процедуры и константы, используемые для <a href="tmaker_proc1.html#CreateTask">создания нового задания</a> и добавления в него
|
||
формулировки, а также исходных и контрольных данных базовых типов (логического, целочисленного,
|
||
вещественного, символьного строкового); обычно каждое задание оформляется в виде отдельной процедуры, которая вызывается
|
||
из основной процедуры группы;
|
||
<li>процедура <a href="tmaker_proc1.html#UseTask">UseTask</a>, позволяющая импортировать в создаваемую
|
||
группу задания из других групп; эта процедура обычно вызывается в основной процедуре группы;
|
||
<li>процедуры, обеспечивающие <a href="tmaker_proc1.html#CommentText">добавление комментариев</a>, оформляемых в виде <i>преамбулы</i> к группе и ее подгруппам;
|
||
<li>функции и константы, позволяющие определить <a href="tmaker_proc1.html#PT4State">текущее состояние задачника</a>
|
||
(используемый язык программирования, текущую <i>локаль</i>
|
||
— русскую или английскую —, текущую версию задачника, а также номер текущего тестового испытания программы,
|
||
выполняющей задание);
|
||
<li>функции, предоставляющие разработчику заданий <a href="tmaker_proc1.html#Sample">образцы слов, предложений и многострочных текстов</a>;
|
||
<li>процедуры, позволяющие включать в задание <a href="tmaker_proc2.html#File">файловые данные</a>;
|
||
<li>процедуры, позволяющие включать в задание <a href="tmaker_proc2.html#Dynamic">указатели и динамические структуры данных</a>
|
||
— линейные списки и деревья;
|
||
<li>процедуры для разработки заданий по <a href="tmaker_proc2.html#MPI">параллельному MPI-программированию</a>.
|
||
</ul>
|
||
|
||
<h2><a name="libr"></a>Библиотечные и сводные группы</h2>
|
||
|
||
<p>При разработке новых заданий целесообразно объединять их в группы с именами, содержащими, кроме названия темы, дополнительные
|
||
сведения, например, версию созданной группы и данные об авторе. Однако допустимые имена групп могут содержать
|
||
не более 9 символов, что является недостаточным для указания дополнительных сведений.
|
||
С другой стороны, группы, содержащие только новые задания (<i>библиотечные группы</i>), вряд ли будут использоваться
|
||
непосредственно в учебном процессе; более целесообразной будет компоновка этих новых заданий с заданиями из соответствующей базовой группы
|
||
задачника (и, возможно, с заданиями из других библиотечных групп).</p>
|
||
|
||
<p>Поэтому при разработке группы, содержащей исключительно новые задания (<i>библиотечной группы</i>, или <i>библиотеки заданий</i>)
|
||
разрешено указывать имя длины более 9 символов (но не более 25).
|
||
</p>
|
||
|
||
<p>Библиотечные группы не предназначены для непосредственного использования в учебном процессе. Задания из этих групп
|
||
можно запускать с помощью процедуры Task,
|
||
однако они будут отображаться только в <i>демонстрационном режиме</i> (точнее, в режиме «просмотра библиотеки заданий»,
|
||
о чем будет свидетельствовать соответствующий текст, указываемый в окне задачника вместо сведений об учащемся).
|
||
Библиотечные группы не включаются в список групп, отображаемый в модуле PT4Load, однако доступны
|
||
для просмотра с помощью модуля PT4Demo (в этом модуле библиотечные группы указываются в конце
|
||
списка групп).
|
||
</p>
|
||
|
||
<p>Для применения на занятиях удобно использовать <i>сводные группы</i>, не содержащие реализации новых заданий,
|
||
а лишь импортирующие наборы заданий из базовых и дополнительных библиотечных групп и компонующие их в порядке, который требуется преподавателю.
|
||
При импортировании задания из другой группы у него изменяется название и ключ
|
||
(которые берутся из характеристик сводной группы), однако сохраняются такие характеристики импортируемой группы, как
|
||
<a href="tmaker_proc1.html#CommentText">заголовки подгрупп</a> и сведения об авторе.
|
||
Имена сводных групп должны содержать не более 9 символов.
|
||
</p>
|
||
|
||
|
||
<h2><a name="structure"></a>Структура проекта с описанием группы заданий</h2>
|
||
|
||
|
||
<p>В данном разделе описываются правила, которым должен удовлетворять проект (dll-библиотека),
|
||
содержащий описание новой группы заданий (см. также раздел «<a href="tmaker_samples.html">Примеры</a>»).
|
||
</p>
|
||
<p>Каждый проект, реализуемый в виде dll-библиотеки, должен содержать определение <i>единственной</i> группы заданий.
|
||
Имя библиотеки с группой заданий должно иметь вид <code>PT4</code><<i>имя группы</i>><<i>маркер локали</i>>,
|
||
где <<i>маркер локали</i>> является либо пустой строкой, либо имеет вид <code>_ru</code> или <code>_en</code>.
|
||
Например, группа TMDemoPas может быть реализована в виде библиотек PT4TMDemoPas.dll, PT4TMDemoPas_ru.dll
|
||
и PT4TMDemoPas_en.dll. Библиотеки с явно указанным маркером локали используются только в
|
||
варианте задачника, соответствующем данной локали (ru — в русском варианте задачника,
|
||
en — в английском). Библиотеки, в которых не указан маркер локали, используются в любом
|
||
варианте задачника (если они не перекрываются библиотекой с явно указанной локалью).
|
||
Порядок поиска библиотек для требуемой группы следующий: вначале просматривается <i>рабочий каталог учащегося</i>
|
||
и в нем ищется библиотека с данным именем и явно указанной локалью; если она не найдена,
|
||
то ищется библиотека с данным именем без маркера локали; если она не найдена, то
|
||
поиск библиотек (в этом же порядке) выполняется в <i>каталоге Lib системного каталога задачника</i>.
|
||
</p>
|
||
|
||
<p>Проект с описанием новой группы должен иметь определенную структуру.
|
||
Приведем описание структуры проекта, который реализуется
|
||
на языке Pascal в среде PascalABC.NET:
|
||
</p>
|
||
|
||
<pre>library PT4MakerDemo;
|
||
|
||
uses PT4TaskMakerNET;
|
||
|
||
// процедуры, реализующие конкретные задания
|
||
...
|
||
|
||
procedure InitTask(num: integer);
|
||
begin
|
||
// в данной процедуре выполняются вызовы вспомогательных процедур,
|
||
// реализующих все задания группы; номер задания определяется
|
||
// параметром num; для определения процедуры, соответствующей
|
||
// требуемому номеру, обычно используется оператор case
|
||
...
|
||
end;
|
||
|
||
procedure inittaskgroup;
|
||
begin
|
||
// вспомогательная процедура, в которой выполняется вызов стартовой
|
||
// процедуры CreateGroup и могут вызываться процедуры, связанные
|
||
// с добавлением комментариев (преамбул) для группы и ее подгрупп.
|
||
// Все буквы в ее имени должны быть строчными
|
||
|
||
CreateGroup('TMDemoAbc', 'Примеры различных задач (конструктор для языка PascalABC.NET)',
|
||
'М. Э. Абрамян, 2013', 'qwqfsdf13dfttd', 8, InitTask);
|
||
...
|
||
end;
|
||
|
||
procedure activate(S: string);
|
||
begin
|
||
// вспомогательная процедура, используемая при подключении библиотеки
|
||
// к задачнику. Все буквы в ее имени должны быть строчными
|
||
|
||
ActivateNET(S);
|
||
end;
|
||
|
||
begin
|
||
end.
|
||
</pre>
|
||
|
||
<p>При определении новой группы заданий можно учитывать <i>текущий язык программирования</i>,
|
||
установленный для задачника, и в зависимости от этого языка по-разному инициализировать
|
||
некоторые задания группы. Эта возможность является особенно полезной при реализации
|
||
заданий, связанных с обработкой динамических структур данных, поскольку в языках Visual Basic и 1C
|
||
подобные задания должны быть недоступны, а в языках Pascal и C++ они должны оформляться по-другому, нежели в
|
||
языках платформы .NET, Python и Java. См. также <a href="tmaker_samples.html#dynamic">пункт, посвященный динамическим структурам данных</a>, в разделе «Примеры».
|
||
</p>
|
||
|
||
<p>Разрабатываемые группы заданий желательно снабжать <i>дополнительными комментариями</i>. Эти комментарии не отображаются
|
||
в окне задачника, однако включаются в html-описание группы в виде <i>преамбулы группы</i> (html-описание
|
||
группы можно создать, либо вызвав в программе
|
||
процедуру Task с параметром вида '<<i>имя группы</i>>#', например, <code>'TMDemoAbc#'</code>, либо воспользовавшись
|
||
кнопкой <img src="images\demo_3.png"> в окне среды PascalABC.NET.
|
||
Кроме того, большие группы заданий целесообразно разделять на
|
||
несколько подгрупп, в каждую из которых также можно добавлять комментарии (<i>преамбулы подгрупп</i>). В преамбулах, как
|
||
и в формулировках заданий, можно использовать специальные <a href="tmaker_format.html">управляющие последовательности</a>,
|
||
которые позволяют отформатировать текст требуемым образом
|
||
(в частности, обеспечивают выделение переменных, позволяют
|
||
использовать в тексте верхние и нижние индексы, специальные символы и т. д.). Форматирование
|
||
используется и при отображении формулировки задания в окне задачника, и при генерации
|
||
html-страницы с описанием группы заданий.
|
||
См. также <a href="tmaker_samples.html#comments">пункт,
|
||
посвященный добавлению комментариев</a>, в разделе «Примеры».
|
||
</p>
|
||
|
||
|
||
<h2><a name="debug"></a>Настройка проектов для языка PascalABC.NET и особенности их отладки</h2>
|
||
<p>Для разработки новой группы заданий в среде PascalABC.NET
|
||
достаточно подготовить pas-файл с именем, совпадающим с именем
|
||
создаваемой библиотеки, и структурой, описанной в
|
||
пункте <a href="#structure">«Структура проекта с описанием группы заданий»</a>.
|
||
Для данного файла должен быть доступен модуль PT4TaskMakerNET; он может размещаться
|
||
в этом же каталоге или в подкаталоге Lib системного каталога среды PascalABC.NET.
|
||
</p>
|
||
<p>При нажатии клавиши [F9] будет создана динамическая библиотека с новой группой заданий.
|
||
</p>
|
||
<p>Поскольку в среде PascalABC.NET
|
||
не предусмотрены средства для определения главного приложения при разработке библиотек,
|
||
для тестирования новой группы заданий необходимо использовать еще одно приложение, заготовку
|
||
для которого можно создать с помощью программного модуля PT4Load
|
||
уже после первой успешной компиляции динамической библиотеки. Впрочем, заготовка является
|
||
настолько простой, что ее можно создать и непосредственно. Например, для тестирования
|
||
группы с именем TMDemoAbc достаточно воспользоваться следующей программой:
|
||
</p>
|
||
<pre>uses PT4;
|
||
begin
|
||
Task('TMDemoAbc1?');
|
||
end.
|
||
</pre>
|
||
<p>При запуске этой программы на экран будет выведено окно задачника для группы
|
||
TMDemoAbc в демонстрационном режиме, причем в качестве текущего будет выбрано
|
||
первое задание данной группы (демонстрационный режим устанавливается благодаря
|
||
символу «?», указанному после имени задания). Для отображения в окне задачника
|
||
сразу после запуска программы другого существующего задания этой группы достаточно
|
||
указать его номер в параметре процедуры Task. Можно также удалить номер, указав
|
||
символ «?» сразу после имени группы заданий: <code>Task('TMDemoAbc?')</code>.
|
||
В этом случае при запуске программы будет отображаться <i>последнее</i> задание, входящее в группу.
|
||
</p>
|
||
|
||
|
||
</body>
|
||
|
||
</html>
|