Смысл этой строки в коде и нужен ли это элемент

Посмотрите Практикум по программированию на языке С, обратите внимание на стр. 45 - 53

1 лайк

посмотрел и примерно прикинул

Надеюсь покажите что в итоге вышло?

1 лайк

хорошо

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <iomanip>
using namespace std;

void IRect(double A, double B, double E, double &I, int &N)
//численное интегрирование функций методом средних прямоугольников
//A,B - интервал интегрирования
//E - заданная точность
//Y - значение интеграла
//N - число отрезков разбиения
{
    double Res, //значение интеграла
           ts, //погрешность
           h, //шаг
           z, //значение интеграла на предыдущем шаге
           s, //интегральная сумма
           x; //значение аргумента
    int j; //параметр цикла
    A = 0; //начальный промежуток
    B = M_PI; //конечный промежуток
    N = 2; //начальное число отрезков разбиения
    Res = 1E10; //начальное значение интеграла
    E = 0.001; //точность измерения
    do //цикл вычисления интеграла с заданной точностью
    
    {
        N = N * 2; //удваиваем число отрезков разбиения
        z = Res; //запомнили предыдущее значение интеграла
        h = (B - A) / N; //шаг
        s = 0; //значение интегральной суммы
        for (j = 1; j <= N; j++) //вычисление интеграла по формуле средних
        {                        //прямоугольников для заданного числа отрезков
            
            x = A + j * h; //вычислили значение аргумента
            s = s + (5 * x * sin(x)); //добавили в интегральную сумму
        }
        Res = s * h; //текущее значение интеграла
        ts = fabs(Res - z)/3.0; //вычислили погрешность. 3 берётся по првилу Рунге, где погрешность вычисляется * на 1/3 
    }
    while (ts >= E); //пока погрешность не станет меньше точности
    I = Res - ts;
}

int main(int argc, char** argv)
{
    double a, b;//пределы интегрирования
    double eps;//точность интегрирования
    double I;//значение интеграла
    int N;//число отрезков разбиения
    setlocale(LC_ALL,"Russian");
    IRect(a, b, eps, I, N);
    cout << "Значение интеграла: " << fixed << setprecision(5)<< I << endl;//вывод интеграла
    cout << "Число отрезков разбиения: " << N << endl;//вывод интеграла
    system("pause");//задержка экрана до нажатия любой клавиши
    return 0;
}

можете пожалуйста помочь с кодом?, а то не понимаю
У меня в ответе выходит интеграл равен 17,706, при числе разбиения 128.
Если я решаю в ручную, то при таком числе разбиения у меня выходит 17,708, хотя преподователь говорит в ручном правильно Что у меня неправильно, число разбиения ?

код я делал с помощью метода средних прямоугольников, а погрешность по правилу Рунге

А как вручную?

с помощью Excel

Ср.прям.xlsx (25.8 КБ)

там в файле для 29 числа разбиения

поможете ?

Если в Экселе повторяется тот же алгоритм, что в коде, то можно в коде добавить вывод промежуточных значений на каждом шаге, чтобы понять что отличается.