Приветствую!
У меня есть задача в, которой по итогам теста,
1 суммируются две группы ответов на вопросы
2 эти сумму сравниваются
3 В итоге выдаваться результат скажем E или I.
Вопросы содержат два варианта ответа: А\Б. Балл приносит А.
Суммируются все ответы Б и все ответы А. И если ответов Б было меньше, чем ответов А, то значение 1 и результат “E” в остальных случаях значение 0 и результат “I”
Алгоритм выглядит так:
((((балл (корневая->группа вопрос1) <1) ? 1 : 0)+(( балл (корневая->группа вопрос2) <1) ? 1 : 0))<( балл (корневая->группа вопрос1) + балл (корневая->группа вопрос2)) ? 1 : 0
Первая сумма считает ответы Б, вторая сумма считает ответы А
Значение Результат
0 E
1 I
А теперь задача усложнилось, надо добавить еще одно значение в случае, если обе группы сумм ответов равны друг другу.
Значение Результат
0 E
1 I
3 E =I
Как я понимаю, мне нужен аналог оператора if else, который позволил бы добавить еще одно условие с равенством сумм. Подскажите можно ли это как то реализовать в вашем программном комплексе?


Ветвление при вычислении результатов
Автор Гость_lenkov_*, 05 авг 2016 18:53
Сообщений в теме: 2
#2
Отправлено 05 Август 2016 - 19:01
Здравствуйте!
Все можно сделать, зависит от хитрости и программистских навыков. Я по Вашему описанию мог не очень правильно понять задачу, в той же формуле у Вас некорректно перепечатана расстановка скобок и есть некоторые противоречия. Давайте я сформулирую задачу заново:
1. У Вас есть несколько вопросов типа выбор одного варианта ответа из нескольких, в которых 2 варианта ответа А и Б. Так?
2. Нужно отдельно получить количество ответов А и Б. Так?
3. Потом нужно сравнить количество ответов и в зависимости от того sum(А) > sum(Б), sum(А) < sum(Б), sum(А) = sum(Б) выдать то или иное значение. Так?
Это все решается оператором (условие ? истина : ложь). Просто их придется вкладывать друг в друга.
Допустим за варианты А проставляем 1, а если вариант ответа Б проставляем 0 баллов.
Самое краткое решение задачи выглядит так:

Здесь были использованы функции, чтобы не дублировать код сложения при вычислении второго вложенного условия. При вычислении функции B() используется восклицательный знак !x - это булева операция, которая превращает false в true, а true в false. Поскольку у нас работа с числами, то при применении булевой операции к числам, числа автоматически преобразуются к истина/ложь. Ложью равняется только 0, все остальное истина. Потом эти булевы значения обратно конвертируются в числа, т.к. используется оператор сложения +. Фактически мы получили более краткую запись того, как Вы расписывали (X<1 ? 1 : 0), хотя достаточно сделать просто !X. Тогда 0 баллов превратятся в 1, а 1 балл превратится в 0.
По сути A()>B() ? 0 : (A()<B() ? 1 : 2); мы получили аналог:
Если(A>Б) Результат = 0;
Иначе Если(A<Б) Результат = 1;
Иначе Результат = 2;
Файл теста прикладываю к сообщению.
Все можно сделать, зависит от хитрости и программистских навыков. Я по Вашему описанию мог не очень правильно понять задачу, в той же формуле у Вас некорректно перепечатана расстановка скобок и есть некоторые противоречия. Давайте я сформулирую задачу заново:
1. У Вас есть несколько вопросов типа выбор одного варианта ответа из нескольких, в которых 2 варианта ответа А и Б. Так?
2. Нужно отдельно получить количество ответов А и Б. Так?
3. Потом нужно сравнить количество ответов и в зависимости от того sum(А) > sum(Б), sum(А) < sum(Б), sum(А) = sum(Б) выдать то или иное значение. Так?
Это все решается оператором (условие ? истина : ложь). Просто их придется вкладывать друг в друга.
Допустим за варианты А проставляем 1, а если вариант ответа Б проставляем 0 баллов.
Самое краткое решение задачи выглядит так:

Здесь были использованы функции, чтобы не дублировать код сложения при вычислении второго вложенного условия. При вычислении функции B() используется восклицательный знак !x - это булева операция, которая превращает false в true, а true в false. Поскольку у нас работа с числами, то при применении булевой операции к числам, числа автоматически преобразуются к истина/ложь. Ложью равняется только 0, все остальное истина. Потом эти булевы значения обратно конвертируются в числа, т.к. используется оператор сложения +. Фактически мы получили более краткую запись того, как Вы расписывали (X<1 ? 1 : 0), хотя достаточно сделать просто !X. Тогда 0 баллов превратятся в 1, а 1 балл превратится в 0.
По сути A()>B() ? 0 : (A()<B() ? 1 : 2); мы получили аналог:
Если(A>Б) Результат = 0;
Иначе Если(A<Б) Результат = 1;
Иначе Результат = 2;
Файл теста прикладываю к сообщению.
Прикрепленные файлы
Ответить

Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных