Не могу понять, почему неправильно считает с вложенными циклами

#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;
}

21-е условие


Ответы (1 шт):

Автор решения: Zhihar

все формулы (не знаю, какую именно вы считали) выглядят так:

произведение/сумма по 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));
 }

и уже попроще и более-менее видно что к чему относится

не надо делать глобальных переменных - сами же потом по этим граблям идти будете

→ Ссылка