Достаточно многие задачи имеют несколько правильных ответов. Однако, в некоторых из них ответ включает значения нескольких переменных. Простейшим примером такой задачи является система уравнений с конечным числом решений, отличным от единицы. Стандартные средства не позволяют реализовать подобные упражнения, но проблема легко разрешается с помощью Flash: так как ответы задачи формируются программно внутри фильма, можно объединить значения всех переменных в одну строку, которая затем передаётся на сервер. Вместо нескольких вариантов последовательностей правильных ответов получится несколько вариантов одиночных ответов, а этот случай предусмотрен.
Пример - №35.
Условие задачи:
В трёх ящиках с надписями "два белых", "два чёрных", "белый и чёрный" лежат два белых, два чёрных, белый и чёрный шарики, но ни одна из надписей на ящиках не соответствует тому, что в нём находится. Каким образом могут быть распределены шарики?Решение
В этой задаче существует два варианта правильного ответа. Если в ящике с надписью "белый и чёрный" лежат два белых шарика, то в ящике с надписью "два чёрных" лежат белый и чёрный шарики, а в ящике с надписью "два белых" - два чёрных шарика; если в ящике с надписью "белый и чёрный" лежат два чёрных шарика, то в ящике с надписью "два белых" лежат белый и чёрный, а в ящике с надписью "два чёрных" - два белых шарика.
Программирование
Главная временная шкала Flash-документа содержит один кадр. Вид рабочего поля показан на рисунке 1. Соответствие ящиков и шариков, которое должно содержаться в ответе задачи, удобно реализовать с помощью полей исключающего выбора (имитация Radio-кнопки).Ниже приводится сценарий, содержащийся в ключевом кадре главной временной шкалы. Он исполняется при загрузке фильма.
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.
Просмотреть результат в новом окне
К содержанию |
Далее |