Несоответствие результатов при вычислении функции - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброе время суток. Прошу помощи у знающих людей. Есть программа вычисляющая функцию и сама программа. [404]
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
    double y,x,xk,dx,p1,p2;
    int m,n,i,k;
    printf("vvedite m,x1,xk,n\n");
    scanf("%d%lf%lf%d",&m,&x,&xk,&n);
    dx=(xk-x)/(n-1);
    printf("    #     Y           X\n");
    for(i=1;i<=m;i++)
        p1+=pow(i,2);
    for(i=1;i<=n;i++)
    {
        for(k=1;k<=m;k++)
            p2+=pow((1+k*x),2);
        y=pow(1+pow((2+p1+p2),2),1.0/4);
        printf("%6d. %6.3lf     %4.3lf\n",i,y,x);
        x+=dx;
    }
    getch();
    return 0;
}
В результате проверки видно несоответствие в результатах(на картинке изображено). Очень долго ломал голову и не нашёл ответа. Допускаю ошибку вычисления в маткаде, но сам я её не нашёл.
В программе первое число правильно, последующие уже нет(Проверка была в маткаде). Первое число: 3.47 Второе: 4.977(программа) 3.973(маткад)

Решение задачи: «Несоответствие результатов при вычислении функции»

textual
Листинг программы
#include <stdio.h>
   
   double pov (double,int);
   
   int main(void)
   {   
      double y, x, xk, dx, p1, p2;
      int m, n, i, k;
     
       puts("vvedite m,x1,xk,n");
      scanf("%d%lf%lf%d",&m,&x,&xk,&n);
      
      dx = (xk - x) / (n - 1);
      
      printf("%4c%17c%15c\n\n", '#','Y','X');
      
       for(i = 1; i <= m; ++i)
          p1 += pov(i,2);
     
       for(i = 1; i <= n; ++i)
      {   
          for( k = 1; k <= m; ++k)
              p2 += pov(( 1 + k * x),2);
          y = pov( 1 + pov((2 + p1 + p2),2),1.0 / 4);
          printf("%4d. %20.3lf     %7.3lf\n", i, y, x);
          x += dx;
     }
      return 0;
}
 
double pov (double a, int c)
 {
 int b;
 
   for (b = 0; b < c; ++b)
   if (c < 2)
   ++b;
   if (c >= 2)
   a *= a;
   return a;
  }

Объяснение кода листинга программы

  1. Включаем файл стандартного ввода/вывода
  2. В функции main() объявляем переменные: m, n, i, k, x, y, z, dx, p1, p2, xk
  3. С помощью функции scanf() считываем значения переменных m, x1, xk, n
  4. Вычисляем шаг изменения xk = (xk - x) / (n - 1)
  5. С помощью двух циклов for вычисляем значения переменных p1 и p2
  6. Вычисляем значение переменной y по формуле y = pov( 1 + pov((2 + p1 + p2),2),1.0 / 4)
  7. Выводим на экран значения переменных i, y, x с помощью функции printf()
  8. Перемещаем значение x на следующий шаг dx = (xk - x) / (n - 1)
  9. Повторяем шаги 5-8 для всех значений i от 1 до n
  10. В функции pov(a,c) объявляем переменную b и инициализируем ее значением 0
  11. В цикле for вычисляем значение переменной a по формуле a *= a
  12. Возвращаем значение переменной a

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы