pascalabcnet/PABCNetHelp/ForEducation/MakeModules/tmaker_main.html

233 lines
12 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>
&#151; русскую или английскую &#151;, текущую версию задачника, а также номер текущего тестового испытания программы,
выполняющей задание);
<li>функции, предоставляющие разработчику заданий <a href="tmaker_proc1.html#Sample">образцы слов, предложений и многострочных текстов</a>;
<li>процедуры, позволяющие включать в задание <a href="tmaker_proc2.html#File">файловые данные</a>;
<li>процедуры, позволяющие включать в задание <a href="tmaker_proc2.html#Dynamic">указатели и динамические структуры данных</a>
&#151; линейные списки и деревья;
<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> (точнее, в режиме &laquo;просмотра библиотеки заданий&raquo;,
о чем будет свидетельствовать соответствующий текст, указываемый в окне задачника вместо сведений об учащемся).
Библиотечные группы не включаются в список групп, отображаемый в модуле PT4Load, однако доступны
для просмотра с помощью модуля PT4Demo (в этом модуле библиотечные группы указываются в конце
списка групп).
</p>
<p>Для применения на занятиях удобно использовать <i>сводные группы</i>, не содержащие реализации новых заданий,
а лишь импортирующие наборы заданий из базовых и дополнительных библиотечных групп и компонующие их в порядке, который требуется преподавателю.
При импортировании задания из другой группы у него изменяется название и ключ
(которые берутся из характеристик сводной группы), однако сохраняются такие характеристики импортируемой группы, как
<a href="tmaker_proc1.html#CommentText">заголовки подгрупп</a> и сведения об авторе.
Имена сводных групп должны содержать не более 9 символов.
</p>
<h2><a name="structure"></a>Структура проекта с описанием группы заданий</h2>
<p>В данном разделе описываются правила, которым должен удовлетворять проект (dll-библиотека),
содержащий описание новой группы заданий (см. также раздел &laquo;<a href="tmaker_samples.html">Примеры</a>&raquo;).
</p>
<p>Каждый проект, реализуемый в виде dll-библиотеки, должен содержать определение <i>единственной</i> группы заданий.
Имя библиотеки с группой заданий должно иметь вид <code>PT4</code>&lt;<i>имя группы</i>&gt;&lt;<i>маркер локали</i>&gt;,
где &lt;<i>маркер локали</i>&gt; является либо пустой строкой, либо имеет вид <code>_ru</code> или <code>_en</code>.
Например, группа TMDemoPas может быть реализована в виде библиотек PT4TMDemoPas.dll, PT4TMDemoPas_ru.dll
и PT4TMDemoPas_en.dll. Библиотеки с явно указанным маркером локали используются только в
варианте задачника, соответствующем данной локали (ru &#151; в русском варианте задачника,
en &#151; в английском). Библиотеки, в которых не указан маркер локали, используются в любом
варианте задачника (если они не перекрываются библиотекой с явно указанной локалью).
Порядок поиска библиотек для требуемой группы следующий: вначале просматривается <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>, в разделе &laquo;Примеры&raquo;.
</p>
<p>Разрабатываемые группы заданий желательно снабжать <i>дополнительными комментариями</i>. Эти комментарии не отображаются
в окне задачника, однако включаются в html-описание группы в виде <i>преамбулы группы</i> (html-описание
группы можно создать, либо вызвав в программе
процедуру Task с параметром вида '&lt;<i>имя группы</i>&gt;#', например, <code>'TMDemoAbc#'</code>, либо воспользовавшись
кнопкой <img src="images\demo_3.png"> в окне среды PascalABC.NET.
Кроме того, большие группы заданий целесообразно разделять на
несколько подгрупп, в каждую из которых также можно добавлять комментарии (<i>преамбулы подгрупп</i>). В преамбулах, как
и в формулировках заданий, можно использовать специальные <a href="tmaker_format.html">управляющие последовательности</a>,
которые позволяют отформатировать текст требуемым образом
(в частности, обеспечивают выделение переменных, позволяют
использовать в тексте верхние и нижние индексы, специальные символы и т.&nbsp;д.). Форматирование
используется и при отображении формулировки задания в окне задачника, и при генерации
html-страницы с описанием группы заданий.
См. также <a href="tmaker_samples.html#comments">пункт,
посвященный добавлению комментариев</a>, в разделе &laquo;Примеры&raquo;.
</p>
<h2><a name="debug"></a>Настройка проектов для языка PascalABC.NET и особенности их отладки</h2>
<p>Для разработки новой группы заданий в среде PascalABC.NET
достаточно подготовить pas-файл с именем, совпадающим с именем
создаваемой библиотеки, и структурой, описанной в
пункте <a href="#structure">&laquo;Структура проекта с описанием группы заданий&raquo;</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 в демонстрационном режиме, причем в качестве текущего будет выбрано
первое задание данной группы (демонстрационный режим устанавливается благодаря
символу &laquo;?&raquo;, указанному после имени задания). Для отображения в окне задачника
сразу после запуска программы другого существующего задания этой группы достаточно
указать его номер в параметре процедуры Task. Можно также удалить номер, указав
символ &laquo;?&raquo; сразу после имени группы заданий: <code>Task('TMDemoAbc?')</code>.
В этом случае при запуске программы будет отображаться <i>последнее</i> задание, входящее в группу.
</p>
</body>
</html>