Добрый день.
Тестирую демонстрационную версию программы и возник вопрос с подсчетом результата, вернее как его реализовать. Для примера: имеем вопрос с множественным выбором ответов и 5 вариантов ответов. Нужно реализовать, что бы при выборе определенного ответа, результат относился к определенной шкале. Нюанс еще в том, что на один вопрос ответов может быть несколько, и соответственно балы за эти ответы должны разноситься по соответствующим шкалам.
1
[Решено] Ответы по разным шкалам
Автор Viktor, 21 ноя 2019 12:14
Сообщений в теме: 4
#2
Отправлено 21 Ноябрь 2019 - 13:17
Здравствуйте, Виктор!
Это можно сделать. В INDIGO можно сделать что угодно. В данном случае требуется немножко простого программирования. Для вопросов множественного выбора нужно включить опцию "За каждый вариант ответа свой балл" и проставить степени двойки 2 4 8 16 32.
Когда пользователь будет выбирать варианты ответа эти баллы будут суммироваться.
Сумма таких чисел в двоичной системе счисления выдает значения типа 00000 - когда все не отвеченные, или 2+4+8+16+32=62, что в двоичной системе счисления 11111 - когда все отвеченные, или, например, 2=00001, когда первый отвечен, а другие нет. Или 10101, когда отвечены 1 3 и 5-ый вариант ответа. Т.е. получая простую сумму баллов мы можем в двоичной системе счисления задетектить на какие именно варианты ответа был дан ответ, т.к. каждое число располагается в отдельном разряде двоичной системы счисления. Для удобства обработки мы написали функцию:
function f($a,$n)
{
return ($a & pow(2,$n)) ? 1 : 0;
}
Она проставляется только в первой шкале, чтобы она стала доступна во всех остальных шкалах.
Данная функция в первом аргументе принимает балл за вопрос, а во втором требуемый вариант ответа. Возвращает 0, если в этом вопросе данный вариант ответа не был проставлен пользователем, и возвращает 1, если в данном вопросе этот вариант ответа был проставлен.
Использовать это можно следующим образом:
Если за первый вопрос пользователь выберет первый варианта ответа, то добавим +1 балл в шкалу.
Если за второй вопрос пользователь выберет третий варианта ответа, то добавим +1 балл в шкалу.
Если за третий вопрос пользователь выберет пятый варианта ответа, то добавим +1 балл в шкалу.
Если за первый вопрос пользователь выберет второй варианта ответа, то добавим +1 балл в шкалу.
Если за второй вопрос пользователь выберет четвертый варианта ответа, то добавим +1 балл в шкалу.
Если за третий вопрос пользователь выберет пятый варианта ответа, то добавим +1 балл в шкалу.
Вывод результатов:
Файл с тестом прикладываю к письму.
Это можно сделать. В INDIGO можно сделать что угодно. В данном случае требуется немножко простого программирования. Для вопросов множественного выбора нужно включить опцию "За каждый вариант ответа свой балл" и проставить степени двойки 2 4 8 16 32.
Когда пользователь будет выбирать варианты ответа эти баллы будут суммироваться.
Сумма таких чисел в двоичной системе счисления выдает значения типа 00000 - когда все не отвеченные, или 2+4+8+16+32=62, что в двоичной системе счисления 11111 - когда все отвеченные, или, например, 2=00001, когда первый отвечен, а другие нет. Или 10101, когда отвечены 1 3 и 5-ый вариант ответа. Т.е. получая простую сумму баллов мы можем в двоичной системе счисления задетектить на какие именно варианты ответа был дан ответ, т.к. каждое число располагается в отдельном разряде двоичной системы счисления. Для удобства обработки мы написали функцию:
function f($a,$n)
{
return ($a & pow(2,$n)) ? 1 : 0;
}
Она проставляется только в первой шкале, чтобы она стала доступна во всех остальных шкалах.
Данная функция в первом аргументе принимает балл за вопрос, а во втором требуемый вариант ответа. Возвращает 0, если в этом вопросе данный вариант ответа не был проставлен пользователем, и возвращает 1, если в данном вопросе этот вариант ответа был проставлен.
Использовать это можно следующим образом:
Если за первый вопрос пользователь выберет первый варианта ответа, то добавим +1 балл в шкалу.
Если за второй вопрос пользователь выберет третий варианта ответа, то добавим +1 балл в шкалу.
Если за третий вопрос пользователь выберет пятый варианта ответа, то добавим +1 балл в шкалу.
Если за первый вопрос пользователь выберет второй варианта ответа, то добавим +1 балл в шкалу.
Если за второй вопрос пользователь выберет четвертый варианта ответа, то добавим +1 балл в шкалу.
Если за третий вопрос пользователь выберет пятый варианта ответа, то добавим +1 балл в шкалу.
Вывод результатов:
Файл с тестом прикладываю к письму.
Прикрепленные файлы
#4
Отправлено 21 Ноябрь 2019 - 15:37
Добрый день, Станислав Викторович!
Мне кажется, что сегодняшнее Ваше предложение решает еще одну специфическую задачу. Объясню для форумчан и напомню Вам. Мне нужно было, чтобы в тестах с выбором нескольких вариантов каждый правильный ответ, обозначенный галочкой, давал 1 балл и каждый неправильный вариант, НЕ обозначенный галочкой – тоже 1 балл. Схематически см. на снимке1 (знак # обозначает результативный вариант). Итого: от 0 до 5 баллов.
Я ввел дополнительную функцию, отличающуюся от Вашей диаметрально противоположным возвращением 0 и 1. Оцените вкратце, пожалуйста.
Что не понравилось:
1: Представление результатов в журнале (см. снимок2).
2: Чтобы набрать предусмотренные шкалами 6 баллов, можно не париться: расставить все 15 галок. При этом просмотр результатов невозможен (ошибок-то по факту нет). В моем же тесте при 15 галочках в колонке «Результат» выводится <ошибка тип 1>.
3: Как при значениях 2, 4, 8, 16, 32… считать общий результат за все задание, если в нем есть другие типы вопросов (с ценой 1 балл за тест)?
p/s Высказанные замечания имеют целью не критику, а стимулирование к усовершенствованию. Поскольку в программировании я не силен, предложенным вариантом больше чем доволен.
Мне кажется, что сегодняшнее Ваше предложение решает еще одну специфическую задачу. Объясню для форумчан и напомню Вам. Мне нужно было, чтобы в тестах с выбором нескольких вариантов каждый правильный ответ, обозначенный галочкой, давал 1 балл и каждый неправильный вариант, НЕ обозначенный галочкой – тоже 1 балл. Схематически см. на снимке1 (знак # обозначает результативный вариант). Итого: от 0 до 5 баллов.
Я ввел дополнительную функцию, отличающуюся от Вашей диаметрально противоположным возвращением 0 и 1. Оцените вкратце, пожалуйста.
Что не понравилось:
1: Представление результатов в журнале (см. снимок2).
2: Чтобы набрать предусмотренные шкалами 6 баллов, можно не париться: расставить все 15 галок. При этом просмотр результатов невозможен (ошибок-то по факту нет). В моем же тесте при 15 галочках в колонке «Результат» выводится <ошибка тип 1>.
3: Как при значениях 2, 4, 8, 16, 32… считать общий результат за все задание, если в нем есть другие типы вопросов (с ценой 1 балл за тест)?
p/s Высказанные замечания имеют целью не критику, а стимулирование к усовершенствованию. Поскольку в программировании я не силен, предложенным вариантом больше чем доволен.
Прикрепленные файлы
#5
Отправлено 21 Ноябрь 2019 - 16:41
Цитата
1: Представление результатов в журнале (см. снимок2).
2: Чтобы набрать предусмотренные шкалами 6 баллов, можно не париться: расставить все 15 галок. При этом просмотр результатов невозможен (ошибок-то по факту нет).
2: Чтобы набрать предусмотренные шкалами 6 баллов, можно не париться: расставить все 15 галок. При этом просмотр результатов невозможен (ошибок-то по факту нет).
- В будущем мы расширим функционал, и когда это будет все не лайфхак, а встроенная функция, то выдача результатов в вебе будет без этих нюансов. Сейчас же подобные механизмы чаще всего применяются не в контроле знаний, а во всякого рода психологических тестах или опросах, где пользователю выводить список вопросов с ошибками не нужно, т.к. понятия верных или неверных ответов нет.
Цитата
В моем же тесте при 15 галочках в колонке «Результат» выводится <ошибка тип 1>
- Вы добавили шкалы "Функция2" и "Итого", а деления для них не выключили. Значения не попадают в деление по умолчанию и происходит ошибка. Отключите деления.
Цитата
3: Как при значениях 2, 4, 8, 16, 32… считать общий результат за все задание, если в нем есть другие типы вопросов (с ценой 1 балл за тест)?
- Нужно другие вопросы включить в шкалу путем их суммирования, но уже без обертывания в вызов функции. Если же для других типов вопросов нужна какая-та другая обработка, то можно также создать отдельные функции f3(), f4() и т.д. для их обработки.
p.s. для f2() Вам не обязательно было создавать отдельную Шкалу, можно было ее прописать туда же, где и f1().
Ответить
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных