Разработка проверяемых учебных заданий в системе PascalABC.NET
М.Э. Абрамян, доцент факультета математики, механики и компьютерных наук Южного федерального университета,
таЬг@таЛ. sfedu.ru
С.С. Михалкович, доцент факультета математики, механики и компьютерных наук Южного федерального университета,
В докладе рассматриваются средства системы программирования PascalABC.NET, предназначенные для разработки наборов проверяемых учебных заданий.
1. Проверяемые задания и их использование в системе PascalABC.NET
Концепция проверяемых заданий в настоящее время широко распространена. Ее суть состоит в том, что компьютерная система передает набор исходных данных программе, выполняющей учебное задание, и получает от нее результаты, которые проверяет путем сравнения с заранее подготовленными контрольными данными. Следует, однако, заметить, что большинство компьютерных систем, применяющих эту концепцию, ориентировано на окончательную проверку уже разработанных программ (типичным примером могут служить системы, используемые при проведении олимпиад по программированию).
В системе программирования PascalABC.NET [1] концепция проверяемых заданий используется для того, чтобы сделать более быстрым и эффективным сам процесс разработки программ, выполняющих задания. Система PascalABC.NET берет на себя часть функций, связанных с тестированием и отладкой программы, оставляя на долю учащегося главное: реализацию алгоритма решения. Кроме предоставления программе исходных данных и проверки результатов, выполняется также дополнительная проверка правильности операций ввода-вывода и обеспечивается наглядное отображение всей информации, связанной с учебным заданием.
Опыт использования системы PascalABC.NET свидетельствует, что обучение программированию с помощью проверяемых заданий, сочетаемое с другими методиками (обучение на примерах, поиск ошибок в программах, ручная и автоматическая трассировка), позволяет существенно ускорить сам процесс обучения и облегчить труд преподавателя.
Для реализации концепции проверяемых заданий в систему PascalABC.NET были интегрированы школьные исполнители Робот и Чертежник, а также электронный задачник Programming Taskbook [2], включающий как задания по основам программирования (скалярные типы данных, управляющие операторы, использование процедур и функций), так и задания, связанные с обработкой массивов, строк, файлов, динамических структур данных, а также задания на разработку рекурсивных алгоритмов. Следует отметить, что задачник Programming Taskbook может использоваться совместно с различными средами программирования [3], однако его интеграция с системой PascalABC.NET является наиболее полной.
Большое количество проверяемых учебных заданий, доступных для выполнения в PascalABC.NET (340 заданий для исполнителей Робот и Чертежник, 1100 заданий из задачника Programming Taskbook), позволяет использовать при групповом обучении систему индивидуальных наборов заданий.
Однако, несмотря на большое количество встроенных заданий, многие преподаватели, ознакомившись с системой PascalABC. NET, отмечали, что им хотелось бы иметь инструмент, позволяющий разрабатывать новые задания. Поэтому в состав системы PascalABC.NET был включен набор конструкторов учебных заданий. С использованием этих конструкторов можно создавать новые группы заданий для исполнителей Робот, Чертежник, а также для задачника Programming Taskbook; при этом каждая новая группа заданий оформляется в виде обычного модуля языка Pascal. Откомпилированные модули с новыми группами заданий можно размещать либо в специальном подкаталоге Lib системного каталога PascalABC.NET, либо непосредственно в рабочем каталоге учащегося; после этого работа учащихся с этими группами не будет отличаться от работы со встроенными заданиями. В частности, для новых заданий можно автоматически генерировать программы-заготовки с помощью специального программного модуля-«эксперта» PT4Load, интегрированного в систему PascalABC.NET.
2. Конструкторы учебных заданий, связанные
с исполнителями Робот и Чертежник
Конструкторы для исполнителей Робот и Чертежник реализованы в виде модулей RobotTaskMaker и DMTaskMaker. Каждый из них содержит набор процедур, позволяющих полностью описать новое задание для соответствующего исполнителя. В обоих модулях имеются процедуры одинакового назначения: процедура Field определяет размер поля, на котором будет действовать исполнитель; процедура TaskText задает формулировку задания (в виде текстовой строки); процедура RegisterTask связывает процедуру, инициализирующую задание, с тек-
стовой строкой — именем этого задания. Имеется также процедура RegisterGroup, которая позволяет зарегистрировать новую группу заданий в программном модуле PT4Load, что в дальнейшем позволит учащемуся автоматически создавать программы-заготовки для выполнения заданий из этой группы.
Прочие процедуры модулей RobotTaskMaker и DMTaskMaker отражают специфику заданий, связанных с исполнителями Робот и Чертежник. Так, в модуле RobotTaskMaker предусмотрены процедуры, задающие на клеточном поле начальную и конечную позиции Робота, расположение стен и особых клеток (окрашенных или помеченных для окрашивания). В модуле DMTaskMaker содержится набор процедур, обеспечивающих построение изображений-образцов, которые при выполнении задания, должны быть продублированы программой учащегося.
3. Примеры реализации заданий для исполнителя Робот
Приведем в качестве примера модуль с реализацией группы из двух заданий для исполнителя Робот.
unit RobTasks;
interface
uses RobotTaskMaker;
implementation
procedure FirstRob;
begin
TaskText('Задание myrob1. ' +
'Закрасить помеченные клетки');
Field(10, 6);
HorizontalWall(0, 3, 4);
VerticalWall(4, 3, 2);
RobotBegin(1, 4);
VerticalWall(5, 1, 5);
HorizontalWall(5, 1, 4);
RobotEnd(6, 2);
Tag(6, 2);
end;
procedure SecondRob;
var n, i: integer;
begin
TaskText('Задание myrob2. ' +
'Закрасить клетки под закрашенными');
n := Random(4) + 7;
Field(n, 4);
RobotBeginEnd(1, 3, n, 3); MarkPainted(n, 2); Tag(n, 3);
for i := 2 to n - 1 do
if Random(3) = 1 then begin
MarkPainted(i, 2); Tag(i, 3); end;
end; begin
RegisterGroup('myrob',
'Мои задания для Робота', 'RobTasks', 2); RegisterTask('myrob1', FirstRob); RegisterTask('myrob2', SecondRob); end.
В разделе инициализации модуля выполняется регистрация группы и каждого из входящих в нее заданий. При регистрации группы указывается ее имя, краткое описание, имя модуля, содержащего реализацию группы, и количество заданий.
В первом задании требуется провести Робота из начального положения в конечное, обойдя имеющиеся стены и закрасив конечную клетку (рис. 1).
Рис. 1. Окно исполнителя Робот для задания myrobl
Во втором задании требуется в процессе движения Робота закрашивать те клетки на его пути, над которыми расположены уже закрашенные клетки; при этом конфигурация клеточного поля (расположение закрашенных клеток и клеток, помеченных для закрашивания) определяется случайным образом (рис. 2).
Рис. 2. Окно исполнителя Робот для задания myrob2
Заготовка программы для выполнения, например, задания myrobl, имеет следующий вид:
uses Robot, RobTasks; begin
Task('myrobl'); end.
Для создания подобной заготовки достаточно использовать программный модуль PT4Load, окно которого приведено на рисунке 3.
Рис. 3. Окно программного модуля PT4Load
4. Конструктор учебных заданий для электронного задачника Programming Taskbook
Конструктор для электронного задачника Programming Taskbook реализован в виде модуля PT4TaskMaker. В этом модуле, как и в модулях-конструкторах для исполнителей, предусмотрены процедуры для регистрации группы заданий и отдельного задания в пределах группы, а также для определения формулировки задания (в виде набора текстовых строк).
Кроме того, модуль содержит набор процедур, позволяющих задать исходные и результирующие данные для формируемого задания. Подготовленные исходные данные в дальнейшем передаются программе учащегося для обработки. Чтобы обеспечить надежное тестирование предложенного учащимся алгоритма решения задачи, при формировании набора исходных данных следует использовать датчик случайных чисел. При определении результирующих данных требуется указать их контрольные («правильные») значения, используемые в дальнейшем для сравнения с результатами, полученными программой учащегося. Обычно контрольные значения вычисляются на основе ранее определенных исходных данных; таким образом, при инициализации каждого задания разработчику требуется тут же «выполнить» его для сформированного набора исходных данных (впрочем, иногда может оказаться удобнее вначале сгенерировать результаты, а затем по ним «подобрать» подходящие исходные данные). Любое задание должно содержать хотя бы один элемент как исходных, так и результирующих данных.
Процедуры конструктора PT4TaskMaker позволяют включать в задание исходные и результирующие данные всех базовых типов: целого, вещественного, символьного, строкового, логического. В каждой процедуре, помимо самого элемента данных, указывается строковый комментарий к нему и параметры, определяющие положение элемента, вместе с комментарием, в соответствующем разделе окна задачника (для числовых данных указывается также формат вывода). Имеются также процедуры, обеспечивающие вывод дополнительных комментариев в разделе исходных или результирующих данных.
В конструкторе предусмотрен набор процедур, определяющих дополнительные характеристики учебного задания. Одной из таких процедур является процедура SetTestCount, которая определяет количество успешных тестовых испытаний программы учащегося, необходимое для того, чтобы задание было зачтено как выполненное (число испытаний может находиться в пределах от 3 до 9). Если при очередном запуске программы будет получено ошибочное решение, то счетчик успешных тестов будет сброшен в 0, и тестирование (после исправления обнаруженной ошибки) придется начинать заново. Таким способом задачник
«вынуждает» учащегося тщательно тестировать свою программу на различных наборах исходных данных.
5. Дополнительные возможности конструктора учебных заданий для электронного задачника Programming Taskbook
При реализации учебных заданий на обработку строк одна из проблем заключается в генерации достаточно разнообразных и содержательных исходных данных — наборов слов, предложений или многострочных текстов. В конструктор учебных заданий PT4TaskMaker включены наборы образцов текстовых данных всех перечисленных видов и предусмотрены функции, обеспечивающие доступ к этим образцам. В текущей реализации конструктора доступно 116 слов, 61 предложение и 85 текстов как на русском, так и на английском языке.
В конструкторе PT4TaskMaker предусмотрена возможность включения в каждое учебное задание до 10 файлов. В заданиях можно использовать текстовые файлы, а также двоичные файлы, содержащие в качестве элементов числовые (целые и вещественные), символьные и строковые данные.
К числу видов данных, которые можно использовать в заданиях, подготовленных с применением конструктора PT4TaskMaker, относятся также указатели и динамические структуры.
В учебные задания можно включать указатели одного определенного в задачнике типа PNode, связанного с записями типа TNode: type
PNode = ATNode; TNode = record
Data: integer;
Next: PNode;
Prev: PNode;
Left: PNode;
Right: PNode;
Parent: PNode; end;
С помощью записей типа TNode можно реализовать все основные виды динамических структур, изучаемые в базовом курсе программирования: односвязные списки, применяемые, в частности, для моделирования стеков и очередей (при этом для связи элементов используется поле Next), двусвязные списки (для связи используются поля Next и Prev), бинарные деревья и деревья с произвольным ветвлением (используются поля Left и Right), а также бинарные деревья с обратной связью
(дополнительно используется поле Parent). Значением элемента любой из этих динамических структур считается значение его поля Data.
Используя соответствующие процедуры, входящие в состав конструктора, разработчик задания может задать исходные и результирующие данные, являющиеся файлами, указателями или динамическими структурами; при этом сам конструктор обеспечит наглядное отображение этих данных на экране, предоставит программе учащегося все исходные данные указанных типов и проверит правильность файлов и динамических структур, созданных при выполнении задания.
Полезной особенностью конструктора PT4TaskMaker является возможность автоматической генерации описания группы заданий в виде html-документа. Созданный html-документ содержит формулировки всех заданий, входящих в группу. В конструкторе предусмотрены средства, позволяющие включать в html-документы дополнительные комментарии; кроме того, большие группы заданий допускается разбивать на несколько подгрупп, каждая из которых также может снабжаться дополнительными комментариями. Отмеченные возможности позволяют разрабатывать «самодокументируемые» группы заданий, не требующие для своего сопровождения дополнительных файлов.
Имеется возможность форматирования текста заданий и комментариев к группе и ее подгруппам. Форматирование выполняется с помощью набора управляющих последовательностей, подобных командам системы TeX. Применяя управляющие последовательности, можно добавлять в текст специальные символы (в том числе символы шрифта Symbol и дополнительные буквы западноевропейских языков), использовать в тексте нижние и верхние индексы, выполнять выделение фрагментов текста и т. д. Предусмотрены управляющие последовательности для дополнительного форматирования html-описания группы, позволяющие использовать несколько видов выделения фрагментов текста, устанавливать для требуемых фрагментов режим вывода с центрированием или отступом, выводить текст в несколько столбцов, с возможностью настройки способа выравнивания для каждого столбца, и т. д.
В новые группы можно включать существующие задания из других групп; это позволяет преподавателю осуществлять перекомпоновку заданий с учетом особенностей его курса и уровня учащихся.
Правила работы с конструкторами учебных заданий, входящими в состав системы PascalABC.NET, подробно описаны в ее файле справки. Получить дополнительную информацию о системе программирования PascalABC.NET и скачать ее последнюю версию можно на сайте http://pascalabc.net/. Описание конструктора PT4TaskMaker содержится также на сайте электронного задачника Programming Taskbook http://ptaskbook.com/.
Литература
1. Михалкович С. С. Курс «Основы программирования» на базе системы PascalABC.NET / IV Международная научно-практическая конференция «Современные информационные технологии и ИТ-образование», Москва, 14-15 декабря 2009 г. Сборник избранных трудов. — М.: 2009. — С. 385— 392.
2. Абрамян М. Э. Электронный задачник Programming Taskbook: опыт разработки и применения / II Международная научно-практическая конференция «Современные информационные технологии и ИТ-образование», Москва, 18—21 декабря 2006 г. Сборник докладов научно-практической конференции. — М.: МАКС пресс, 2006. — С. 194—199.
3. Абрамян М. Э. Реализация универсального электронного задачника по программированию // Информатика и образование, 2009, № 6. — С. 118—120.