14.01.2013, 21:12
|
Профессор
|
|
Регистрация: 25.12.2009
Сообщений: 222
|
|
Расчет результата двух пользователей
Всем привет. Пишу скрипт теста на совместимость. Нужно сравнить ответы двух пользователей и рассчитать результат в процентах. В вопросе теста может быть 2, 3 или 4 варианта ответов. Если вариантов ответов 2, выполняется один код, а если 3, другой, ну и соответственно 4. Думаю, можно ли как-то все в одной функции реализовать или придется писать 3 проверки if-ом на количество вариантов ответов и 3 функции расчета.
В массиве formula хранятся данные для расчета результата. Первый элемент(3)-3 вопроса, второй элемент(10), прибавляет 10, если ответы пользователей совпали, третий элемент(6.7), прибавляет 6.7, если второе условие верно, ну и четвертый элемент прибавляет 3.4, если третье условие верное. В массивах user1 и user2 хранятся идентификаторы ответов пользователей.
var formula = [3,10,6.7,3.4];
var user1 = [1,0,1,1,1,0,0,2,2,2];
var user2 = [2,1,2,0,1,2,2,2,0,0];
var result = 0;
calculate();
function calculate(){
if(formula[0]==3){ //если вариантов ответов 3
for(var i=0; i<user1.length; i++){
if(user1[i]==user2[i]){ //если ответы совпали, прибавляем 10
result += formula[1];
}
else if(user1[i]==1 && user1[i]>user2[i] || user2[i]==1 && user2[i]>user1[i] || user1[i]==2 && user2[i]==1 || user2[i]==2 && user1[i]==1){ //если у одного из пользователей id ответа 0, а у другого 1 или у одного 2, а у другого 1
result += formula[2];
}
else{ //если у одного id ответа 0, а у другого 2
result += formula[3];
}
}
$('b').text(result);
}
}
Последний раз редактировалось Dimaz, 14.01.2013 в 21:16.
|
|
14.01.2013, 21:31
|
Профессор
|
|
Регистрация: 25.12.2009
Сообщений: 222
|
|
Кстати, чтобы не писать во втором условии кучу проверок, может можно как-нибудь записать условие: если больше на 2?
|
|
14.01.2013, 22:24
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Dimaz,
...всё проще ...
var formula = [10,6.7,3.4];
var user1 = [1,0,1,1,1,0,0,2,2,2];
var user2 = [2,1,2,0,1,2,2,2,0,0];
var result = 0;
calculate();
function calculate(){
for(var i=0; i<user1.length; i++){
result +=formula[Math.abs(user1[i]-user2[i])]
}}
alert(result);
|
|
14.01.2013, 22:32
|
Профессор
|
|
Регистрация: 25.12.2009
Сообщений: 222
|
|
Сообщение от рони
|
Dimaz,
...всё проще ...
var formula = [10,6.7,3.4];
var user1 = [1,0,1,1,1,0,0,2,2,2];
var user2 = [2,1,2,0,1,2,2,2,0,0];
var result = 0;
calculate();
function calculate(){
for(var i=0; i<user1.length; i++){
result +=formula[Math.abs(user1[i]-user2[i])]
}}
alert(result);
|
О как))) Не могу поверить, что это все. Спасибо огромное.
|
|
14.01.2013, 22:40
|
Профессор
|
|
Регистрация: 25.12.2009
Сообщений: 222
|
|
В чем проблема? Выводит неверный результат:
var formula = [3,10,6.7,3.4];
var user1 = [1,0,2,1,1,0,2,2,2,2];
var user2 = [2,1,2,0,1,2,2,2,0,0];
var result = 0;
calculate();
function calculate(){
for(var i=0; i<user1.length; i++){
result +=formula[Math.abs(user1[i]-user2[i])]
}}
alert(result);
Должно вывести 70.3, а выводит 62.1
|
|
14.01.2013, 22:46
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,121
|
|
Dimaz,
3 в formula это избыточная информация она ненужна
|
|
14.01.2013, 23:00
|
Профессор
|
|
Регистрация: 25.12.2009
Сообщений: 222
|
|
Сообщение от рони
|
Dimaz,
3 в formula это избыточная информация она ненужна
|
Спасибо, теперь работает. Плохо у меня с математикой в школе было. Работает, но все равно не могу понять как. Как этот небольшой код может заменить все то, что я хотел в начале написать. Аж 3 длинных функции.))
|
|
|
|