Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/35: Рейтинг темы: голосов - 35, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 08.02.2013
Сообщений: 26
1

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

03.03.2013, 16:37. Показов 7330. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, многоуважаемые господа. Надеюсь вы захотите уделить немного времени этой задаче и воспользуетесь ниже представленным шаблоном. На этот раз передо мной стоит следующая задача: вычислить определенный интеграл методом правых прямоугольников.

Программа, вычисляющая определенный интеграл методом левых прямоугольников:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
TYPE
  Func1 = FUNCTION (x: REAL): REAL;
FUNCTION LRect(f: Func1; a, b: REAL; n: WORD): REAL;
VAR
  s, h ,x: REAL;
  i: WORD;
BEGIN
  s := 0;
  h := (b - a)/n;
  x := a;
  FOR i := 1 TO n DO
    BEGIN
      s := s + x;
      x := x + h;
    END;
    LRect := s * h;
END;
  FUNCTION s(x: REAL): REAL;
BEGIN
  s := sin(x);
END;
{MAIN PROGRAM}
VAR
  sint: REAL;
  i, j, n: WORD;
BEGIN
  FOR i := 1 TO 10 DO
    BEGIN
      n := 6;
      sint := LRect(5:0; Pi/2; n);
      WriteLn((sint: 8: 6),' ',(sint - 1));
    END;
END.
Это код моего преподавателя. Видимо, я где-то допустил ошибку, переписывая его, т.к. программу запустить не сумел и с ошибкой единственной не разобрался. Мне требуется переделать программу с использованием метода правых прямоугольников.

P.S. преподаватель переключал компилятор фри Паскаля на компилятор турбо Паскаля. Я, если честно, так и не понял зачем Думаю вам будет важно это знать. Я все же разбираюсь в этом гораздо хуже.

Добавлено через 19 часов 2 минуты
Быть может, кто-нибудь хотя бы подскажет, как избавиться от ошибки в указанной мною программе?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.03.2013, 16:37
Ответы с готовыми решениями:

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

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

Вычисление интеграла: метод средних прямоугольников
Вычислить данный интеграл методом средних прямоугольников.. I= (интеграл нижнее значение пи/6,...

Напишите программу приближенного вычисления интеграла функции f(x) = 5х2 — х + 2 методом прямоугольников
Помогите с заданием по информатике:

1
442 / 371 / 132
Регистрация: 09.09.2011
Сообщений: 1,339
05.03.2013, 16:58 2
очевидно, что в строке 30 не правильный вызов функции. и на будущее - пишите что за ошибка, а не просто - происходит ошибка.

если режим freepascal то строка 30 должна быть:
Delphi
1
sint := LRect(@s,0; Pi/2, n);
для режима турбо паскаля можно и так:
Delphi
1
sint := LRect(s,0, Pi/2, n);
но все это не имеет смысла т.к. процедурный параметр внутри функции LRect не используется

вот программа полностью - компилируется, но считает скорее всего не верно, т.к. в функции LRect что-то у тебя напутано:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
program LRECT;
 
{$mode objfpc}{$H+}
 
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
  cthreads, {$ENDIF} {$ENDIF}
  Classes { you can add units after this };
 
type
  Func1 = function(x: real): real;
 
  function LRect(f: Func1; a, b: real; n: word): real;
  var
    s, h, x: real;
    i: word;
  begin
    s := 0;
    h := (b - a) / n;
    x := a;
    for i := 1 to n do
    begin
      s := s + x;
      x := x + h;
    end;
    LRect := s * h;
  end;
 
  function s(x: real): real;
  begin
    s := sin(x);
  end;
 
  {MAIN PROGRAM}
var
  sint: real;
  i, j, n: word;
begin
  for i := 1 to 10 do
  begin
    n := 6;
    sint := LRect(@s, 0, Pi / 2, n);
    WriteLn(sint: 8: 6, ' ', (sint - 1));
  end;
  readln;
end.
Добавлено через 5 минут
да и цикл странный 10 раз считается одно и тоже. точнее переписывайте код преподавателя

Добавлено через 3 минуты
вот сюда ещё посмотри

Добавлено через 1 час 30 минут
Короче почитал я теорию - здесь

и переделал программу вот так:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
program RRECT;
//Вычисление определенного интеграла методом правых прямоугольников
 
{$mode objfpc}{$H+}
 
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
  cthreads, {$ENDIF} {$ENDIF}
  Classes { you can add units after this };
 
type
  Func1 = function(x: real): real;
 
  //функция вычесления интегла методом правых прямоугольников
  //f - интегрируемая функция
  //а - начало интервала (нижняя граница)
  //b - конец интервала (верхняя граница)
  //n - кол-во отрезков (чем больше - тем больше точность)
  function RRect(f: Func1; a, b: real; n: word): real;
  var
    s, h, x: real;
    i: word;
  begin
    s := 0;
    //основание прямоугольника
    h := (b - a) / n;
    //смещение от начала диапазона до прямоугольника
    x := a;
    for i := 1 to n do
    begin
      s := s + f(x);
      x := x + h;
    end;
    RRect := s * h;
  end;
  //в этот раз интегрируем sin(x)
  function s(x: real): real;
  begin
    s := sin(x);
  end;
 
  {MAIN PROGRAM}
var
  sint: real;
  n: word;
begin
  //вычисляем интеграл при n = 10000 на интервале [0;Pi/2]]
  n := 10000;
  sint := RRect(@s, 0, Pi / 2, n);
  WriteLn(sint: 8: 6, ' ');
 
  readln;
end.

при n -> к бесконечности интеграл sin(x) на отрезке от 0 до Pi/2 стремится к единице
Проверка тут.
при n = 10 000 интеграл у меня равен 0,999921

Добавлено через 11 минут
пиля - это я замутил левые прямоугольники, для правых верна след. программа:
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
program RRECT;
//Вычисление определенного интеграла методом правых прямоугольников
 
{$mode objfpc}{$H+}
 
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
  cthreads, {$ENDIF} {$ENDIF}
  Classes { you can add units after this };
 
type
  Func1 = function(x: real): real;
 
  //функция вычесления интегла методом правых прямоугольников
  //f - интегрируемая функция
  //а - начало интервала (нижняя граница)
  //b - конец интервала (верхняя граница)
  //n - кол-во отрезков (чем больше - тем больше точность)
  function RRect(f: Func1; a, b: real; n: word): real;
  var
    s, h, x: real;
    i: word;
  begin
    s := 0;
    //основание прямоугольника
    h := (b - a) / n;
    //смещение от начала диапазона до прямоугольника
    x := a + h;
    for i := 1 to n  do
    begin
      s := s + f(x);
      x := x + h;
    end;
    RRect := s * h;
  end;
  //в этот раз интегрируем sin(x)
  function s(x: real): real;
  begin
    s := sin(x);
  end;
 
  {MAIN PROGRAM}
var
  sint: real;
  n: word;
begin
  //вычисляем интеграл при n = 10000 на интервале [0;Pi/2]]
  n := 10000;
  sint := RRect(@s, 0, Pi / 2, n);
  WriteLn(sint: 8: 6, ' ');
 
  readln;
end.


тут при n= 10000 интеграл равен 1,000079 и при увеличении числа n приближается к единице справа.
0
05.03.2013, 16:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2013, 16:58
Помогаю со студенческими работами здесь

Вычислить значение определенного интеграла методом трапеций.
Вычислить значение определенного интеграла \int_{0.1}^{1}2\ln (x)+\sqrt{2x}\operatorname{d}x

Вычисление определенного интеграла методом правых прямоугольников
Число уравнений 3 y=a*x*x*x+b*x+c y=a*cos(x+b)+c y=a*In+c Коэффициенты a,b,c -вещественные...

Вычисление определённого интеграла методом прямоугольников
Уважаемые программисты, спасите пожалуйста!!! В общем, нужно написать программу, которая вычисляет...

Вычисление определенного интеграла методом центральных прямоугольников, и методом трапеции
Здравствуйте, помогите написать прогу для вычисление определенного интеграла методом трапеций и...

Вычисление определённого интеграла методом прямоугольников и трапеций
Составить алгоритм и написать программу вычисления определённого интеграла на заданном отрезке...

Вычисление определенного интеграла методом левых прямоугольников
Всем добрый день, сделала программу, но никак не могу понять как в ней сделать: Программa должна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru