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

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

Форум «Всё о Паскале» _ Задачи _ Формула Ламберта.

Автор: Лилия 24.12.2007 12:01

(Задача на рекурсию, на Паскале) Формула Ламберта. Вычислить приближенное значение е по формуле Ламберта e(k)=(a(k)+b(k))/(a(k)-b(k)); a(k)=(4*k-2)*a(k-1)+a(k-2); a(1)=2; a(0)=1; b(k)=(4*k-2)*b(k-1)+b(k-2); b(1)=1; b(0)=0.

Заранее спасибо...

Автор: volvo 24.12.2007 13:50

Лилия, практически так же, как написано у тебя это и программируется:

function b(k: integer): real;
begin
if k < 2 then b := k
else b := (4*k-2) * b(k-1) + b(k-2);
end;

function a(k: integer): real;
begin
if k < 2 then a := k + 1
else a := (4*k-2) * a(k-1) + a(k-2);
end;

function e(k: integer): real;
begin
e := (a(k) + b(k)) / (a(k) - b(k));
end;

begin
writeln(e(3)); { Для увеличения точности - увеличивай параметр }
end.

Автор: Лилия 24.12.2007 14:18

volvo, и что эта вся программа???

begin
writeln(e(3));
end.

а можно с экрана вводить переменную, например t, которую потом writeln(e(t))???

Автор: volvo 24.12.2007 14:44

Цитата
и что эта вся программа???
yes2.gif А что, она не работает?

Можно запросить ввод параметра, и для него вызывать функцию:
var T: integer;
begin
write('T = '); readln(T);
writeln(e(T));
end.

(только надо как-то ограничить ввод T, потому что рекурсия все-таки, стек переполнить очень просто, программа начнет вылетать... Тем более, что уже e(3) дает ответ с точностью до 9 знака после запятой)...

Автор: Лилия 24.12.2007 14:51

Она работает... Хорошо, я учту это... Volvo, спасибо большое за программу....