Интегралы; Перевод кода на С++

Ответить
Golovastik
Сообщения: 1
Зарегистрирован: 04 июн 2009, 14:37

Здравсвуйте программисты! Подскажите пожалуйста перевести код с Паскаля на С++, просто уже замучался, не знаю как.
Мне нужно вычислить интеграл метод (правых,левых и средних прямоугольников).

Вот исходник.
1) Программа вычисления по методу левых прямоугольников.

Код: Выделить всё

Program levii;{Метод левых прямоугольников}

            uses crt;

                    var i,n:integer; a,b,h,x,xb,s:real;

        function f(x:real):real;

        begin f:=(1/x)*sin(3.14*x/2); end;

begin

           clrscr;

     write('Введите нижний предел интегрирования '); readln(a);

     write('Введите верхний предел интегрирования '); readln(b);

     write('Введите количество отрезков '); readln(n);

               h:=(b-a)/n; s:=0; xb:=a;

                      for i:=0 to n-1 do

                      begin x:=xb+i*h; s:=s+f(x)*h; end;

    writeln('Интеграл равен ',s:12:10); readln;

end.
a=1 b=2                n=10             S= 18,077
a=1 b=2               n=20             S= 18, 208
a=1 b=2               n=100           S= 18, 270
2) Программа вычисления по методу правых прямоугольников.

Код: Выделить всё

Program pravii; {Метод правых прямоугольников}

                  uses crt;

                            var i,n:integer; a,b,h,x,xb,s:real;

          function f(x:real):real;

          begin f:=(1/x)*sin(3.14*x/2); end;

begin

               clrscr;

                write('Введите нижний предел интегрирования '); readln(a);

                write('Введите верхний предел интегрирования '); readln(b);

                write('Введите количество отрезков '); readln(n);

                   h:=(b-a)/n; s:=0; xb:=a;

                              for i:=1 to n do

                               begin x:=xb+i*h; s:=s+f(x)*h; end;


       writeln('Интеграл равен ',s:12:10); readln;

end.
a=1 b=2 n=10             S=18,05455
a=1 b=2 n=20             S=18,55555
a=1 b=2 n=100           S= 18,2734
3) Программа вычисления по методу средних прямоугольников.

Код: Выделить всё

Program srednii; {Метод средних прямоугольников}

                 uses crt;

                    var i, n: integer; a, b, dx, x, s, xb : real;

        function f(x : real):real;

        begin f:=(1/x)*sin(3.14*x/2); end;

begin

                     clrscr;

         write('Введите нижний предел интегрирования '); readln(a);

         write('Введите верхний предел интегрирования '); readln(b);

         write('Введите количество отрезков '); readln(n);

               dx:=(b-a)/n; xb:=a+dx/2;

                     for i:=0 to n-1 do

                     begin x:=xb+i*dx; s:=s+f(x)*dx; end;


  write('Интеграл равен ',s:15:10); readln;

end.

a=1 b=2 n=10             S=18,07667
a=1 b=2 n=20             S=18,368
a=1 b=2 n=100           S= 18,156
Вот фото каких интегралов вычислить,уже много раз пытался, не знаю как
Вложения
1.jpg
1.jpg (9.77 КБ) 299 просмотров
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Что за пакость: не работает
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
prikolist
Сообщения: 38
Зарегистрирован: 19 ноя 2008, 13:09

___________________________________________________________________
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

[ syntax = cpp ]
Аватара пользователя
Airhand
Сообщения: 239
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

Примерно так для первой программы:

Код: Выделить всё

double f(double x)
{
   return (1/x)*sin(3.14*x/2);
}
main //не помню параметров
{
double a, b;
unsigned int n;
double h, s, xb, x;
    cout<<"Введите нижний предел интегрирования "<<std::endl;
    cin>>a;
    cout<<"Введите верхний предел интегрирования "<<std::endl;
    cin>>b;
    cout<<"Введите количество отрезков"<<std::endl;
    cin>>n;
    h = (b - a) / n;
    s = 0;
    xb = a;
    for (size_t i = 0; i<n; ++i)
    {
        x = xb + i * h; 
        s += f(x) *h; 
    };
    print("Интеграл равен %d:12:10, s); //Не помню точного названия
    scan();  //Не помню точного названия и параметров
}
Нужно ещё подключить какие-то инклуды и не помню как экран очищается.
Всё это сделать консольной версией приложения.
Я просто перевёл прогу. За её правильность ответсвености не несу.
P.S. Набирал прогу в wordpad-е. Так что, может не компилится.
Оптимизация по скорости:
#define while if
Оптимизация по размеру:
#define struct union
azrael
Сообщения: 89
Зарегистрирован: 31 май 2009, 15:30
Контактная информация:

Что-то я не пойму, чем у вас левые прямоугольники от правых принципиально отличаются.
Если еще интересно - пишите в icq 55655222, обсудим.
samec2011
Сообщения: 70
Зарегистрирован: 14 май 2009, 08:24

Стучите в асю 11один11-5шесть5шесть, обсудим.
Ответить