Упражнения с двумя последовательностями правильных ответов

Достаточно многие задачи имеют несколько правильных ответов. Однако, в некоторых из них ответ включает значения нескольких переменных. Простейшим примером такой задачи является система уравнений с конечным числом решений, отличным от единицы. Стандартные средства не позволяют реализовать подобные упражнения, но проблема легко разрешается с помощью Flash: так как ответы задачи формируются программно внутри фильма, можно объединить значения всех переменных в одну строку, которая затем передаётся на сервер. Вместо нескольких вариантов последовательностей правильных ответов получится несколько вариантов одиночных ответов, а этот случай предусмотрен.

Пример - №35.

Условие задачи:

В трёх ящиках с надписями "два белых", "два чёрных", "белый и чёрный" лежат два белых, два чёрных, белый и чёрный шарики, но ни одна из надписей на ящиках не соответствует тому, что в нём находится. Каким образом могут быть распределены шарики?

Решение

В этой задаче существует два варианта правильного ответа. Если в ящике с надписью "белый и чёрный" лежат два белых шарика, то в ящике с надписью "два чёрных" лежат белый и чёрный шарики, а в ящике с надписью "два белых" - два чёрных шарика; если в ящике с надписью "белый и чёрный" лежат два чёрных шарика, то в ящике с надписью "два белых" лежат белый и чёрный, а в ящике с надписью "два чёрных" - два белых шарика.

Программирование

Главная временная шкала Flash-документа содержит один кадр. Вид рабочего поля показан на рисунке 1. Соответствие ящиков и шариков, которое должно содержаться в ответе задачи, удобно реализовать с помощью полей исключающего выбора (имитация Radio-кнопки).

Рисунок 1

О создании радиокнопок можно прочесть здесь.

Ниже приводится сценарий, содержащийся в ключевом кадре главной временной шкалы. Он исполняется при загрузке фильма.

stop ();
//Определяется начальный вид радиокнопок
for (i=2; i<=9; i++) {
    _root["d"+i.toString()]._visible = false;
}
for (i=1; i<=7; i += 3) {
   _root["d"+i.toString()]._visible = true;
}
//a1, a2, a3 - переменные ответа
a1 = 1;
a2 = 1;
a3 = 1;
//Объявление пользовательской функции, формирующей ответ задачи
//В ответе получается строка вида 1_1_1, 2_3_1 и т.п.

function makeAnswer()
{
   a=a1.toString()+"_"+a2.toString()+"_"+a3.toString()
}

Поскольку в рассматриваемой задаче изменение ответа может происходить лишь при отпускании кнопки мыши (т.е. наступлении события mouseUp), сценарий передачи ответа, находящийся в экземпляре видеоклипа d1 (одна из "точек"), имеет вид:

onClipEvent (mouseUp) {
   _root.makeAnswer();
   fscommand ("1", _root.a);
}

При всяком отпускании кнопки мыши выполняется функция makeAnswer(), а затем значение переменной a передаётся документу asp.

Просмотреть результат в новом окне


 
К содержанию
Далее