Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Математический скрипт


Автор: djnoob 6.7.2010, 16:08
Здравствуйте!

JavaScript  сегодня увидел впервые и пытался разобраться, но пока глухо( 
Собственно что я хочу :

У меня есть:

n = eval(form.n.value);
m = eval(form.m.value);
p = eval(form.p.value);
x = Math.pow(2,3);
r = (factorial(n)/( factorial(m)*factorial(n-m)))*Math.pow(p,m)*Math.pow(1-p,n-m)
form.total.value = r


мне нужно написать функцию, в которой m будет от какого либо числа до n, а в возвращаться
будет сумма всех r этой функции. Пытался через for но получается ерунда( Кто нибудь может подсказать куда копать?)

Автор: bars80080 6.7.2010, 17:50
пишешь математическую формулу, а затем выражаешь её в систаксисе языка программирования (это справедливо для любого ЯП)

представь формулу здесь, тогда её быстро переведут (хотя думаю, что и сам в таком случае справишься)

Автор: CruorVult 6.7.2010, 17:55
при m=1 и n=4, посчитать суму r (1:4, 2:4, 3:4, 4:4)
если так, то
Код

for(i=m, i<=n; i++) {
r += (factorial(n)/( factorial(i)*factorial(n-i)))*Math.pow(p,i)*Math.pow(1-p,n-i);
}


Автор: djnoob 7.7.2010, 01:19
Спасибо, вроде так все, но не пойму почему не работает - при щелчке никакого результата
Код


function calculator(form) {
n = eval(form.n.value);
m = eval(form.m.value);
p = 0.5
x = Math.pow(2,3);
var r = 0

for(i=m, i<=n; i++) {
    r += (factorial(n)/( factorial(i)*factorial(n-i)))*Math.pow(p,i)*Math.pow(1-p,n-i);
    return r;
}
form.total.value = r
}


А при таком коде выдается результат
Код

function calculator(form) {
n = eval(form.n.value);
m = eval(form.m.value);
p = 0.5
x = Math.pow(2,3);
r = (factorial(n)/( factorial(i)*factorial(n-i)))*Math.pow(p,i)*Math.pow(1-p,n-i);
form.total.value = r
}

 smile 

Автор: patap 7.7.2010, 09:18
непоянто зачем в теле цикла return? return - прерывает работу функции, все что после него - не выполняется. 
Код

for(i=m, i<=n; i++) {
    r += (factorial(n)/( factorial(i)*factorial(n-i)))*Math.pow(p,i)*Math.pow(1-p,n-i);
    return r;
}

если хочешь выполнить только одну итерацию цикла - замени return на break;


И думаю нужно добавить проверку m и n на правильность.

Автор: djnoob 7.7.2010, 09:40
Вот как все происходит:
Код

function calculator(form) {
n = eval(form.n.value);
m = eval(form.m.value);
p = 0.5
x = Math.pow(2,3);
c = factorial(n);

for(i=m, i<=n; i++) {
    r += (factorial(n)/( factorial(i)*factorial(n-i)))*Math.pow(p,i)*Math.pow(1-p,n-i);
    break;
}

form.total.value = r

}



Код

<input type="text" name="n" onchange="this.value=this.value.replace(/([^0-9])/g,'');" onkeyup="this.value=this.value.replace(/([^0-9])/g,'');"><br><br>

<input type="text" name="m" onkeyup="this.value=this.value.replace(/([^0-9])/g,'');"><br><br>

<input type="button" value="Рассчитать" onclick="calculator(this.form)">

<input type="text" name="total">


Почему то form.total.value не берет значение ни одного цикла, может я не так его пишу? 

Автор: patap 7.7.2010, 09:56
for(i=m; i<=n; i++)

))

Автор: djnoob 7.7.2010, 09:59
patap, очепятку исправил, но все равно при клике по "Рассчитать" ничего не происходит(

Автор: patap 7.7.2010, 10:05
Код

<form>
   <input type="text" name="n" onchange="this.value=this.value.replace(/([^0-9])/g,'');" onkeyup="this.value=this.value.replace(/([^0-9])/g,'');"><br><br>
   <input type="text" name="m" onkeyup="this.value=this.value.replace(/([^0-9])/g,'');"><br><br>
   <input type="button" value="Рассчитать" onclick="calculator(this.form)">
   <input type="text" name="total">
</form>


Код

function calculator(form) {
  var n = eval(form.n.value);
  var m = eval(form.m.value);
  var p = 0.5;
  var x = Math.pow(2, 3);
  var c = factorial(n);
  var r = 0;

  for (i = m; i <= n; i++) {
    r += (factorial(n) / (factorial(i) * factorial(n - i))) * Math.pow(p, i) * Math.pow(1 - p, n - i);
  }

  form.total.value = r;
}


если функция factorial() - работает корректно, то должно работать.


ЗЫ пользуйся FireFox + https://addons.mozilla.org/ru/firefox/addon/1843/


Автор: djnoob 7.7.2010, 10:17
patap, спасибо большое !   стормозил я сильно 

Все переменные были без var,теперь все работает  smile 

Автор: patap 7.7.2010, 10:19
Цитата(djnoob @  7.7.2010,  10:17 Найти цитируемый пост)
Все переменные были без var

ну скорее ты забыл объявить var r = 0; и в цикле прибавлял значение к несуществующей переменной r

Автор: djnoob 7.7.2010, 11:13
Да, упустил деталь  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)