• Перевод кода из 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.

Ответы 5

  • Оно автоматически форматируется, когда копируете в редактор кода
    • Автор:

      vargas
    • 5 лет назад
    • 0
  • Вот только америк открывать не надо. Не только у Вас оно так вставляется, но другие же находят способы.
  • Не понимаю, в чем проблема. Я сделал относительно нелегкую задачку за относительно маленькое кол-во баллов, а моим решением явно довольны (мой ответ помечен, как лучший). Поскольку это единичная просьба перевода кода, никто другой этим ответом пользоваться не будет. Тогда зачем мне терять на форматирование? Я учел ваше замечание и отныне ко всем ответам с кодом прикрепляю отформатированный текстовый файл.
    • Автор:

      bebe73
    • 5 лет назад
    • 0
  • Ладно, пусть Вас модераторы на ум наставляют, если не хотите совеу внять.
  • *совету
    • Автор:

      maya95
    • 5 лет назад
    • 0
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years