Оператор цикла "for" не сохраняет знак результата.
Добрый день! Первое предложение традиционно - я в JS новичёк :)!
Сейчас пишу скрипт, вычисляющий сумму ряда. Присутствует в знаменателе выражения и двойной факториал. В общем несколько раз проверял - и числитель и знаменатель на каждом шаге цикла считаются правильно. Частное также подсчитывается правильно на каждом шаге. А вот сумма ряда (sum) уже на втором шаге - ошибочна. Долго искал в чём дело. Оказывается, при прибавлении на очередном шаге текущего элемента суммы ряда - складываются модули значений, не учитывая, что какое-то было отрицательным, а какое-то положительным, а потом уже присваивается знак последнего элемента ряда. Простите, написал сложно. Но скрипт и код не сложные, посмотрите. Подскажите, можно ли проблему победить???!!! Заранее благодарен за советы!!! PS. Сейчас проверяю - ещё где-то ошибка есть, неправильно считает((((( <HTML> <HEAD> <TITLE> Сумма ряда </TITLE> <script type="text/javascript"> function summa() { var x = document.test.x.value; var w = document.test.w.value; var sum = 0; for (z=1; z<=w; z++){ var n=z+2; var factorial = function(n) { return (n<=1) ? 1 : n*arguments.callee(n-2); } var s= (Math.pow(-1,(z-(-1)))*(Math.pow(x, 2*z-(-3)))) / factorial(n); sum+=s; jndtn = sum } document.test.answer.value = jndtn; } </script> <BODY> <H2 align="left"> </H2> <left> <H2>Cумма ряда</H2> <h4>Задание:</h4><BR> <P> Вычислить сумму ряда<BR><BR> <FONT> <img src="Сумма ряда.JPG"</FONT><hr> </P> </left> <br> <form action="" name="test"> Введите значение переменной k:<input type="text" id="w" name="w" value="" /><br><br> Введите значение коэффициента x:<input type="text" id="x" name="x" value="" /><br><br> <input type="button" onclick="summa()" value="Ответ" /><br><br> Сумма=<input type="text" id="answer" name="answer" value="" /> </form> </BODY> </HTML> |
rjn77 отформатируйте свой код с помошью тега [html]
|
monolithed, не понял Вас.
Но вопрос исчерпан - я нашёл свою ошибку. Не в цикле дело и не в знаке, а в том что в выражение я подставлял значение самой переменной (w), а не приравненного к переменной на каждом шаге счётчика (z)/ Всем спасибо! Извините, если отвлёк!!! Зато теперь знаю, как считать на JS факториал и двойной факториал, кому надо, берите! :dance: |
Цитата:
фунуцию факториала вынесите из цикла или запишите в нотации Function Expression: var factorial = function(n) { return (n<=1) ? 1 : n*arguments.callee(n-1); } |
monolithed, да уж, грамотно кодировать мне не у кого поучиться... (((
Спасибо ещё раз! Заодно исправил ошибки, вдруг кому пригодится... Эээ, моя функция факториала в Вашем коде притерпела изменения (и двойной факториал стал обычным), мне-то это неважно, лишь бы кто-нить не скопировал по неосторожности. |
Часовой пояс GMT +3, время: 22:38. |