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