Кто может объяснить про точность
Код
program dz_func;
var list_value: array[1..10] of real;
var min,max,value_,interval,eps,sum,f,n,k: real;
var i,j: integer;
begin
writeln('Введите минимальную границу: ');
readln(min);
writeln('Введите максимальную границу: ');
readln(max);
interval := (max-min)/9;
list_value[1] := min;
for i:=2 to 10 do begin
value_ := (min + interval);
list_value[i] := value_;
min := value_;
end;
for i:=1 to 10 do begin
eps:=1;
writeln('------------------------');
//writeln(list_value[i]);
for j:=1 to 6 do begin
sum:=list_value[i]; f:=list_value[i];
eps := eps/10;k:=2;
//write(' ',eps);
while abs((sum-f)-sum) >= eps do begin
writeln('Точность ',eps);
f := k * power(f,k);
writeln(f);
sum := sum + f;
writeln('Сумма ',sum);
k := k + 1;
end;
write(' ',sum);
end;
end;
end.
Я не понимаю с чем сравнивать точность чтобы алгоритм работал. Вот условие: Напишите программу вычисления приближенных значений функции, представленной в виде ряда, в десяти равноотстоящих друг от друга точках указанного диапазона возможных значений аргумента. Конкретную функцию каждый студент берет из приведенного ниже перечня, при этом номер функции равен порядковому номеру студента в списке группы.
Для каждого значения аргумента выполняйте вычисления до достижения каждой из заданных границ точности и одновременно считайте соответствующее число итераций.

Ответы (1 шт):
У вас есть функция
target := x / Sqr(1-x);
значение которой вы можете вычислить непосредственно, подставляя x = list_value[i]; . Вот с этим значением и нужно сравнивать частичные суммы ряда, пока отличие не будет укладываться в заданную погрешность - она у вас не указана, обычно берут малую величину eps = 1e-6, 1e-10 или что-то подобное.
Что имеется в виду под каждой из заданных границ точности? - может, еще какие-то условия не приведены?
var
x, xx, step, eps, target, sum: Double;
i, k, ieps: integer;
begin
step := (0.25 + 0.7) / 9;
for i := 0 to 9 do begin
x := -0.7 + i * step;
target := x / sqr(1 - x);
eps := 0.1;
for ieps := 1 to 6 do begin
sum := 0;
k := 0;
xx := 1;
while abs(sum - target) > eps do begin
inc(k);
xx := xx * x;
sum := sum + k * xx;
end;
Memo1.Lines.Add(Format('x %5.3f eps %8.6f sum %10.8f iter %d', [x, eps, k]));
eps := eps * 0.1;
end;
end;
x -0.700 eps 0.100000 sum -0.33656518 iter 11
x -0.700 eps 0.010000 sum -0.25140859 iter 19
x -0.700 eps 0.001000 sum -0.24296102 iter 27
x -0.700 eps 0.000100 sum -0.24213746 iter 34
x -0.700 eps 0.000010 sum -0.24222216 iter 41
x -0.700 eps 0.000001 sum -0.24221380 iter 48
x -0.594 eps 0.100000 sum -0.30840966 iter 7
x -0.594 eps 0.010000 sum -0.22466060 iter 12
x -0.594 eps 0.001000 sum -0.23477551 iter 17
x -0.594 eps 0.000100 sum -0.23373535 iter 22
x -0.594 eps 0.000010 sum -0.23383403 iter 27
x -0.594 eps 0.000001 sum -0.23382511 iter 32
x -0.489 eps 0.100000 sum -0.13290803 iter 4
...
x 0.250 eps 0.000100 sum 0.44439697 iter 8
x 0.250 eps 0.000010 sum 0.44444084 iter 10
x 0.250 eps 0.000001 sum 0.44444346 iter 11