Чтобы понять проблему в вашей логике, сделайте это шаг за шагом. Ваша инициализация перед цикл выглядит хорошо, так что давайте начнем с самого начала цикла:
Итерация 1
for (num=1;num<=98;num=num+2) {
На данный момент ваши переменные содержат следующее:
NUM == 1, denom == 3, sum == 0 и держатель == undefined (потому что вы его не инициализировали)
Следующий отчет:
num = num+2;
num
изменения в 3-х, так что мы теперь имеем:
Num == , DENOM == 3, сумма == 0, и держатель == неопределенными.
После следующего утверждения:
denom = denom+2;
denom
изменяется от 3 до 5, так что мы имеем:
Num == 3, DENOM == , сумма == 0, и держатель == undefined.
Затем, после того, как
holder1 = num/denom;
мы имеем первую расчетную часть, которая (так как Num == 3 и DENOM == 5) 3/5, или 0,6. Вы, вероятно, заметите, что это не то, что вы намеревались, потому что согласно вашему назначению первая фракция в серии должна быть 1/3. Поэтому первая проблема с вашей логикой заключается в том, что вы добавляете 2 к обоим num
и denom
, прежде чем вычислять первую фракцию в серии.
Продолжая шаг через код, после того, как
sum= sum+holder1;
переменные содержат
Num == 3, DENOM == 5, сумма == 0,6, и держатель == 0,6.
Итерация 2
Теперь перед циклом назад для выполнения следующей итерации цикла for
, переменная num
будет увеличиваться на 2, как указано в третьем выражении в вашем определении for
петли: num=num+2
, Поэтому, когда цикл начинается для второй итерации, переменные содержат:
num == , обозначение == 5, сумма == 0.6 и держатель == 0.6.
Как и прежде, следующие два оператора приращения num
и denom
, соответственно, на 2, так что перед следующей фракции вычисляется, переменные содержат:
Num == , DENOM == , сумма == 0.6 и держатель == 0.6.
Переменная holder
затем вычисляется как num/denom
= 7/7 = 1,0 (что, конечно, не фракция, которая является частью правильной серии), и после добавления этого к sum
, у вас есть
Num == 7 , denom == 7, sum == 1.6 и holder == 1.0.
Заключение
Таким образом, есть по крайней мере две ошибки в вашей логике. Во-первых, после инициализации num
и denom
до 1 и 3, вы добавляете 2 к каждому, прежде чем вычислять их отношение. То, что вы, вероятно, должно, вместо этого добавляет 2 к каждому из num
и denom
после вы рассчитываете их соотношение, но перед тем, как вернуться к началу цикла.
Вторая ошибка, которую вы, надеюсь, заметили, как мы ступили через код, что вы добавляете 2 к num
дважды с каждым разом через петлю: один раз в нижней части цикла в соответствии с вашими for
спецификатора, и один раз в верхней части цикла. Вам нужна только одна из этих операций «шаг за шагом».
Так улучшенный цикл будет выглядеть следующим образом:
for (num=1;num<=98;num=num+2) {
holder1 = num/denom;
sum= sum+holder1;
denom = denom+2;
}