Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Г Илья А
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 33
1

Ошибка в коде!

10.11.2016, 10:39. Просмотров 469. Ответов 5
Метки нет (Все метки)

Здравствуйте! Помоги пожалуйста найти ошибку в коде. Между ответами большое расхождение, не должно быть такое!
Задание:
Даны вещественные числа a, b. Значения функции (согласно вариантам) записать в массив. Вычислить значение интеграла, используя:
1) Формулу трапеций:
I1=h*[f(a)/2+f(a+h)+f(a+2h)+…+f(a+(n-1)h)+f(b)/2]

2) Формулу Симпсона:
I2=h/3*(f(a)+f(b)+4*(f(a+h)+f(a+3h)+…+f(a+(n-1)h))+2*(f(a+2h)+f(a+4h)+…+f(a+(n-2)h)))
h=(b-a)/n, n=100.

f(x)=(2.5x2-0.1)/(tg x+sin x); a=4; b=6;
Программный код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
 
int main()
{
 setlocale(LC_ALL,"Rus");
const int n=100;
double a=4, b=6;
double h,x;
double F[n],I1,I2,tmp;
int i;
h=(b-a)/n;
 
for(i=0,x=a; i<n; i++,x+=h)
 F[i]=(2.5*pow(x,2)-0.1)/(tan(x)+sin(x));
//формула трапеции
I1 = 0;
for(i=1;i<n-1;i++)
I1 += F[i];
I1 += F[0]/2 + F[n-1]/2;
I1 *= h;
//формула Симпсона
I2 = 0;
for(i=1; i<n; i+=2)
I2 += F[i];
I2 *= 4;
tmp = 0;
for(i=2; i<n-1; i+=2)
 tmp += F[i];
I2 += tmp*2 + F[0] + F[n-1];
I2 *= h/3;
 
printf("\n Интеграл по формуле трапеции равен = %f \n",I1);
printf("\n Интеграл по формуле Симпсана равен = %f \n",I2);
 
getch();
return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2016, 10:39
Ответы с готовыми решениями:

Ошибка в коде
Помогите найти ошибку в коде программы. Зарание спасибо. =) #include &lt;stdio.h&gt; #include...

Ошибка в коде си
Добрый вечер,было задание сделать мини меню из 5 пунктов,под темой фильмов,то есть выбираешь номер...

Ошибка в коде
Подскажите пожалуйста, почему после прохождения цикла for в input выдаёт ошибку: &quot;Необратотанное...

Ошибка в коде си
Добрый день,буду благодарен за помощь в данном коде,выдает ошибку. return makes integer from...

Ошибка в коде
#include&lt;stdio.h&gt; #include&lt;windows.h&gt; #include&lt;locale.h&gt; #define MAX_N 100 int main() {...

5
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5728 / 2758 / 757
Регистрация: 18.10.2014
Сообщений: 4,942
10.11.2016, 11:29 2
Цитата Сообщение от Г Илья А Посмотреть сообщение
Между ответами большое расхождение
В вычислении по методу Симпсона интервал разбивают на четное количество подинтервалов N, т.е. количество точек разбиения получается нечетным: x0, x1, ..., xN (всего N+1 точек, включая концевые).

У вас в программе величина n обозначает именно количество точек разбиения. Поэтому для правильной работы метода Симпсона она должна быть нечетной. Поставьте нечетное значение и результаты должны совпасть.
0
Г Илья А
0 / 0 / 0
Регистрация: 05.02.2016
Сообщений: 33
10.11.2016, 18:50  [ТС] 3
Интересно как же быть, если преподаватель дал такое задание!
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5728 / 2758 / 757
Регистрация: 18.10.2014
Сообщений: 4,942
10.11.2016, 20:09 4
Цитата Сообщение от Г Илья А Посмотреть сообщение
Интересно как же быть, если преподаватель дал такое задание!
Не понял. Какое именно задание? Что именно в этом задании мешает вам исправить 100 на 101?
0
ferenslist
0 / 0 / 2
Регистрация: 09.10.2016
Сообщений: 131
10.11.2016, 20:34 5
Цитата Сообщение от Г Илья А Посмотреть сообщение
Формулу Симпсона
n=101
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5728 / 2758 / 757
Регистрация: 18.10.2014
Сообщений: 4,942
10.11.2016, 20:37 6
В коде есть еще одна проблема. Согласно тому, как используется n в начале (h=(b-a)/n), n - это количество отрезков разбиения. Но количество точек разбиения (включая крайние) тогда должно быть на одну больше, т.е. n+1, а не n.

Но дальше по коду n вдруг внезапно используется как количество точек разбиения (?). В результате чего количество отрезков разбиения будет n-1 и интеграл будет вычисляться на отрезке [a, b - h], а не на отрезке [a, b].

Так что сначала вам надо определиться, что такое у вас n - количество точек или количество отрезков - а потом уже танцевать от этого. А пока что имеет места каша какая-то.
1
10.11.2016, 20:37
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2016, 20:37

Ошибка в коде
Короче задание просто до жути тупое. 1. Реализовать указанную в Вашем варианте функцию. 2. В...

Ошибка в коде
Дорогие форумчане помогите! Не могу уже какой час понять почему не получается решить такое легкое...

Задача. Ошибка в коде
Дано целое позитивное число. Узнать сумма чисел введенного числа является парным числом или нет....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.