В соответствие с учебной программой по учебному предмету «Информатика» предполагается изучение компьютерных исполнителей Чертежник и Робот. Знакомство с первым из них происходит в 6 классе, а с исполнителем Робот учащиеся начинают работать в 7 классе. Изучение Робота содействует быстрому обучению семиклассников основным алгоритмическим конструкциям. Ускорению процесса обучения и облегчению труда преподавателя способствуют так называемые проверяемые задания, содержащиеся в электронном задачнике, который включен в учебную систему программирования PascalABC.Net. Примеры задач из встроенного задачника приведены в учебном пособии для 7 класса. Использование готовых проверяемых заданий не исключает возможности преподавателя самому создавать, а затем использовать собственные задания в учебном процессе. В данной статье рассмотрим создание проверяемых заданий для исполнителя Робот с помощью конструктора RobotTaskMaker, реализованного в виде одноименного модуля.
Создание собственноручно разработанных проверяемых заданий сводится к созданию модуля, содержащего группу (группы) заданий. Имя группы заданий может состоять из не более 7 символов (цифр и латинских букв) и не должно оканчиваться цифрой, количество заданий не должно превышать 999. Имя задания, входящего в группу, должно состоять из имени этой группы и цифры.
Каждое задание реализуется в виде отдельной процедуры. Для описания задания используются следующие стандартные процедуры модуля RobotTaskMaker.
Процедура
|
Описание
|
Field(m,n);
|
Задает поле Робота размером m х n (m клеток по горизонтали и n клеток по вертикали)
|
HorizontalWall(x,y,l);
|
Создает горизонтальную стену с началом в точке (x, y) и длиной l
|
VerticalWall(x,y,l);
|
Создает вертикальную стену с началом в точке (x, y) и длиной l
|
RobotBegin(x,y);
|
Задает начальное положение Робота в клетке (x, y)
|
RobotEnd(x,y);
|
Задает конечное положение Робота в клетке (x, y)
|
RobotBeginEnd (x1, y1, x2, y2);
|
Задает начальное и конечное положения Робота соответственно в клетках (x1, y1) и (x2, y2)
|
Tag(x,y);
|
Помечает клетку (x, y), которую в задании необходимо закрасить
|
TagRect (x1, y1, x2, y2);
|
Помечает прямоугольник из клеток, задаваемый координатами противоположных вершин (x1, y1) и (x2, y2), для закрашивания в задании
|
MarkPainted(x,y);
|
Закрашивает клетку (x, y) (в задании эта клетка будет уже закрашена)
|
TaskText (s);
|
Задает формулировку текста задания в строке s
|
Поясним на конкретном примере использование перечисленных процедур. Отметим, что столбцы нумеруются от 1 вправо, строки – от 1 вниз (по ним определяются координаты клеток). Вертикальные линии нумеруются от 0 вправо, горизонтальные – от 0 вниз (по ним определяются координаты начала стен: левой точки горизонтальной стены и верхней точки вертикальной стены).
Процедура
|
Пояснение
|
Field (10,6);
|
Создание поля 10 х 6
|
RobotBegin(1,2);
|
Определение начального положения Робота (большой желтый квадрат внутри клетки) в точке (1,2)
|
RobotEnd(9,5);
|
Определение конечного положения Робота (маленький желтый квадрат в углу клетки) в точке (9,5)
|
HorizontalWall (3,1,5);
|
Создание горизонтальной стены от точки (3,1) длиной 5
|
VerticalWall (5,2,4);
|
Создание вертикальной стены от точки (5,2) длиной 4
|
Tag(10,1);
|
Пометка клетки (10,1), которую нужно закрасить в задании (маленький черный квадрат внутри клетки)
|
TagRect (2,3,3,5);
|
Пометка прямоугольника с противоположными вершинами в точках (2,3) и (3,5) для закрашивания в задании (клетки прямоугольника отмечены черными квадратиками внутри)
|
MarkPainted (7,4);
|
создание закрашенной клетки (7,4), которая будет отражаться в задании (клетка закрашена зеленым цветом)
|
Все группы и задания должны быть определенным образом зарегистрированы.
Для регистрации группы используется стандартная процедура RegisterGroup(ig, og, im, kz), где ig – имя группы, og – описание группы, im – имя модуля, в котором описана группа, kz– количество заданий в группе.Эта процедура обеспечивает автоматическую регистрацию новой группы заданий в программном модуле PT4Load. Процедура RegisterGroup должна вызываться в секции инициализации модуля, содержащего реализацию новой группы заданий для Робота.
Для регистрации задания используется стандартная процедура RegisterTask(iz, ip), где iz – имя задания, ip – имя процедуры, в которой реализовано задание. Данную процедуру следует вызывать для каждого задания. Процедура RegisterTask должна вызываться в секции инициализации модуля, содержащего реализацию новой группы заданий для Робота.
Пример. Создадим модуль RobotTasks.pas, содержащий группу Rob из трех заданий Rob1, Rob2 и Rob3.
Задание 1
Поле Робота имеет квадратную форму произвольного размера. Робот находится в левой нижней клетке. Составить программу закрашивания Роботом всех клеток по диагонали от левой нижней клетки до правой верхней клетки
Задание 2
Поле Робота имеет форму квадрата произвольного размера. Исходное положение Робота – левая верхняя клетка. Где-то на поле имеется единственная закрашенная клетка. Роботу необходимо зайти в эту клетку.
Задание 3
Поле Робота имеет форму квадрата 10х10. Исходное положение Робота – левая верхняя клетка. Где-то правее Робота имеется вертикальная стена с единственным проходом (проход может быть в любой клетке, кроме верхней и нижней). Роботу необходимо перейти в противоположный угол поля, при этом закрасить две клетки против прохода в стене.
Запустим среду программирования PascalABC.Net и наберем следующий текст:
Unit RobotTasks;
Interface
Uses RobotTaskMaker; {Подключение модуля конструктора}
Implementation
procedure _1Robot; {Процедура создания задания 1}
var n: integer;
begin
TaskText ('Задание Rob1. Закрасить клетки по диагонали квадрата');
n:=Random(7)+3;
Field (n, n);
RobotBeginEnd (1, n, n, 1);
For var i:=1 to n do Tag(i, n+1-i);
end;
procedure _2Robot; {Процедура создания задания 2}
var n, k, m: integer;
begin
TaskText ('Задание Rob2. Зайти в закрашенную клетку');
n:=Random(7)+3;
Field (n,n);
k:=Random(n)+1;
m:=Random(n)+1;
MarkPainted (k, m);
RobotBeginEnd (1, 1, k, m);
end;
procedure _3Robot; {Процедура создания задания 3}
var k, m: integer;
begin
TaskText ('Задание Rob3. Зайти в противоположный угол и закрасить две клетки против проема в стене');
Field (10, 10);
k:=Random(9)+1;
m:=Random(8)+1;
VerticalWall (k, 0, m);
VerticalWall (k, m+1, 9-m);
Tag (k, m+1); Tag (k+1, m+1);
RobotBeginEnd (1, 1, 10, 10);
end;
begin
{Процедура регистрации группы}
RegisterGroup ('rob','Задания для Робота', 'RobotTasks', 3);
RegisterTask('rob1', _1Robot); {Процедура регистрации задания 1}
RegisterTask('rob2', _2Robot); {Процедура регистрации задания 2}
RegisterTask('rob3', _3Robot); {Процедура регистрации задания 3}
end.
Сохраним созданный файл:
Файл → Сохранить как … → RobotTasks (имя файла с расширением .pas должно совпадать с именем модуля). По умолчанию файл сохраняется в папке PABCWork.Net.
Выполним компиляцию:
Программа → Компилировать (в папке PABCWork.Net будет создан файл RobotTasks.pcu).
Созданный модуль (файл с расширением .pcu ) из папки, в которой был создан, перенесем в папку Lib:
Program Files (x86) → PascalABC.Net → Lib
Внесем изменения в файл loadpabc.dat, открыв его с помощью Блокнота (Program Files (x86) → PascalABC.Net → PT4 → loadpabc.dat). В конце списка наборов заданий для Робота добавим строку с содержанием:
==rob|задания для Робота|3
Сохраним изменения.
Создадим шаблон задания 1.
В новом окне редактора введем текст:
Uses Robot, RobotTasks;
Begin
Task('rob1');
End.
Запустим программу на выполнение. Будет выведено соответствующее задание для Робота.
Сохранять программу-шаблон в каком-либо файле не надо.
Создадим шаблон задания 2.
Uses Robot, RobotTasks;
Begin
Task('rob2');
End.
Запустим программу на выполнение.
И, наконец, создадим шаблон задания 3.
Uses Robot, RobotTasks;
Begin
Task('rob3');
End.
Запустим программу на выполнение.
При первом запуске программы с подключенным модулем RobotTasks созданная нами группа rob автоматически зарегистрируется в мастере по созданию программ-заготовок PT4Load. Если теперь нажать кнопку (создать шаблон программы) и в появившемся окне PT4Load ввести префикс RB в поле «Задание», то окно примет следующий вид:
Мы видим, что группа заданий rob появилась в списке доступных групп для исполнителя Робот. Если приписать имя одного из созданных заданий, например, rob1, то после нажатия Enter в рабочем каталоге будет создан новый файл RBrob1.pas со следующим содержимым:
Uses Robot, RobotTasks;
Begin
Task('rob1');
End.
Теперь можно приступать к решению собственноручно разработанных заданий.
Созданный модуль можно обновлять, добавлять новые задания, используя описанный выше механизм.