Генераторы заданий MyTestXPro

Материал из MyTestXPro Wiki Help
Перейти к навигации Перейти к поиску

Информация для версии 11.0.0.62, для версии 11.0.0.61 смотрите Генераторы заданий (старая версия).

Генератор заданий позволяет быстро на основе задания-шаблона создать большое количество подобных заданий.

Шаблоны

Сначала необходимо создать задание-шаблон на основе которого будут автоматически создаваться новые задания. От обычного задания оно отличается тем, что вместо конкретных чисел или слов указаны шаблоны-подстановки. Шаблоны записываются в тексте как {%шаблон%}. Имя шаблона может содержать русские и латинские буквы, цифры и символ подчеркивания.

Например, вопрос может быть записан так: "Переведите двоичное число {%дв_число%}2 в десятичную систему счисления."

Generator62 1.png

Если задание на ручной ввод ответа и ответ генерируется автоматически, то в поле ответа ничего писать не нужно - ему соответствуют шаблон {%answer%}. Если вариантов ответа несколько, то каждому {%answer1%}, {%answer2%}...{%answer10%}.

Еще автоматические шаблоны


Если задание с вариантами ответа, то в тексте вариантов ответов можно тоже сделать шаблоны.

Generator62b.png

Для заданий с вариантами ответов шаблоны answer1, answer2... answer10 позволяют указать отмечен (значение 1 или true или +) или нет вариант ответа, а для типа сопоставление, с чем сопоставить.


Генератор вместо шаблонов подставит конкретные значения и получится готовое задание.

Для открытия генератора выберите задание-шаблон и дайте команду Задания → Генератор...

Generator62 2.png

Скрипт

Скрипт позволяет подготовить данные для создания заданий. Он пишется на языке программирования JavaScript.

Также вы можете подготовить данные другим способом (например, написав программу на другом языке программирования) и просто их вставить в соответствующее поле.

В скрипте может быть несколько функций, при запуске вызывается функция main(). Она должна подготовить данные для постановки и передать их функции generator(). В контекстном меню (правой кнопкой) поля скрипта есть несколько заготовок, облегчающих понимание и написание своих скриптов.

function main(){
  var m = {};
  m['шаблон'] = 'значение';
  m['answer'] = 3.14;
  //...
  generator(m);
}

Generator62 3.png

Этот скрипт подготовит данные только для одного задания.

Примечание: если при нажатии кнопки Запустить скрипт удерживать клавишу Shift, то данные будут добавлены к уже имеющимся. Данные для разных заданий отделяются пустой строкой.

Для подготовки данных для нескольких заданий (ведь в этом смысл генератора) нужен цикл.

function main(){
  var m = {};
  for(var i = 0; i < 3; i++){
    m['шаблон'] = 'значение';
    m['answer'] = 3.14;
    //...
    generator(m);
  }
}

Теперь мы получили данные (правда, один и те же) для 3 заданий, т.к. цикл выполнился 3 раза и 3 раза была вызвана функция generator(). Как получить различные данные смотрите ниже.

Генерация

Когда данные подготовлены можно создавать задания. Выберите группу для новых заданий и нажмите кнопку Создать задания.

Generator62 4.png

Пример скриптов

Вернемся к первому шаблону и напишем рабочий скрипт.

function main(){
  var m = {};
  var a10, a2;
  for(var i = 0; i < 5; i++){
    a10 = randint(25, 50);
    a2 = a10.toString(2);  
    m['дв_число'] = a2;
    m['answer'] = a10;
    generator(m);
  }
}

или

function main(){
  var m = {};
  var a;
  for(var i = 0; i < 5; i++){
    a = randint(25, 50);
    m['дв_число'] = a.toString(2);
    m['answer'] = a;
    generator(m);
  }
}

Примечание: функция randint(a, b) возвращает случайное целое число N из интервала a <= N <= b. Она использует функцию Math.random и для удобства уже прописана в генераторе.

При таком использовании можно получить одинаковые данные (хотя дубликаты заданий и не сложно удалить). Давайте сделаем чтобы мы получили задания для чисел от 25 до 50.

function main(){
  var m = {};
  for(var i = 25; i <= 50; i++){
    m['дв_число'] = i.toString(2);
    m['answer'] = i;
    generator(m);
  }
}

Generator62 5pre.png

Generator62 5.png

Мы получили 26 заданий на основе задания-шаблона. Аналогично можно получить и значительно большее количество.

Входные данные

В новой версии появилась возможность передавать данные в скрипт. Для этого их нужно написать (или скопировать из файла и вставить) в поле "Входные данные".

Давайте создадим задания для чисел в это поле. В заготовках есть пример, как использовать эти входные данные для случая когда они записаны в отдельных строках. Цикл выполнится столько раз, сколько строк в поле "Входные данные".

 
function main(){
  var m = {};
  var a;
  for(var i = 0; i < input.length; i++){
    a = parseInt(input[i]);
    m['дв_число'] = a.toString(2);
    m['answer'] = a;
    generator(m);
  }
}

Generator62 6.png

В предыдущем примере потребовалось входные данные преобразовать в число, т.к. нам требовалось работать с числами. При работе с текстовыми данными это не требуется.

Рассмотрим еще пример. Пусть требуется создать задания по географии "Столица {%страна%}?"

В поле входных данных запишем (или вставим) название страны = название столицы. Вместо = можно использовать любой разделитель (в этом задании пробел и - не подойдут, они могут быть в тексте).

Китай=Пекин
Япония=Токио
Россия=Москва
Индия=Дели
Южная Корея=Сеул
Малайзия=Куала-Лумпур

В этом случае потребуется разбить входную строку на две части (пример есть в заготовках).

function main(){
  var m = {};
  var a;
  for(var i = 0; i < input.length; i++){
    a = input[i].split('=');
    m['страна'] = a[0];
    m['answer'] = a[1];
    generator(m);
  }
}

Generator62 7.png


Вернемся к примеру с числами. Пусть числа записаны в одной строке через запятую. Тогда скрипт можно было записать так:

function main(){
  var m = {};
  var data = input[0].split(',');
  var a;
  for(var i = 0; i < data.length; i++){
    a = parseInt(data[i]);
    m['дв_число'] = a.toString(2);
    m['answer'] = a;
    generator(m);
  }
}

Пример цикл в цикле

Допустим требуется сделать задания на таблицу умножения. Создаем задание "{%a%} ⋅ {%b%} = ?"

Пишем скрипт:

function main(){
  var m = {};
  for(var i = 1; i <= 10; i++){
    for(var j = 1; j <= 10; j++){
      m['a'] = i;
      m['b'] = j;
      m['answer'] = i*j;
      generator(m);
    }
  }
}

И получаем 100 заданий.

Generator62 8.png

Учебник JavaScript

Про работу с объектами и массивами на JavaScript можно почитать, например, на сайте

https://learn.javascript.ru/object

https://learn.javascript.ru/array