Перевод кода из pascal в c# (консольное приложение) : написать программу, которая позволяет вычислять определенный интеграл с формулы ньютона-котеса. код: { программа для вычисления интеграла численным методом ньютона-котеса открытого типа 4-го порядка с заданной погрешностью вычислений } program newtoncotes; {подинтегральная функция} function f(x: real): real; begin f : = sin(x); end; {вычисление интеграла на отрезке [a, b] методом ньютона-котеса открытого типа 4-го порядка} function newtoncotesopen4(a, b: real): real; const n = 4; {порядок метода} c: array [1..n - 1] of real = (2, -1, 2); {весовые коэффициенты} k = 3.0; {делитель} var res: real; h: real; {величина шага} x: real; i: integer; begin h : = (b - a) / n; res : = 0; for i : = 1 to n - 1 do begin x : = a + i * h; res : = res + c[i] * f(x); end; newtoncotesopen4 : = res * (b - a) / k; end; {вычисление интеграла на отрезке [a, b] как суммы интегралов на n подинтервалах} function sumsubintervals(a, b: real; n: integer): real; var h: real; i: integer; begin sumsubintervals : = 0; h : = (b - a) / n; for i : = 1 to n do sumsubintervals : = sumsubintervals + newtoncotesopen4(a + pred(i) * h, a + i * h); end; var a, b, {границы интегрирования} eps: real; {погрешность численного интегрирования} n: integer; {количество подинтервалов интегрирования} icur, {значение интеграла на текущем шаге итерации} ipre: real; {значение интеграла на предыдущем шаге итерации} begin a : = 0; b : = pi; eps : = 0.00001; n : = 1; icur : = sumsubintervals(a, b, n); repeat ipre : = icur; n : = 2 * n; {увеличиваем количество подинтервалов} icur : = sumsubintervals(a, b, n); writeln('i=', icur: 10: 8, ' при n=', n, ', e=', abs(icur - ipre): 10: 8); until abs(icur - ipre) < eps; writeln(''); writeln('i=', icur: 10: 8, ' при n=', n, ', e=', abs(icur - ipre): 10: 8); end.

alexeyschelin12 alexeyschelin12    3   23.09.2019 02:30    0

Ответы
Учительнотупой Учительнотупой  08.10.2020 11:15
Using System;
namespace Test{    class Program    {        static double F(double x)        {            return Math.Sin(x);        }
        static double NewtonCotesOpen4(double a, double b)        {            const int n = 4;            double[] c = {2.0, -1.0, 2.0 };            const double K = 3.0;
            double h = (b - a) / n;            double res = 0;
            double x;            for(int i = 1; i <= n - 1; i++)            {                x = a + i * h;                res += c[i - 1] * F(x);            }
            return res * (b - a) / K;        }
        static double SumSubIntervals(double a, double b, int n)        {            double res = 0;            double h = (b - a) / n;            for(int i = 1; i <= n; i++)            {                res += NewtonCotesOpen4(a + (i - 1) * h, a + i * h);            }
            return res;        }
        static void Main(string[] args)        {            double a = 0;            double b = Math.PI;            double EPS = 0.00001;
            int n = 1;            double lcur = SumSubIntervals(a, b, n);            double lpre;            do            {                lpre = lcur;                n *= 2;                lcur = SumSubIntervals(a, b, n);                Console.WriteLine("l={0} при n={1}     e={2}", Math.Round(lcur, 8), n, Math.Round(Math.Abs(lcur - lpre), 8));            } while (Math.Abs(lcur - lpre) < EPS);
            Console.WriteLine("");
            Console.WriteLine("l={0} при n={1}     e={2}", Math.Round(lcur, 8), n, Math.Round(Math.Abs(lcur - lpre), 8));        }    }}
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика