Показать сообщение отдельно
Старый 05.12.2010, 23:21   #1
Protey
Оператор ЭВМ
 
Аватар для Protey
 
Регистрация: 02.02.2010
Сообщений: 37
Написано одно полезное сообщение
(для 2 участников)
Условие в задаче с интегралом

var
  
n:integer;  //кол-во отрезков
  
a:integer;  //левая граница
  
b:integer;  //правая граница
  
dx:real;
  
rez:real;  //будущий ответ
  
xi,xi1:real;  //отрезок 1 и отрезок 2
  
h:real;
  
y0,y1,y2,y3,y4:real;
  
inter:real;  //накапливаяемая сумма
  
i:integer;  //переменная, необходимая для великой миссии
  
E:real;  //необходимая точность

function y(x:real):real;
begin
  Result
:=sqrt(2*x+1);
end;

begin
  WriteLn
('Please input border integral(a,b): ');  //просьба ввести границы интеграла
    
ReadLn(a,b);  //границы интерграла
  
WriteLn;
  
WriteLn('Enter the desired accuracy: ');  //просьба ввести желаемую точность
    
ReadLn(E);  //E - необходимая точность
  
WriteLn;

  
rez := 0;  //зануляем на всякий случай переменную
  
:= 1;  //начальное кол-во отрезков
  
dx :=(b-a)/n;

  if 
>= b then WriteLn('Sorry, my bad')  //защита от дурака
    
else

  for 
i:=0 to n-do
    while (
rez-rez+1)/rez do  //собственно условие на проверку точности
      
begin
         xi
:=dx*i;
         
xi1:=dx*(i+1);
         
h:=(xi1-xi)/4;
         
y0:=y(xi);
         
y1:=y(xi+h);
         
y2:=y(xi+2*h);
         
y3:=y(xi+3*h);
         
y4:=y(xi1);
         
inter:=(2*h/45)*(7*y0+32*y1+12*y2+32*y3+7*y4);
         
rez:=rez+inter;
      
end;

 
WriteLn('Response to your example: ',rez:6:5);  //ответ вашего примера
 
WriteLn;
 
WriteLn('Press ENTER to exit...');  //показание к действию
 
ReadLn;
end
while (rez-rez+1)/rez < E do - вот это условие нужно поменять так, чтобы выполнялась идея:
пользователь вводит границы интеграла (а и б), необходимую точность (Е), далее машина считает до тех пор пока некая формула, имеющая в себе результат, не получит ответ менее заданной погрешности
(Offline)
 
Ответить с цитированием