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

определенный интеграл на указанном пользователем промежутке - C++

Восстановить пароль Регистрация
 
Achakoo
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 34
24.12.2013, 17:37     определенный интеграл на указанном пользователем промежутке #1
Напишите программу, вычисляющую определенный интеграл на указанном пользователем промежутке и с указанным шагом разбиения этого промежутка, методом, выбранным пользователем. Подынтегральную функцию выбирает пользователь из следующих возможных: http://s2.ipicture.ru/uploads/20131224/l74q2YNk.png Буду очень благодарен хотя бы за небольшое пояснение (комментарии)
Заранее СПАСИБО !!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 17:37     определенный интеграл на указанном пользователем промежутке
Посмотрите здесь:

Определенный интеграл C++
Определенный интеграл любой функции C++
C++ Напишите программу, вычисляющую определенный интеграл на указанном пользователем промежутке и с указанным шагом разбиения этого промежутка
C++ Определенный интеграл
Определенный интеграл C++
Определенный интеграл C++
Оператор for, без if (Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает границы) C++
Определенный интеграл методом трапеций C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
25.12.2013, 08:42     определенный интеграл на указанном пользователем промежутке #2
Ну скажем первая функция, первый метод, я бы решил так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdlib>
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    float r = 0;
    float a, b;
    float step;
    cout << "Vvedite a, b:" << endl;
    cin >> a >> b;
    cout << "Vvedite shag:" << endl;
    cin >> step;
    for (float i = a; i <= b; i+=step)         
        r += (cos(i)/(1+i))*float(step);      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    cout << r << endl; 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 1 час 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
#include <cstdlib>
#include <iostream>
#include <cmath>
 
using namespace std;
 
float func1(float a, float b, float st)
{
    float r = 0;
    for (float i = a; i <= b; i+=st)         
        r += (cos(i)/(1+i))*st;      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    return r;
}
 
int main(int argc, char *argv[])
{
    float a, b;
    float step;
    cout << "Vvedite a, b:" << endl;
    cin >> a >> b;
    cout << "Vvedite shag:" << endl;
    cin >> step;
 
    cout << func1(a, b, step) << endl; 
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 1 час 7 минут
Вот полностью. Не могу гарантировать на 100% правильность left, right, trapeze, хотя в онлайн калькуляторах интегралов примерно такие же ответы.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <cstdlib>
#include <iostream>
#include <cmath>
 
using namespace std;
 
float func1(float x)
{
    return cos(x)/(1+x);
}
 
float func2(float x)
{
    return pow((x-sin(x)), 3);
}
 
float func3(float x)
{
    return pow(1-x, 1/3);
}
 
float func4(float x)
{
    return log(sin(x));
}
 
float left(float a, float b, float st, float (*pf)(float))
{
    float r = 0;
    for (float i = a; i <= b-st; i+=st)         
        r += pf(i)*st;      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    return r;
}
 
float right(float a, float b, float st, float (*pf)(float))
{
    float r = 0;
    for (float i = a+st; i <= b; i+=st)         
        r += pf(i)*st;      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    return r;
}
 
float trapeze(float a, float b, float st, float (*pf)(float))
{
    float r = 0;
    for (float i = a; i <= b; i+=st)         
        r += 0.5 * st * (pf(i)+pf(i+st));      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    return r;
}
 
int main(int argc, char *argv[])
{
    float a, b;
    int formula, method;
    float step;
    float (*pf)(float); 
    cout << "Vvedite a, b:" << endl;
    cin >> a >> b;
    cout << "Vvedite shag:" << endl;
    cin >> step;
    cout << "Kakuyu formulu(1-4)?" << endl;
    cin >> formula;
    cout << "Kakoy metod(1-3)?" << endl;
    cin >> method;
    
    switch(formula)
    {
        case 1: pf = func1;break;
        case 2: pf = func2;break;
        case 3: pf = func3;break;
        case 4: pf = func4;break;
        default: {pf = func1; cout << "Vveden neverniy nomer functsii. Vybrana pervaya.";} break;
    }
    
    cout << "Otvet = ";
    switch(method)
    {
        case 1: cout << left(a, b, step, pf) << endl; ;break;
        case 2: cout << right(a, b, step, pf) << endl; ;break;
        case 3: cout << trapeze(a, b, step, pf) << endl; ;break;
        default: {cout << "Vveden neverniy nomer metoda. Vybran perviy(levyh pryamougol'nikov).\n"; cout << left(a, b, step, pf);} break;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 11 часов 42 минуты
C++
1
return pow(1-x, 1/3);
надо заменить на
C++
1
return pow(1-x, 1.0/3);
Achakoo
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 34
25.12.2013, 10:45  [ТС]     определенный интеграл на указанном пользователем промежутке #3
Цитата Сообщение от dimcoder Посмотреть сообщение
Ну скажем первая функция, первый метод, я бы решил так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <cstdlib>
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    float r = 0;
    float a, b;
    float step;
    cout << "Vvedite a, b:" << endl;
    cin >> a >> b;
    cout << "Vvedite shag:" << endl;
    cin >> step;
    for (float i = a; i <= b; i+=step)         
        r += (cos(i)/(1+i))*float(step);      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    cout << r << endl; 
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 1 час 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
#include <cstdlib>
#include <iostream>
#include <cmath>
 
using namespace std;
 
float func1(float a, float b, float st)
{
    float r = 0;
    for (float i = a; i <= b; i+=st)         
        r += (cos(i)/(1+i))*st;      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    return r;
}
 
int main(int argc, char *argv[])
{
    float a, b;
    float step;
    cout << "Vvedite a, b:" << endl;
    cin >> a >> b;
    cout << "Vvedite shag:" << endl;
    cin >> step;
 
    cout << func1(a, b, step) << endl; 
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 1 час 7 минут
Вот полностью. Не могу гарантировать на 100% правильность left, right, trapeze, хотя в онлайн калькуляторах интегралов примерно такие же ответы.
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <cstdlib>
#include <iostream>
#include <cmath>
 
using namespace std;
 
float func1(float x)
{
    return cos(x)/(1+x);
}
 
float func2(float x)
{
    return pow((x-sin(x)), 3);
}
 
float func3(float x)
{
    return pow(1-x, 1/3);
}
 
float func4(float x)
{
    return log(sin(x));
}
 
float left(float a, float b, float st, float (*pf)(float))
{
    float r = 0;
    for (float i = a; i <= b-st; i+=st)         
        r += pf(i)*st;      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    return r;
}
 
float right(float a, float b, float st, float (*pf)(float))
{
    float r = 0;
    for (float i = a+st; i <= b; i+=st)         
        r += pf(i)*st;      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    return r;
}
 
float trapeze(float a, float b, float st, float (*pf)(float))
{
    float r = 0;
    for (float i = a; i <= b; i+=st)         
        r += 0.5 * st * (pf(i)+pf(i+st));      //Stalo byt' dlina otrezkov (a-b)/n i est' shag
    return r;
}
 
int main(int argc, char *argv[])
{
    float a, b;
    int formula, method;
    float step;
    float (*pf)(float); 
    cout << "Vvedite a, b:" << endl;
    cin >> a >> b;
    cout << "Vvedite shag:" << endl;
    cin >> step;
    cout << "Kakuyu formulu(1-4)?" << endl;
    cin >> formula;
    cout << "Kakoy metod(1-3)?" << endl;
    cin >> method;
    
    switch(formula)
    {
        case 1: pf = func1;break;
        case 2: pf = func2;break;
        case 3: pf = func3;break;
        case 4: pf = func4;break;
        default: {pf = func1; cout << "Vveden neverniy nomer functsii. Vybrana pervaya.";} break;
    }
    
    cout << "Otvet = ";
    switch(method)
    {
        case 1: cout << left(a, b, step, pf) << endl; ;break;
        case 2: cout << right(a, b, step, pf) << endl; ;break;
        case 3: cout << trapeze(a, b, step, pf) << endl; ;break;
        default: {cout << "Vveden neverniy nomer metoda. Vybran perviy(levyh pryamougol'nikov).\n"; cout << left(a, b, step, pf);} break;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
Добавлено через 11 часов 42 минуты
C++
1
return pow(1-x, 1/3);
надо заменить на
C++
1
return pow(1-x, 1.0/3);
Спасибо огромное ... все работает даже лучше чем я думал .....
Yandex
Объявления
25.12.2013, 10:45     определенный интеграл на указанном пользователем промежутке
Ответ Создать тему
Опции темы

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