IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Вычисление интеграла, (не хочет компилировать)
Boxer
сообщение 19.12.2010 18:30
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Условие:
F1:=2^x+1
F2:=x^5
F3:=(1-x)/3

Задание:
1. решить уравнения методом деления отрезка пополам(короч найти границы интегрирования)
2. найти интеграл полученной фигуры методом прямоугольников

p.s. в чем ошибка не знаю. компилировать не хочет, находит только границы интегрирования, помогите исправить!!! нужна помощь!!!

Код:
{$N+}
program integral;

uses crt;

type
  func=function (x:Real):Real;

function F12(x:real):real;far;
  begin
    F12:=exp(ln(2)*x)-x*x*x*x*x+1;
  end;

function F13(x:real):real;far;
  begin
    F13:=exp(ln(2)*x)+1-(1-x)/3;
  end;

function F23(x:real):real;far;
  begin
    F23:=x*x*x*x*x-(1-x)/3;
  end;

function root(F:func; x, y: Real): Real;
  const
      eps = 0.001;
  var
    mid, fx, fy, fm: Real;
  begin
    fx := F(x);
    fy := F(y); 
    if fx * fy > 0.0 then Halt;
    repeat
      if Abs(fx) < eps then 
        begin
          root:=x; 
          Exit; 
        end
      else if Abs(fy) < eps then 
             begin
               root:=y; 
               Exit; 
             end 
                            else begin
                                   mid := 0.5 * (x + y); 
                                   fm := F(mid);
                                   if fx*fm <= 0 then
                                     begin
                                       у := mid; 
                                       fy := fm; 
                                     end   
                                                 else begin
                                                        x := mid; 
                                                        fx := fm; 
                                                      end; 
                                 end 
    until false; 
  end;

function F1(x:real):real;far;
  begin
    F1:=exp(ln(2)*x)+1;
  end;

function F2(x:real):real;far;
  begin
    F2:=x*x*x*x*x;
  end;

function F3(x:real):real;far;
  begin
    F3:=(1-x)/3;
  end;

function solution(f:Func; a,b:Real; n:integer):Real; 
  var
    h,g,sum,x,y:Real; 
    i:integer; 
  begin 
    h:=(b-a)/n; 
    sum:=0; 
    x:=a; 
    for i:= 1 to n do 
       begin 
         y:=x; 
         x:=x+h; 
         G:=f((x+y)/2); 
         sum:=sum+G; 
       end; 
    solution:=sum*h; 
  end; 

function accuracy(f:Func; a,b:Real; var n:integer):Real; 
  const
    eps=0.001;
  var 
    i1,i2:real; 
  begin 
    i1:=solution(f,a,b,n); 
    n:=n+n; 
    i2:=solution(f,a,b,n); 
    while abs(i1-i2)>2*eps do 
         begin 
           if n>=16383 then break; 
           i1:=i2; 
           n:=n+n; 
           i2:=solution(f,a,b,n); 
         end; 
    accuracy:=i2; 
  end; 

var 
  a,b,c,I,I1,I2,I3,x,y:real;  
  n:integer;  
begin
  clrscr;
  x:=-3;
  y:=2;
  writeln('Point of intersection of graphs');
  WriteLn('F12= ', root(F12,x,y):10:10);
  WriteLn('F13= ', root(F13,x,y):10:10);
  WriteLn('F23= ', root(F23,x,y):10:10);
  ReadLn;
  a:=root(F13,x,y);
  b:=root(F12,x,y);
  c:=root(F23,x,y);
  I1:=accuracy(F1,a,b,n);
  I2:=accuracy(F2,a,c,n);  
  I3:=accuracy(F3,c,b,n);
  I:=I1-I2-I3;
  writeln('Required integral:= ',I);
end.


Сообщение отредактировано: Boxer - 19.12.2010 18:31
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Boxer
сообщение 19.12.2010 18:56
Сообщение #2





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


можно засунуть solution в accuracy, но все равно интег не печатает(

function accuracy(f:Func; a,b:Real; var n:integer):Real; 
function solution(n:integer):Real; 
  var
    h,g,sum,x,y:Real; 
    i:integer; 
  begin 
    h:b-a)/n; 
    sum:; 
    x:=a; 
    for i:= 1 to n do 
       begin 
         y:=x; 
         x:=x+h; 
         G:=f((x+y)/2); 
         sum:=sum+G; 
       end; 
    solution:=sum*h; 
  end;
  const
    eps.001;
  var 
    i1,i2:real; 
  begin 
    i1:=solution(n); 
    n:=n+n; 
    i2:=solution(n); 
    while abs(i1-i2)>2*eps do 
         begin 
           if n>=16383 then break; 
           i1:=i2; 
           n:=n+n; 
           i2:=solution(n); 
         end; 
    accuracy:=i2; 
  end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.12.2010 19:06
Сообщение #3


Гость






Цитата
находит только границы интегрирования, помогите исправить!!!

Цитата
function solution(f:Func; a,b:Real; n:integer):Real; 
  var
    h,g,sum,x,y:Real; 
    i:integer; 
  begin 
    h:=(b-a)/n; { <--- Вот в этом месте }
чему у тебя равно N? Нулю. Вылет: "Деление на 0". Присвой N какое-то значение. Тысячу раз говорено: описал переменную - инициализируй ее!!!
 К началу страницы 
+ Ответить 
Boxer
сообщение 19.12.2010 19:44
Сообщение #4





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Доделал(без описания n) good.gif


Прикрепленные файлы
Прикрепленный файл  INT1.PAS ( 2.63 килобайт ) Кол-во скачиваний: 162
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 27.07.2025 3:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"