Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Расчет результата двух пользователей (https://javascript.ru/forum/jquery/34677-raschet-rezultata-dvukh-polzovatelejj.html)

Dimaz 14.01.2013 21:12

Расчет результата двух пользователей
 
Всем привет. Пишу скрипт теста на совместимость. Нужно сравнить ответы двух пользователей и рассчитать результат в процентах. В вопросе теста может быть 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:31

Кстати, чтобы не писать во втором условии кучу проверок, может можно как-нибудь записать условие: если больше на 2?

рони 14.01.2013 22:24

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);

Dimaz 14.01.2013 22:32

Цитата:

Сообщение от рони (Сообщение 227269)
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);

О как))) Не могу поверить, что это все. Спасибо огромное.

Dimaz 14.01.2013 22:40

В чем проблема? Выводит неверный результат:
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

Dimaz,
3 в formula это избыточная информация она ненужна

Dimaz 14.01.2013 23:00

Цитата:

Сообщение от рони (Сообщение 227275)
Dimaz,
3 в formula это избыточная информация она ненужна

Спасибо, теперь работает.:) Плохо у меня с математикой в школе было. Работает, но все равно не могу понять как. Как этот небольшой код может заменить все то, что я хотел в начале написать. Аж 3 длинных функции.))


Часовой пояс GMT +3, время: 20:46.