Несоответствие результатов при вычислении функции - 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д