Вычисление интеграла с заданной точностью на С++

Составить программу на языке программирования С++ и блок-схему для решения следующей задачи:

Вычислить интеграл с заданной точностью e= 0,001. Используем формулу Симпсона.

Интеграл:блок-схема алгоритма программы вычисления интеграла  n=20 - количество отрезков

 

По формуле Симпсона: 

формула Симпсона вычисления интеграла

Блок-схема алгоритма вычисления интеграла

Разработаем алгоритм программы нахождения интеграла с заданной точностью в  виде блок-схемы:

 блок-схема алгоритма программы вычисления интеграла

Текст программы решения задачи на С++

В среде программирования Borland C++ 3.1 вводим текст программы на Си ++:

#include <stdio.h>
#include <conio.h>
#include <math.h>
// функция для вычисления интеграла
float Integ(float z)
{
return pow(log(z),2)/z;//возвращаемое значение
}

//формула Симпсона
float S2n(int n,float a,float b)
{
int i=1;
float sum=0,h;
h=(b-a)/(2*n);
for(i=1;i<=(2*n-1);i++)
sum+=(3+pow(-1,i+1))*Integ(a+i*h);
return h/3*(Integ(a)+Integ(b)+sum);
}

// главная функция
void main()
{
float a, b, e=0.001;// объявление переменных
int n=20;
a=3.14/2;
b=3.14;
while (fabs(S2n(4*n,a,b)-S2n(2*n,a,b))>=e) // цикл
{
n*=2;
}
printf("S4n=%f",S2n(4*n,a,b)); // вывод результатов
getch();
}

Результат:

 результат вычисления интеграла

Нажимаем клавиши CTRL+F9 для компиляции и запуска на выполнение программы. Получаем  значение интеграла≈0,469 :

Программа начинается с комментария, который заключается между символами /* и */.Далее идут директивы препроцессора, которые дают указание препроцессору подключить к программе заголовочный файл stdio.h с описанием функций ввода-вывода и заголовочный файл math.h с описанием математических функций.

Программа состоит из трех функций: пользовательской функции Integ(float z), float S2n(int n,float a,float b) и обязательной функции main(). Функция main() не воз¬вращает никаких значений и поэтому она объявляется с ключевым словом void. В отличие от функции main(), функции Integ и S2n возвращают вещественные значения и объявляются с ключевым словом float. Тела функций являются блоками и поэтому ограничены фигурными скобками.В определении функции Integ участвует вещественная переменная z, которая является формальным параметром этой функции. Далее оператор return используется для возврата числового значения подинтегрального выражения в вызывающую функцию.

В определении функции S2n участвуют вещественные переменныя n, a, b. В теле функции организован цикл для подсчета суммы ряда для чего вызывается функция Integ. Далее оператор return используется для возврата числового значения по формуле Симпсона в вызывающую функцию.

В теле функции main() объявляются вещественные переменные: a, b - для обозначения границ отрезка интегрирования], е – точность вычисления интеграла.

Затем в проверке условия оператора цикла while осуществляется вызов функции S2n для 4*n и для 2*n. В теле цикла параметр n увеличивается в два раза. После завершения цикла выводится результат при помощи функции printf() на стандартное устройство вывода. Далее тело функции main() закрывается фигурной скобкой. На этом программа заканчивается.