Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Оператор цикла "for" не сохраняет знак результата. (https://javascript.ru/forum/misc/14202-operator-cikla-ne-sokhranyaet-znak-rezultata.html)

rjn77 05.01.2011 12:48

Оператор цикла "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>

monolithed 05.01.2011 12:55

rjn77 отформатируйте свой код с помошью тега [html]

rjn77 05.01.2011 13:24

monolithed, не понял Вас.
Но вопрос исчерпан - я нашёл свою ошибку. Не в цикле дело и не в знаке, а в том что в выражение я подставлял значение самой переменной (w), а не приравненного к переменной на каждом шаге счётчика (z)/

Всем спасибо! Извините, если отвлёк!!!

Зато теперь знаю, как считать на JS факториал и двойной факториал, кому надо, берите! :dance:

monolithed 05.01.2011 13:32

Цитата:

Сообщение от rjn77
monolithed, не понял Вас.

пробелы уберите в [ HTML ]

фунуцию факториала вынесите из цикла или запишите в нотации Function Expression:
var factorial = function(n) {
    return (n<=1) ? 1 : n*arguments.callee(n-1);
}

rjn77 05.01.2011 15:22

monolithed, да уж, грамотно кодировать мне не у кого поучиться... (((

Спасибо ещё раз!

Заодно исправил ошибки, вдруг кому пригодится... Эээ, моя функция факториала в Вашем коде притерпела изменения (и двойной факториал стал обычным), мне-то это неважно, лишь бы кто-нить не скопировал по неосторожности.


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