Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Проверьте задачу

Автор: Янычар 26.11.2006 1:40

Вычислить приближенное значение суммы, нужное приближение считать полученным, есливычесленная сумма нескольких первых слагаемых и очередное слагаемое оказалось по модулю меньше данного положительного числа Е.
4/0!+9/1!+16/2!............
я написал программу, но она ни хрена не работает, пишет type mismatch, короче вот сама прога, посмотрите пожалуйста, скажите где ошибка и как сделать правильно:

Program summer;
var x,k,l,m,p,a,y:Integer;
const E=0.001;
function Factor(n:integer):integer;
begin
for k:=n downto 1 do
factor:=k*n;
end;
begin
a:=13;
k:=1;
x:=4;
n:=3;
p:=sqr(x);
while abs(y)>=E do
begin
m:=p/factor(n);
x:=x+1;
n:=n+1;
y:=13+m;
end;
write(y);
end.

Автор: volvo 26.11.2006 6:52

Цитата
скажите где ошибка
Нельзя целой переменной присваивать вещественное значение (а при делении в Паскале ВСЕГДА получается вещественное число), Integer не совместим с Real по присваиванию... Наоборот - да, можно, но не Integer := Real ...
Цитата
как сделать правильно:
Вот так:
const E = 0.001;

var
s, step: real;
i, chisl, znam: longint;

begin
s := 0;
chisl := 2;
znam := 1;
i := 1;
repeat
step := sqr(chisl) / znam;
s := s + step;

znam := znam * i;
inc(chisl); inc(i);
until chisl/znam < E;

writeln(s: 15: 8);
end.