Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2013, 21:12
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 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.
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2013, 21:31
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

Кстати, чтобы не писать во втором условии кучу проверок, может можно как-нибудь записать условие: если больше на 2?
Ответить с цитированием
  #3 (permalink)  
Старый 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);
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2013, 22:32
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 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);
О как))) Не могу поверить, что это все. Спасибо огромное.
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2013, 22:40
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 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
Ответить с цитированием
  #6 (permalink)  
Старый 14.01.2013, 22:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Dimaz,
3 в formula это избыточная информация она ненужна
Ответить с цитированием
  #7 (permalink)  
Старый 14.01.2013, 23:00
Профессор
Отправить личное сообщение для Dimaz Посмотреть профиль Найти все сообщения от Dimaz
 
Регистрация: 25.12.2009
Сообщений: 222

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MySQl дата между двух дат mycoding Серверные языки и технологии 8 14.02.2011 15:23
Расчет значения ячейки в зависиммости от данных введеных в поле. progressive Общие вопросы Javascript 4 11.02.2011 09:56
Выравнивание высот двух слоёв EugenyK Events/DOM/Window 9 07.07.2008 16:48