С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
3 / 3 / 0
Регистрация: 10.12.2018
Сообщений: 60
1

Значения функции записать в массив и вычислить значение интеграла

28.03.2019, 13:42. Показов 4173. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть код ,преподаватель говорит что нужно использовать функции программы.Подскажите как это реализовать...


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
#include <STDIO.h>
#include <iostream>
#include <MATH.h>
#include <CONIO.h>
#define n 100
using namespace std;
int i;
float a, b, h, x, s, s1, s2, sn, f[n];
int main()
{
    a= 1; b= 20;
    h=(b-a)/n;
    f[1]=(a*a*log(a))/pow((1+a),2);
    f[100]=(b*b*log(b))/pow((1+b),2);
    for(i=1; i<n; i++)
    {
        x=(a+i*h);
        if(i%2==0)
        {
        f[i]=(x*x*log(x))/pow((1+x),2);
        s1+=f[i];   
        }
        else
        {
        f[i]=(x*x*log(x))/pow((1+x),2);
        s2+=f[i];   
        }
    
    }
    
    s=(h/3)*(f[1]+f[100]+(2*s1)+(4*s2));
    cout<<"Zhach. integrala (Simpson):"<<s<<endl;
    
    for(i=1; i<n; i++)
    {
        x=(a+i*h);
        f[i]=(x*x*log(x))/pow((1+x),2);
        sn+=f[i];
    }
    s=(h/2)*(f[1]+f[100]+2*sn);
    cout<<"Zhach. integrala (Trapecia):"<<s;
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2019, 13:42
Ответы с готовыми решениями:

Вычислить значение функции и записать в массив
Здравствуйте. Помогите, пожалуйста! Задача: Вычислить значение функции y=x2, х изменяется в...

Вычислить и записать в массив значение функции?
Вычислить и записать в массив значение функции y=a*x*2+b*x+c при изменении x от х(начальн) до...

Вычислить и записать в массив значение функции
Вычислить и записать в массив значение функции y=a*x*2+b*x+c при изменении x от х(начальн) до...

Вычислить значение интеграла от линейной функции
Вычислить значение интеграла от линейной функции, построить график подинтегральной функции,...

10
Модератор
Эксперт С++
13727 / 10923 / 6479
Регистрация: 18.12.2011
Сообщений: 29,155
28.03.2019, 13:44 2
ferrero_li, специально для Вас писано:
Образцы (шаблоны) программ для типовых задач
1
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
28.03.2019, 13:54 3
ferrero_li, массивы в С++ нумеруются с нуля (f[100]-за пределами массива). сформулируйте условие задачи и сбросьте скрин формулы.
0
3 / 3 / 0
Регистрация: 10.12.2018
Сообщений: 60
04.04.2019, 08:44  [ТС] 4
Даны вещественные числа a,b. Значения функции (согласно вариантам) записать в массив. Вычислить значение интеграла, используя:

1) Формулу трапеций
I1=h*[f(a)/2+f(a+h)+f(a+2h)+…+f(a+(n-1)h)+f(b)/2]

2) Формулу Симпсона
I2=h/3*(f(a)+f(b)+4*(f(a+h)+f(a+3h)+…+f(a+(n-1)h))+
2*(f(a+2h)+f(a+4h)+…+f(a+(n-2)h))) h=(b-a)/n, n=100.

h=(b-a)/n , n=100

задание: f(х)=х^2*ln х/(1+х)^2 a=1, b=20

Преподаватель требует вывода всех 100 элементов, как я понял. Код выводит некие странные элементы но не считает интегралы...

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
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
void Input(float* M,int k);  
void Print(float* M,int k);   
int Work(float* M,int k);
 
 
int main()
{
    int k=101;
    cout<<"Razmer massiva: "<<endl;
 
    float* A=new float[k];
    Print(A,k); 
    int s=Work(A,k);
    delete[] A;
    return 0;
}
void Input(float* M,int k)
{
    for(int i=0;i<k;i++)
    {
            float x=rand()%100;
            float y=(x*x*log(x))/((1.+x)*(1.+x));
            M[i]=y;
    }
}
 
void Print(float* M,int k)
{
    for(int i=0;i<k;i++)
    {
        cout << M[i]<< " ";
    }
    cout <<", "<<endl;
}
int Work(float* M,int k)
{int i;
float h, s, s1, s2, sn; 
char f[1];
double a,b,x;
    a= 1; b= 20;
    h=(b-a)/k;
    f[1]=(a*a*log(a))/((1.+a)*(1.+a));
    f[100]=(b*b*log(b))/((1.+b)*(1.+b));
    for(i=1; i<k; i++)
    {
        x=(a+i*h);
        if(i%2==0)
        {
        f[i]=(x*x*log(x))/((1.+x)*(1.+x));
        s1+=f[i];   
        }
        else
        {
        f[i]=(x*x*log(x))/((1.+x)*(1.+x));
        s2+=f[i];   
        }
    
    }
    
    s=(h/3)*(f[1]+f[100]+(2*s1)+(4*s2));
    cout<<"Zhach. integrala (Simpson):"<<s<<endl;
    
    for(i=1; i<k; i++)
    {
        x=(a+i*h);
        f[i]=(x*x*log(x))/((1.+x)*(1.+x));
        sn+=f[i];
    }
    s=(h/2)*(f[1]+f[100]+2*sn);
    cout<<"Zhach. integrala (Trapecia):"<<s;
    return 0;
}
0
1 / 1 / 0
Регистрация: 25.03.2019
Сообщений: 23
04.04.2019, 09:01 5
Первое, что бросилось в глаза - на 41 строчке кода объявлены переменные, которые в дальнейшем не были проинициализированы. Перед тем, как что-то с ними делать, им нужно задать значение (иначе в них будет храниться мусор)

C++
1
float h, s, s1 = 0, s2 = 0, sn = 0;
0
3 / 3 / 0
Регистрация: 10.12.2018
Сообщений: 60
04.04.2019, 10:08  [ТС] 6
Почему то начиная с int k=34 , вывод интегралов просто прекращается....
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.04.2019, 11:30 7
Цитата Сообщение от ferrero_li Посмотреть сообщение
Код выводит некие странные элементы
хорошо хоть что-то выводит Вы объявляете массив из одного (!) элемента char f[1]; и в этом символьном (!) массиве из одного элемента пытаетесь разместить 100 чисел.

замените все float на double. массив double f[100] содержит 100 элементов от f[0] (первый элемент) до f[99] (последний элемент).

если задаёте размер с клавиатуры, используйте динамический массив double*f = new double[n];
1
3 / 3 / 0
Регистрация: 10.12.2018
Сообщений: 60
04.04.2019, 13:42  [ТС] 8
Спасибо , помогло, однако можно ли как то в cout в 35 строчке сделать вывод одного знака после запятой, вроде бы массив в дабл, но все равно выводит 100 таких чисел "2.29031e-316" не очень приятно...
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.04.2019, 13:50 9
ferrero_li, сбросьте код после исправлений
0
3 / 3 / 0
Регистрация: 10.12.2018
Сообщений: 60
04.04.2019, 13:58  [ТС] 10
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
#include <iostream>
#include <cstdlib>
#include <math.h>
using namespace std;
void Input(double* M,int k);  
void Print(double* M,int k);   
int Work(double* M,int k);
 
 
int main()
{
    int k=100;
    cout<<"Razmer massiva: "<<endl;
 
    double* A=new double[k];
    Print(A,k); 
    int s=Work(A,k);
    delete[] A;
    return 0;
}
void Input(double* M,int k)
{
    for(int i=0;i<k;i++)
    {
            double x=rand()%100;
            double y=(x*x*log(x))/((1.+x)*(1.+x));
            M[i]=y;
    }
}
 
void Print(double* M,int k)
{
    for(int i=0;i<k;i++)
    {
        cout.precision(2);
        cout<< M[i]<<", ";
    }
    cout <<"\n"<<endl;
}
int Work(double* M,int k)
{
int i;
double h, s, s1 = 0, s2 = 0, sn = 0;
char f[99];
double a,b,x;
    a= 1; b= 20;
    h=(b-a)/k;
    f[0]=(a*a*log(a))/((1.+a)*(1.+a));
    f[99]=(b*b*log(b))/((1.+b)*(1.+b));
    for(i=1; i<k; i++)
    {
        x=(a+i*h);
        if(i%2==0)
        {
        f[i]=(x*x*log(x))/((1.+x)*(1.+x));
        s1+=f[i];   
        }
        else
        {
        f[i]=(x*x*log(x))/((1.+x)*(1.+x));
        s2+=f[i];   
        }
    
    }
    
    s=(h/3)*(f[0]+f[99]+(2*s1)+(4*s2));
    cout<<"Zhach. integrala (Simpson):"<<s<<endl;
    
    for(i=1; i<k; i++)
    {
        x=(a+i*h);
        f[i]=(x*x*log(x))/((1.+x)*(1.+x));
        sn+=f[i];
    }
    s=(h/2)*(f[0]+f[99]+2*sn);
    cout<<"Zhach. integrala (Trapecia):"<<s;
    return 0;
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
04.04.2019, 19:20 11
Лучший ответ Сообщение было отмечено ferrero_li как решение

Решение

ferrero_li, для вычисления интеграла массивы не нужны:
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 <cmath>
using namespace std;
 
double F(double x)
{
    return x*x*log(x)/((1.+x)*(1.+x));
}
 
double Trapezium(int n, double a, double b, double h) 
{
    double sum=F(a)/2.;
    for(int i = 1; i < n; i++)    
        sum+=F(a+i*h);
        sum+=F(b)/2.;
    return h*sum;    
}
 
double Simpson(int n, double a, double b, double h)
{
    double s1=0., s2=0.;
    
    for(int i = 1; i < n; i++)
    {
        if(i%2==0) s1+=F(a+i*h);        
        else s2+=F(a+i*h);    
    }    
    return h/3.*(F(a)+F(b)+2.*s1+4.*s2);
}  
 
int main()
{
    double a=1., b=20., n=100, h=(b-a)/n;
    
    cout << Trapezium(n,a,b,h) << "  " << Simpson(n,a,b,h) << "\n";
    
system("pause");
return 0;
}
но если нужно записать в массив - создаёте 2 массива (по условию 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
#include <iostream>
#include <cmath>
using namespace std;
 
double F(double x)
{
    return x*x*log(x)/((1.+x)*(1.+x));
}
 
double Trapezium(double *T, int n, double a, double b, double h) 
{    
    double sum=F(a)/2.;
    T[0]=F(a);
    for(int i = 1; i < n; i++)
        {
        sum+=F(a+i*h);
        T[i]=F(a+i*h);
        }
        sum+=F(b)/2.;
        T[100]=F(b);
    return h*sum;    
}
 
double Simpson(double *S, int n, double a, double b, double h)
{
    double s1=0., s2=0.;
    S[0]=F(a);
    for(int i = 1; i < n; i++)
    {
        if(i%2==0) s1+=F(a+i*h);        
        else s2+=F(a+i*h); 
        S[i]=F(a+i*h);
    } 
    S[100]=F(b);
    return h/3.*(F(a)+F(b)+2.*s1+4.*s2);
}  
 
int main()
{
    int n=100;
    double a=1., b=20., h=(b-a)/n;
    double T[101], S[101];
    
    cout << Trapezium(T,n,a,b,h) << " " << Simpson(S,n,a,b,h) << "\n\n";
    
    for(int i = 0; i <= n; i++)
      cout << T[i] << "   " << S[i] << "\n";
      cout << "\n";      
    
system("pause");
return 0;
}
массивы по 101 элементу, так как точек на одну больше чем количество отрезков n
1
04.04.2019, 19:20
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2019, 19:20
Помогаю со студенческими работами здесь

Вычислить значение интеграла для функции, заданной графически
Составить программу на языке Turbo Pascal 7.0 вычисления значения интеграла на интервале для...

Массив: Вычислить значение интеграла, используя формулу трапеций...
Даны вещественные числа a,b. Значения функции (согласно вариантам) записать в массив. Вычислить...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как проводить научные вычисления на Python
InfoMaster 15.01.2025
Python стал одним из наиболее востребованных языков программирования в области научных вычислений благодаря своей простоте, гибкости и обширной экосистеме специализированных библиотек. Научные. . .
Создание игры типа Minecraft на PyGame/Python: пошаговое руководство
InfoMaster 15.01.2025
В данном руководстве мы рассмотрим процесс создания игры в стиле Minecraft с использованием библиотеки PyGame на языке программирования Python. Этот проект идеально подходит как для начинающих. . .
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru