Форум программистов, компьютерный форум CyberForum.ru

Поправить код непростой программы - C++

Восстановить пароль Регистрация
 
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 405
20.03.2014, 17:33     Поправить код непростой программы #1
Здравствуйте. Написал код для вычисления интеграла методом средних прямоугольников, а он не работает. Очень прошу помочь

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
42
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
using namespace std;
double fun(double);  //прототип функции, которая передаёт имя функции в качестве параметра
double f1(double x)
{
    return atan(x)*x;
}
 
double f2(double x)
{
    return pow(2,x)/(1-pow(4,x));
}
 
double f3(double x)
{
    return 1/(1+sqrt(2.0*x));
}
 
double pr (double (*fun)(double),double a,double b,double eps)
{
    int n=4;
    double I=0;double I2,S,xi,h=0;
   do{
       for(n=4; ;)
     {
   h=(b-a)/n;
   xi=a+h+h/2;
   S=h*f1(xi);
   I+=S;
     }
       for(int n=n*2; ;)
   {
   h=(b-a)/n;
   xi=a+h+h/2;
   S=h*f1(xi);
   I2+=S;
   }
   } while (abs(I-I2)>=eps); 
    I=I2;
    cout<<I;
}
 
int main ()
{
    setlocale(0,"");
    cout<<pr(f1,0.0,1.6,0.00001)+pr(f2,-2.0,-1.3,0.00001)+pr(f3,0.0,1.0,0.00001)<<endl;
    system("pause");
    return 0;
}
Миниатюры
Поправить код непростой программы  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2014, 17:33     Поправить код непростой программы
Посмотрите здесь:

перевод из одной системы счисления в другую( помогите поправить код) C++
Сортировка в лексографическом порядке(только чуть поправить код) C++
Поправить код C++
Поправить код для вращения C++
Разработка программы для вычисления объема геометрических фигур; вычисление результата 'непростой' формулы C++
Код программы C++
Необходимо поправить код C++
C++ Поправить немного код
Нужно поправить код C++
Поправить код программы C++
Поправить код программы C++
C++ Поправить код программы

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
20.03.2014, 18:12     Поправить код непростой программы #2
Цитата Сообщение от avatar1870 Посмотреть сообщение
for(n=4;
Цитата Сообщение от avatar1870 Посмотреть сообщение
for(int n=n*2;
Цитата Сообщение от avatar1870 Посмотреть сообщение
он не работает
бесконечные циклы убери. И вообще, если вдруг подобные конструкции понадобятся (не этот случай), но в качестве них for не особо смотрится, скажу я тебе.

Вот так должен (примерно) выглядеть один участок (у тебя их 2, сам исправишь)
C++
1
2
3
4
5
   h=(b-a)/n;
  for(int i=0; i<n; ++i) {
     xi=a+h+h/2;
     I+=h*f1(xi);
  }
Раз на то пошло, еще скажу: второй (для I2) такой же, только цикл до n*n, а h уже определено.
Кликните здесь для просмотра всего текста
А вообще обычно указывают не точность, а количество разбиений, ну да ладно.
avatar1870
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 405
20.03.2014, 18:18  [ТС]     Поправить код непростой программы #3
Поправил, а насчёт остального не совсем догнал(((

И нам нужно сделать именно с точностью

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
#include <conio.h>
using namespace std;
double fun(double);  //прототип функции, которая передаёт имя функции в качестве параметра
double f1(double x)
{
    return atan(x)*x;
}
 
double f2(double x)
{
    return pow(2,x)/(1-pow(4,x));
}
 
double f3(double x)
{
    return 1/(1+sqrt(2.0*x));
}
 
double pr (double (*fun)(double),double a,double b,double eps)
{
    int n=4;
    double I=0;double I2,S,xi,h=0;
   do{
       for(n=4; ;)
     {
   h=(b-a)/n;
  for(int i=0; i<n; ++i) {
     xi=a+h+h/2;
     I+=h*f1(xi);
  }
     }
       for(int n=n*2; ;)
   {
    h=(b-a)/n;
  for(int i=0; i<n; ++i) {
     xi=a+h+h/2;
     I+=h*f1(xi);
  }
   }
   } while (abs(I-I2)>=eps); 
    I=I2;
    cout<<I;
}
 
int main ()
{
    setlocale(0,"");
    cout<<pr(f1,0.0,1.6,0.00001)+pr(f2,-2.0,-1.3,0.00001)+pr(f3,0.0,1.0,0.00001)<<endl;
    system("pause");
    return 0;
}
vlad3996
6 / 6 / 3
Регистрация: 27.10.2013
Сообщений: 14
20.03.2014, 18:53     Поправить код непростой программы #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <iomanip>
#include <math.h>
#include <iomanip>
using namespace std;
double fun(double);     
double f1(double x)
{
    return atan(x)*x;
}
 
double f2(double x)
{
    return pow(2,x)/(1-pow(4,x));
}
 double f3(double x)
{
    return 1/(1+sqrt(2.0*x));
}
double sr_pr (double (*fun)(double),double a,double b,double eps)
{
    double c,f1,f2=0.0,d,s;
    long n=4;
    d=(b-a)/n;
    c=a;
    for(int i=1;i<=n;i++)
        f2=f2+fun(c+d*i-d*0.5);
    f2*=d;
    do
    {
        c=a;
        f1=f2;
        f2=0;
        n*=2;
        d=(b-a)/n;
        for(int i=1;i<=n;i++)
            f2=f2+fun(c+d*i-d*0.5);
        f2=f2*d;
    }
    while(fabs(f2-f1)>eps);
    return f2;
}
int main ()
{
    setlocale(LC_CTYPE,"rus");
    double eps;
    cout<<"Введите eps "<<endl;
    cin>>eps;
    cout<<sr_pr(f1,0.0,1.6,eps)+sr_pr(f2,-2.0,-1.3,eps)+sr_pr(f3,0.0,1.0,eps)<<endl;
    system("pause");
    return 0;
}
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
21.03.2014, 16:13     Поправить код непростой программы #5
Цитата Сообщение от avatar1870 Посмотреть сообщение
Поправил
Я бы так не сказал. Ты просто вставил мой код в свой проект, ничего у себя не удалив. Думать надо хоть немного, епт...
Yandex
Объявления
21.03.2014, 16:13     Поправить код непростой программы
Ответ Создать тему
Опции темы

Текущее время: 06:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru