0 / 0 / 0
Регистрация: 31.01.2021
Сообщений: 99
1

Вычисление интегралов методом трапеций

17.10.2021, 16:24. Показов 423. Ответов 4
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста. Делал задание и не могу найти ошибку в коде, как я понял в 3 задании. Вот само 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
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <math.h>
#include <ctime>
#include <cstdlib>
#include <stdlib.h>
using namespace std;
 
void task1();
void task2();
double task3(double (*F)(double), int a, int b, int n);
double tr(double y, double a, double b, int n) { return ((b - a) / (2 * n) * y); };
double first(double x) { return 1 / (3 * x * x - 2 * x + 4); };
double second(double x) { return cos(x) / (1 + sin(x) * sin(x)); };
 
int main()
{
    int vibor;
    cout << "Select a task (1-3) // Exit(4)" << endl;
    vvod:
    cin >> vibor;
    if (vibor == 1)
    {
        task1();
    }
    else if (vibor == 2)
    {
        task2();
    }
    else if (vibor == 3)
    {
        task3(first, -1, 3, 35);
    }
    else if (vibor == 4)
    {
        exit;
    }
    else
    {
        cout << "Wrong number! Try again." << endl;
        goto vvod;
    }
}
 
void print(int** mas)
{
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cout << *(*(mas + i) + j) << " ";
        }
        cout << "\n";
    }
}
void print2(int* mas, int n)
{
    for (int i = 0; i < n; i++)
            cout << *(mas + i) << " ";
}
void task1()
{
    int n, val, k = 0, p = 0;
    srand(time(NULL));
    cout << "Enter the length of the array:" << endl;
    cin >> n;
    int* a = new int[n];
    for (int i = 0; i < n; i++)
    {
        *(a + i)= (rand() % 9) + 1;
    }
    cout << "Source array:" << endl;
    print2(a,n);
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1; j++)
            if (*(a + j) > *(a + j + 1))
                swap(*(a + j), *(a + j + 1));
    val = INT_MIN;
    for (int i=1;i<n;i++)
        if (*(a + i) == *(a + i-1) && *(a + i) != val)
        {
            k++;
            val = *(a + i);
        }
    if (k)
    {
        int* mas2 = new int[k];
        val = INT_MIN;
        for (int i=1; i<n;++i)
            if (*(a + i) == *(a + i-1) && *(a + i) != val)
            {
                *(mas2+p++) = *(a + i);
                val = *(a + i);
            }
        cout << endl << "New array:" << endl;
        print2(mas2, k);
        delete[]mas2;
    }
    delete[]a;
}
void task2()
{
    int n = 10;
    srand(time(NULL));
    int** a = new int* [10];                                      
    for (int i = 0; i < 10; i++)
        *(a + i) = new int[10];
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            *(*(a + i) + j) = (rand() % 9)+1;
        }
    }
    cout << "Source array:" << endl;
    print(a);
    for (int i = 0; i < n-1; i++)
    {
        for (int j = 0; j < n-i-1; j++)
        {
            if (*(*(a + j) + 0) < *(*(a + j + 1) + 0))
                swap(*(a + j), *(a + j + 1));    //не занаю, можно ли swap использовать. Через tmp знаю как сделать перестановку, но так меньше строк, в случае чего исправлю 
        }
    }
    cout << "Sorted array:" << endl;
    print(a);
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
}
double task3(double (*F)(double),int a, int b, int n)
{
    double y, dy, integral;
    dy = (b - a) / n;
    y += F(a) + F(b);
    for (int i = 1; i < n; i++) { y += 2 * (F(a + dy * i)); }
    integral = ((b - a) / (2 * n) * y);
    cout << integral;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.10.2021, 16:24
Ответы с готовыми решениями:

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

Вычисление интеграла методом прямоугольника и методом трапеций
Есть 2 кода. Вычисление методом прямоугольника и вычисление методом трапеций. Написал два кода. Но...

Вычисление интегралов методом прямоугольников
нужно набрать эти интегралы через функции, прошу помощи

Вычисление определенных интегралов методом симпсона
https://www.cyberforum.ru/members/1580365/albums/942/7285.png Не понимаю как реализовать этот...

Вычисление определенных интегралов методом прямоугольников
Дана тема: Вычисления определенных интегралов методом прямоугольников. К примеру, дан...

4
0 / 0 / 0
Регистрация: 31.01.2021
Сообщений: 99
17.10.2021, 16:26  [ТС] 2
Это первое и второе задание, но они вроде как работали, до добавления 3 задачи
Вычисление интегралов методом трапеций

 Комментарий модератора 
П.5.18.Правил
Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
Перепечатайте
0
0 / 0 / 0
Регистрация: 31.01.2021
Сообщений: 99
17.10.2021, 17:04  [ТС] 3
Вот последняя версия, но все равно выдает 0 в 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
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <iostream>
#include <math.h>
#include <ctime>
#include <cstdlib>
#include <stdlib.h>
using namespace std;
 
void task1();
void task2();
double task3(double (*F)(double), int a, int b, int n);
double first(double x) { return 1 / (3 * x * x - 2 * x + 4); };
double second(double x) { return cos(x) / (1 + sin(x) * sin(x)); };
 
int main()
{
    int vibor;
    cout << "Select a task (1-3) // Exit(4)" << endl;
    vvod:
    cin >> vibor;
    if (vibor == 1)
    {
        task1();
    }
    else if (vibor == 2)
    {
        task2();
    }
    else if (vibor == 3)
    {
       cout << task3(first, -1, 3, 35) << endl;
       cout << task3(second, 1, 5, 35) << endl;
    }
    else if (vibor == 4)
    {
        exit(0);
    }
    else
    {
        cout << "Wrong number! Try again." << endl;
        goto vvod;
    }
}
 
void print(int** mas)
{
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            cout << *(*(mas + i) + j) << " ";
        }
        cout << "\n";
    }
}
void print2(int* mas, int n)
{
    for (int i = 0; i < n; i++)
            cout << *(mas + i) << " ";
}
void task1()
{
    int n, val, k = 0, p = 0;
    srand(time(NULL));
    cout << "Enter the length of the array:" << endl;
    cin >> n;
    int* a = new int[n];
    for (int i = 0; i < n; i++)
    {
        *(a + i)= (rand() % 9) + 1;
    }
    cout << "Source array:" << endl;
    print2(a,n);
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - 1; j++)
            if (*(a + j) > *(a + j + 1))
                swap(*(a + j), *(a + j + 1));
    val = INT_MIN;
    for (int i=1;i<n;i++)
        if (*(a + i) == *(a + i-1) && *(a + i) != val)
        {
            k++;
            val = *(a + i);
        }
    if (k)
    {
        int* mas2 = new int[k];
        val = INT_MIN;
        for (int i=1; i<n;++i)
            if (*(a + i) == *(a + i-1) && *(a + i) != val)
            {
                *(mas2+p++) = *(a + i);
                val = *(a + i);
            }
        cout << endl << "New array:" << endl;
        print2(mas2, k);
        delete[]mas2;
    }
    delete[]a;
}
void task2()
{
    int n = 10;
    srand(time(NULL));
    int** a = new int* [10];                                      
    for (int i = 0; i < 10; i++)
        *(a + i) = new int[10];
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            *(*(a + i) + j) = (rand() % 9)+1;
        }
    }
    cout << "Source array:" << endl;
    print(a);
    for (int i = 0; i < n-1; i++)
    {
        for (int j = 0; j < n-i-1; j++)
        {
            if (*(*(a + j) + 0) < *(*(a + j + 1) + 0))
                swap(*(a + j), *(a + j + 1));    //не занаю, можно ли swap использовать. Через tmp знаю как сделать перестановку, но так меньше строк, в случае чего исправлю 
        }
    }
    cout << "Sorted array:" << endl;
    print(a);
    for (int i = 0; i < n; i++)
        delete[]a[i];
    delete[]a;
}
double task3(double (*F)(double),int a, int b, int n)
{
    double y, dy, integral;
    dy = (b - a) / n;
    y = F(a) + F(b);
    for (int i = 1; i < n; i++) { y += 2 * (F(a + dy * i)); }
    integral = ((b - a) / (2 * n) * y);
    return integral;
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
17.10.2021, 17:11 4
zxc1by1, зачем Вы в код добавляете третью задачу ? это совершенно разные задачи и для каждой свой код.
Вам такое задание дали - объединить коды или Вы сами решили сделать так ?
0
0 / 0 / 0
Регистрация: 31.01.2021
Сообщений: 99
17.10.2021, 17:52  [ТС] 5
Сам понимаю, что лучше отдельный код сделать, но такое задание, по другому даже проверять не станут)

Добавлено через 2 минуты
Ошибка в функции task3, но я не могу понять какая. Возможно я некорректно передаю в нее значения first и second

Добавлено через 35 минут
Подскажите, корректно ли в task3 передаются функции first и second? Или ошибка в другом?
0
17.10.2021, 17:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2021, 17:52
Помогаю со студенческими работами здесь

Вычисление интеграла методом трапеций
Помогите плиз найти ошибки #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt;...

Вычисление интеграла методом трапеций
Ребят помогите пожалуста, я забыла как методом трапеции делать. Гайды не помогают. Методом...

Вычисление интеграла методом трапеций
Задали в вузе задачу решить интеграл методом трапеций... Всё бы хорошо, если бы не тот факт, что...

Вычисление интеграла методом трапеций
Составить программу для вычисления определенного интеграция- лу: s=\int_{a}^{b}f(x)dx;согласно...

Вычисление определенного интеграла методом трапеций
\int_{a}^{b}x^2tgdx Добавлено через 44 секунды Необходимо решить данный интеграл методом...

Вычисление определенного интеграла методом трапеций
Как можно найти определенный интеграл по методу Трапеций в си? \int\limits_{0}^{4} \frac{ 2x + 1}{...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru