Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
iluxa1810
13 / 13 / 5
Регистрация: 03.09.2011
Сообщений: 1,026
#1

Где-то допустил ошибку (решение интегралов методов Симпсона) - C++

18.12.2012, 16:58. Просмотров 519. Ответов 9
Метки нет (Все метки)

Написал программу по решению интегралов методов Симпсона ,но где-то допустил ошибку.
Подставляю значения уже решенного в ручную премера ,а программа выдает намного больший ответ...
А так же каждый раз при вводе одних и тех же данных ,программа выдает разный ответ.
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
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{
    int x,a,b,h,c,g1,g2,f=0;
    cout<<"Vvedite a,b,h"<<endl;
    cin>>a>>b>>h;
    float n=(static_cast<float>(b-a))/h;
    for (int i=0;i<=n;i++)
    {
    x=a+i*h;
    f=(x*x+1);
    if ((i==0) || (i==n))
        c=f+c;
        else
        if (i%2==0)
        g2=f+g2;
    else
        g1=g1+f;
 
    }
    float sum=(static_cast<float>(h)/3)*(c+4*g1+2*g2);
    cout<<fixed;
cout<<setprecision(3);
cout<<"Otvet"<<" "<<sum<<endl;
 
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2012, 16:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Где-то допустил ошибку (решение интегралов методов Симпсона) (C++):

Где я допустил ошибку? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;iomanip&gt; using namespace std; struct time { int hour; int min; int sec ...

Выполняя задания из книги Стенли Липпмана допустил ошибку. Не могу понять где. - C++
Выполняя задания из книги Стенли Липпмана не могу понять где ошибка в коде с оператором While /*#include&lt;iostream&gt; using namespace...

допустил ошибку, в перезагрузке операций - C++
На первыйвзгляд код чистый и ошибок быть не должно, вот код: #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;windows.h&gt; ...

Какую ошибку я допустил в представленном коде? - C++
// Native libraries #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;iostream&gt; // I don't know, what it the hacking code ...

Вычисление значения трех определенных интегралов методом трапеций или методом Симпсона - C++
Всем привет, нужна конкретная помощь по написанию проги по такому условию. Написать программу, вычисляющую значение трех определенных...

Найдите ошибку (Формула Симпсона) - C++
\int_{0,8}^{1,2}sin(2x)/{x}^{2} #include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;fstream&gt; #include &lt;windows.h&gt; using...

9
Croessmah
Ушел
13763 / 8013 / 922
Регистрация: 27.09.2012
Сообщений: 19,723
Записей в блоге: 3
Завершенные тесты: 1
18.12.2012, 17:04 #2
Цитата Сообщение от iluxa1810 Посмотреть сообщение
C++
1
2
3
4
if (i%2==0) 
  g2=f+g2; 
else 
  g1=g1+f;
g1 и g2 на при первом использовании не инициализированы
1
iluxa1810
13 / 13 / 5
Регистрация: 03.09.2011
Сообщений: 1,026
18.12.2012, 17:08  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
g1 и g2 на при первом использовании не инициализированы
В каком смысле?
Я же всем переменным в начале 0 присвоил ...
0
Croessmah
Ушел
13763 / 8013 / 922
Регистрация: 27.09.2012
Сообщений: 19,723
Записей в блоге: 3
Завершенные тесты: 1
18.12.2012, 17:20 #4
Цитата Сообщение от iluxa1810 Посмотреть сообщение
Я же всем переменным в начале 0 присвоил ...
Где?
C++
1
int x,a,b,h,c,g1,g2,f=0;
Здесь?
1
iluxa1810
13 / 13 / 5
Регистрация: 03.09.2011
Сообщений: 1,026
18.12.2012, 20:13  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Где?

Здесь?
да .

Добавлено через 2 часа 26 минут
Помогите

Добавлено через 21 минуту
Суть метода:
Допустим нам дан определенный интеграл с пределами интегрирования от 2(это a) до 11(это b) (x^2+1)dx
и шаг 2(h).
Теперь нам надо найти кол-во шагов по формуле n=(b-a)/h
Далее мы находим иксы по формуле xi=a+i*h ,что бы найти Ii надо подставить полученный xi в функцию(в данном случае это x^2+1) .
Далее мы находим g1 =это сумма I от 1 до n-1(Сумма не четных ишек)
g2=это сумма от 2 до n-2(Сумма четных ишек)
Потом подставляем в эту формулу h/3(I0+In+4g1+2g2)
И получаем ответ .
Думаю все нормально объяснил.

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
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{
    int x,a,b,h,c,g1,g2,f=0;
    cout<<"Vvedite a,b,h"<<endl;
    cin>>a>>b>>h;
    float n=(static_cast<float>(b-a))/h;
    for (int i=0;i<=n;i++)
    {
    x=a+i*h;
    f=(x*x+1);
    if ((i==0) || (i==n)) //Если i =0 или i=n ,то высчитываем их сумму отдельно
        c=f+c;
        else
        if (i%2==0) //Проверяем i на четность
        g2=f+g2; //если четная то прибавляем f к g2
    else
        g1=g1+f; //Если не четная ,то прибавляем f к g1
 
    }
    float sum=(static_cast<float>(h)/3)*(c+4*g1+2*g2);//Подставляем в формулу
    cout<<fixed;
cout<<setprecision(3);
cout<<"Otvet"<<" "<<sum<<endl;//Получаем ответ
 
 
    return 0;
}
Добавлено через 2 минуты
Где-то какая-то мелкая ошибка ,которая не бросается в глаза...
0
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
18.12.2012, 20:18 #6
C++
1
2
3
{
    int x,a,b,h,c,g1=0,g2=0,f=0;
    cout<<"Vvedite a,b,h"<<endl;
1
_andrew_
22 / 22 / 3
Регистрация: 14.11.2012
Сообщений: 64
18.12.2012, 20:19 #7
Croessmah чертовски прав)
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
#include<iostream>
#include<math.h>
#include<iomanip>
#include<conio.h>
using namespace std;
int main()
{
    int x=0;
    int a=0;
    int b=0;
    int h=0;
    int c=0;
    int g1=0;
    int g2=0;
    int f=0;
    cout<<"Vvedite a,b,h"<<endl;
    cin>>a>>b>>h;
    float n=(static_cast<float>(b-a))/h;
    for (int i=0;i<=n;i++)
    {
    x=a+i*h;
    f=(x*x+1);
    if ((i==0) || (i==n))
        c=f+c;
        else
        if (i%2==0)
        g2=f+g2;
    else
        g1=g1+f;
 
    }
    float sum=(static_cast<float>(h)/3)*(c+4*g1+2*g2);
    cout<<fixed;
cout<<setprecision(3);
cout<<"Otvet"<<" "<<sum<<endl;
 
 getch();
    return 0;
}
1
iluxa1810
13 / 13 / 5
Регистрация: 03.09.2011
Сообщений: 1,026
18.12.2012, 20:29  [ТС] #8
Цитата Сообщение от Дмитрий 93 Посмотреть сообщение
C++
1
2
3
{
    int x,a,b,h,c,g1=0,g2=0,f=0;
    cout<<"Vvedite a,b,h"<<endl;
А разве если через запятую написать,а в конце = 0 ,то не вся строка к 0 прировняется?

Добавлено через 7 минут
Цитата Сообщение от _andrew_ Посмотреть сообщение
Croessmah чертовски прав)
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
#include<iostream>
#include<math.h>
#include<iomanip>
#include<conio.h>
using namespace std;
int main()
{
    int x=0;
    int a=0;
    int b=0;
    int h=0;
    int c=0;
    int g1=0;
    int g2=0;
    int f=0;
    cout<<"Vvedite a,b,h"<<endl;
    cin>>a>>b>>h;
    float n=(static_cast<float>(b-a))/h;
    for (int i=0;i<=n;i++)
    {
    x=a+i*h;
    f=(x*x+1);
    if ((i==0) || (i==n))
        c=f+c;
        else
        if (i%2==0)
        g2=f+g2;
    else
        g1=g1+f;
 
    }
    float sum=(static_cast<float>(h)/3)*(c+4*g1+2*g2);
    cout<<fixed;
cout<<setprecision(3);
cout<<"Otvet"<<" "<<sum<<endl;
 
 getch();
    return 0;
}
Спасибо,все работает .
0
Дмитрий 93
74 / 59 / 5
Регистрация: 03.06.2011
Сообщений: 309
18.12.2012, 20:35 #9
Цитата Сообщение от iluxa1810 Посмотреть сообщение
А разве если через запятую написать,а в конце = 0 ,то не вся строка к 0 прировняется?
с чего бы это? присваивание нулю это a=0, перечисление переменных заданного типа через запятую идет.
0
iluxa1810
13 / 13 / 5
Регистрация: 03.09.2011
Сообщений: 1,026
18.12.2012, 20:55  [ТС] #10
А еще вопрос .Вот я пересчитал в ручную от 2(это a) до 11(это b) (x^2+1)dx и получил ровно 400 ,
а программа выдает 386.667 . Почему?

Добавлено через 9 минут
Прога считает правильно,я обсчитался на 12 .
Все спасибо .
1
18.12.2012, 20:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2012, 20:55
Привет! Вот еще темы с ответами:

Найти ошибку в программе. Интеграл по формуле Симпсона, - C++
посмотрите правильно ли выполнил задание // Lab14Y.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; ...

Не могу найти ошибку в коде (Численное интегрирование методом Симпсона) - C++
Нужно предусмотреть обработку ситуации, когда заданная точность не может быть достигнута. Пытаюсь прервать выполнение расчётов при помощи...

Где размещать реализацию методов класса? - C++
привет. читаю книжку по С++. автор Либерти. в ней куча опечаток повсюду. наткнулся на очередную непонятку. то ли я не врубаюсь, то ли у них...

где допустил ошибку? - JavaScript
при наведении на слово, скрипт работает, при наведении на картинку, нет, подскажите, что не так сделал? &lt;html&gt; &lt;head&gt; &lt;style&gt; ...


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

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

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