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

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

Войти
Регистрация
Восстановить пароль
 
Achakoo
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 38
#1

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

24.12.2013, 17:37. Просмотров 516. Ответов 2
Метки нет (Все метки)

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

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

Создать текстовый файл, содержащий таблицу значений заданной функции на указанном промежутке - C++
Даны вещественные числа А, В и целое число N. Создать текстовый файл, содержащий таблиц значений функции х на промежутке с шагом (В -...

Вывести строки в указанном пользователем порядке - C++
Код почти работает, но... Мы задаем ему числа и программа должна вывести строки под этими номерами. Например мы вводим 2 4 6 и оно должно...

Реализовать заполнение массива случайными числами в диапазоне, указанном пользователем (функции) - C++
Добрый день, подскажите как сделать это задание.... За ранее благодарен!!! По возможности, комментируйте каждое действие. Описать...

Как посчитать сколько на указанном пользователем диске всего файлов и папок? - C++
Дело такое: нужно как-то посчитать сколько на указанном пользователе диске всего файлов и папок. CHAR NamesDIrectory; ...

Вывести в заданном пользователем промежутке все числа Фибоначчи - C++
Всем доброго времени суток! Если можете, пожалуйста, помогите решить задачу. Условие: "Вывести в заданном пользователем промежутке все...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dimcoder
Полярный
462 / 434 / 68
Регистрация: 11.09.2011
Сообщений: 1,132
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);
2
Achakoo
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 38
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);
Спасибо огромное ... все работает даже лучше чем я думал .....
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 10:45
Привет! Вот еще темы с ответами:

Определенный интеграл - C++
Помогите пожалуйста решить интеграл. Задание - Используя метод Симпсона, составить программу вычисления определенного интеграла на...

Определенный интеграл - C++
Нужно написать программу вычисляющую интеграл от cos(x), используя циклы for и while (do..while) Можете написать, как это делать в С++...

Определенный интеграл - C++
Для заданных границ интегрирования а и b вычислите значение определенного интеграла следующего вида: \int \sin^2{x}dx = \begin{cases} ...

Определенный интеграл - C++
Необходимо численным методом найти приближенное значение определенного интеграла(скинул задание с методички на всякий). Вот прога: ...


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

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

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