Не могу понять, почему неправильно считает с вложенными циклами
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n;
double s=0;
double p=1;
int d=1;
printf("Enter n:\n");
scanf("%d",&n);
for(int i=1; i<=n; i++) {
for (int j=1; j<=i; j++) {
p=p*((double)(j+2)/10);
}
d=d*2;
s=s+(p/(i*d));
}
printf("%.7f\n",s);
return 0;
}
Ответы (1 шт):
все формулы (не знаю, какую именно вы считали) выглядят так:
произведение/сумма по i от произведение/сумма по j
т.е. для цикла по j i - всего лишь некоторый внешний параметр, а все остальные данные - внутренние
теперь смотрим ваши циклы
for(int i=1; i<=n; i++) {
for (int j=1; j<=i; j++) {
p=p*((double)(j+2)/10);
}
d=d*2;
s=s+(p/(i*d));
}
вы начинаете цикл по j и вычисляете некоторый p который неожиданно тоже ВНЕШНИЙ ПАРАМЕТР, хотя он должен для каждого цикла по j быть своим
т.е. перед каждым циклом по j необходимо обнулять итоговую сумму или объединичить итоговое произведение
у вас это сделано? НЕТ - у вас p тянется с самого начала и является внешним параметром для всех циклов
Если сложно делать такие вещи в едином коде - разбейте для удобства на функции и у вас тогда будет:
for(int i=1; i<=n; i++) {
const double p = subfunc(i);
d=d*2;
s=s+(p/(i*d));
}
и уже попроще и более-менее видно что к чему относится
не надо делать глобальных переменных - сами же потом по этим граблям идти будете
