Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2013, 15:05   #1
461R
Новичок
Джуниор
 
Регистрация: 22.12.2013
Сообщений: 4
По умолчанию Вычислить определённый интеграл заданным методом с заданной точностью.

Помогите исправить программу, препод сказал что константа используется как шаг, а должна использоваться как точность.
Метод прямоугольников по серединам.
Код:
program Integral;
Uses Crt;
var
x1,x2,i:real;
xx1,xx2:real;
c:longint;
const
e=0.001;
function Fx(x:real):real;
begin
Fx:=ln(x)/(x*sqrt(1+ln(x)));
end;
begin
write('Введите значение a=');Readln(x1);
write('Введите значение b=');Readln(x2);
begin
for c:=1 to round(abs(x2-x1)/e) do begin
xx1:=Fx(x1+c*e);
xx2:=Fx(x1+c*e+e);
i:=i+abs(xx1+xx2)/2*e;
end;
writeln('Интеграл=',i:0:3);
end;
end.

Последний раз редактировалось 461R; 22.12.2013 в 21:18.
461R вне форума Ответить с цитированием
Старый 22.12.2013, 15:29   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Определи некотурую переменную n - целого типа. Эта переменная - число разбиений отрезка, на котором вычисляется интеграл. Пусть для начала
Код:
n := 10;
Получи значение интеграла. Измени n, например,
Код:
n := n*2;
Получи новое значение интеграла и разность с первым значением:
Код:
if abs(i1-i2) <= eps then ...
Получено значение интеграла с заданной точностью.



Как-то так, ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 22.12.2013, 15:35   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Народ! Ну, я уже ржать устал! Имейте совесть!
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 22.12.2013, 21:07   #4
461R
Новичок
Джуниор
 
Регистрация: 22.12.2013
Сообщений: 4
По умолчанию

Не могу понять что куда подставлять в программе, можешь скинуть готовую программу?
461R вне форума Ответить с цитированием
Старый 22.12.2013, 21:10   #5
461R
Новичок
Джуниор
 
Регистрация: 22.12.2013
Сообщений: 4
По умолчанию

VictorR, не могу понять что куда подставлять, можешь скинуть готовый вариант программы?
461R вне форума Ответить с цитированием
Старый 22.12.2013, 22:24   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Ну вот, ...
Код:
program Integral;
Uses Crt;
type fun = f(x:real) : real; {определим функциональный тип}
{$F+}
function F(x:real):real; {опишем нашу функцию}
begin
   F:=ln(x)/(x*sqrt(1+ln(x)));
end;
{$F-}

function Integr(f : fun; a, b : real; n : integer) : real; {Вычисление интеграла}
var sum, x, h : real;
   i : integer;
begin
   h := (b - a) / n;
   sum := 0;
   x := a + h/2;
   for i := 1 to n do
   begin
     sum := sum + f(x)
     x := x + h;
   end;
   integr := sum * h;
end;

var x1, x2, eps :real;
   si, sn : real;
      n : integer;
begin
   write('Введите левую границу интегрирования a= ');
   Readln(x1);
   write('Введите правую границу интегрирования b= ');
   Readln(x2);
   write('Введите требуемую точность eps= ');
   Readln(eps);
   write('Введите начальное число разбиений отрезка интегрирования n= ');
   Readln(n);
   sn := 0; {инициируем первое приближение для интеграла}
   si := integr(f, x1, x2, n); {Второе приближение}
while abs(si - sn) > eps do {вычисляем более точно}
begin
   sn := si;
   n := 2*n;
   si := integr(f, x1, x2, n);
   if n > 500 then
     break; {Прекратим вычисленя, если число разбиений велико}
end;
writeln('Интеграл=', si:8:3);
end.
Можно выполнить эту работу и для другой функции, которую следует описать между символами {$F+} и {$F+}

Как-то так, ...

PS: Так стало легче?
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 22.12.2013, 22:34   #7
461R
Новичок
Джуниор
 
Регистрация: 22.12.2013
Сообщений: 4
По умолчанию

намного) спасибо огромное)
461R вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить сумму ряда с заданной точностью: 35091_stasi Помощь студентам 2 29.10.2013 22:18
Вычислить сумму ряда с заданной точностью Tecknogleb Помощь студентам 1 20.10.2012 03:03
Вычислить интеграл методом трапеций alex55 Общие вопросы Delphi 0 11.12.2011 21:48
Вычислить сумму S с заданной точностью Е marka Помощь студентам 1 12.01.2011 07:44
Pascal. Вычислить сумму S с заданной точностью E Саша Сказка Помощь студентам 8 19.10.2010 14:34