inc(i) нужно вставлять внутрь цикла repeat...until, а не после него.
Добавлено через 2 минуты:
Непонятно еуда вставлен integrate := result;
Вот, что надо было:
Код:
uses
crt;
function Func (const x: real): real;
begin
func := x + 2;
end;
function min (const v1, v2: real): real;
begin
if (v2 > v1) then min := v1 else min := v2;
end;
function integrate (const a, b, eps: real): real;
var
x1, x2, result: real;
i, count: longint;
begin
result := 0;
i := 1;
count := round (abs(b - a) / eps);
repeat
result := result + (abs(b - a) +
abs(min(func(a + count * eps),
func(a + count * eps + eps)))) * eps;
inc (i);
until i > Count;
integrate := result;
end;
var
a, b, eps: real;
begin
write('Vvedite nachalnoe znachenie x: ');
readln(a);
write('Vvedite konechnoe znachenie x: ');
readln(b);
write('Vvedite tochnost: ');
readln(eps);
writeln('Rezultat: ', integrate(a, b, eps));
end.
Добавлено через 12 минут:
Вот, что получилось у меня:
Код:
uses
crt;
type
integr_func = function (x: real): real;
function f(x: real): real; far;
begin
f := x * x;
end;
procedure integrate (f: integr_func; a, b, e: real; var r: real);
var
s, s0, h: real;
n, i: integer;
begin
n := 10;
s := 0;
repeat
s0 := s; s := 0;
h := (b - a) / n;
for i := 0 to pred(n) do
s := s + (f(a + h * i) + f(a + h * succ(i))) * h * 0.5;
writeln (' n = ', n:6, ', result = ', s:10:6);
n := n * 2;
until abs(s - s0) <= e;
r := s;
end;
var
a, b, e, r: real;
begin
clrscr;
write ('enter a: '); readln (a);
write ('enter b: '); readln (b);
write ('enter e: '); readln (e);
writeln ('calculate...');
integrate (f, a, b, e, r);
writeln ('result = ', r:10:6);
readkey;
end.