Упражнения с бесконечным множеством правильных ответов

Если задача имеет бесконечно много решений, проверка правильности возлагается на фильм Flash. На сервер передаются лишь данные о том, верно или нет было выполнено задание.

Пример - №517.

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

Используя таблицу простых чисел, найдите
а) 3 последовательных составных числа;
б) 5 последовательных составных чисел.

Решение

Для первой части задания в качестве ответа подходят, например, все числа вида 6n+2, 6n+3, 6n+4. Для б) подходят все последовательности вида (6n+1)*5, (6n+1)*5+1, (6n+1)*5-1, (6n+1)*5-2, (6n+1)*5-3.

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

Главная временная шкала Flash-документа содержит один кадр. Вид рабочего поля показан на рисунке 1.

Рисунок 1

Алгоритм:

Значения, введенные в поля a0, a1, a2 (b0 - b5) должны удовлетворять следующим условиям:

Для того, чтобы определить, будет ли число составным, достаточно проверить, делится ли оно на какое-либо меньшее натуральное число, отличное от единицы. Соответствующая функция называется isComposite(). В качестве параметра функции выступает рассматриваемое число; она возвращает значение true, если число составное, и false - если оно простое.

Имя функции Параметры Предназначение
Check () -Проверка ответа (внешняя функция)
isComposite(num) num - исследуемое числоПроверяет, является ли число составным
areComposite (array) array - числовой массив Проверяет, являются ли составными все числа последовательности
isConsequence (array) array - числовой массивПроверяют, являются ли последовательными числа массива (без учёта порядка следования)
Sorter (a, b)a, b - числа Параметр сортировки

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

stop ();      //Остановка воспроизведения
a = new Array(0, 0, 0);      //Массив ответов пункта а)
b = new Array(0, 0, 0, 0, 0);      // Массив ответов пункта б)
r = new Array(0, 0);      //Массив результатов
//Функция полной проверки условия
function Check () {
 //Заполнение массивов a и b
   for (var i = 0; i<3; i++)
      {  a[i] = int(mc1["a"+i.toString()]);  }
   for (i=0; i<5; i++)
      {  b[i] = int(mc1["b"+i.toString()]);  }
//Проверка условий "числа последовательные" и "числа составные"
   if (areComposite(a) && isConsequence(a))
      {  r[0] = 1;  }
   else
      {  r[0] = 0;  }
   if (areComposite(b) && isConsequence(b))
      {  r[1] = 1;  }
   else
      {  r[1] = 0;  }
}
//Функция, проверяющая, является ли составным данное число
function isComposite (num) {
   var i = 2;
   var res = false;
   while (i<num) {
      if (num%i == 0) {
         res = true;
         i = num;
      } else {
         i++;
      }
   }
   return res;
}
//Функция, проверяющая, являются ли составными все числа данного массива
function areComposite (array) {
   var res = true;
   var i = 0;
   while (i<array.length) {
      if (!isComposite(array[i])) {   //Если элемент массива - не составное число,
         res = false;      //цикл прерывается
         i = array.length;
      } else {
         i++;
      }
   }
   return res;
}
//Функция, проверяющая, являются ли последовательными числа данного массива
function isConsequence (array) {
   array.sort(Sorter);      //Сортировка массива по возрастанию
   var res = true;
   var i = 1;
   while (i<array.length) {
      if (array[i] != array[i-1]+1) {
         res = false;
         i = array.length;
      } else {
         i++;
      }
   }
   return res;
}  //Функция, определяющая параметр сортировки
function Sorter (a, b) {
   return a-b;
}
//Однократное выполнение проверки ответа
Check()

Передачу ответа обеспечивает сценарий, содержащийся в экземпляре mc1 видеоклипа all.

onClipEvent (mouseUp) {
   _root.Check();
   fscommand ("1", _root.r[0]);
   fscommand ("2", _root.r[1]);
}

При всяком отпускании кнопки мыши выполняется функция Check(), а затем значение переменных r[0] и r[1] передаётся документу asp.

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


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