Помощь - Поиск - Пользователи - Календарь
Полная версия: Рекрусивные функции
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
UpRe_ID
исправте мой неправельный текст на более правильный :

Код
Program Rfunction;
var
x:real;
n: integer;
function step (x: real;n: integer):real;
begin if n=1 then step:=x
else step:= step( x, n-1)*x;
end;
function podchet(x:real; n: integer):real;
Var x1: real;
begin if n=1 then podchet:= 2*x
else x1:= step (x,n);
podchet:= podchet(x, n-1)*(2*x1)/n;
end;
BEGIN
WRITE ('VVOD X N ');
readln( x, n);
y:=podchet(x, n-1);
writeln;( ' p= ', p);
readln;
end.


А вот текст проги Рекурсивные процедуры и функции
UpRe_ID
Ай нид хелп...
плиз...
Ozzя
Цитата(UpRe_ID @ 23.05.2007 10:44) *

Ай нид хелп...
плиз...

В чем неправильность твоей программы? Неверные результаты выдает?
Или препод так сказал?
UpRe_ID
Она просто недописана.
Где-то я что-то забыл..
в синтаксе паскаля не силен.
Ozzя
А условие задачи - подсчитать P?
Тогда просто в цикле считай
for i:=1 to n do
begin
y:=podchet(x, i-1);
P:=p+y
end;
UpRe_ID
Условие подсчитать?

А то что дал, куда вставить ?
А то паскалю куда не пиши че та не нравиться...
Ozzя
Тьфу ты, там произведение, а не сумма. rolleyes.gif
Program Rfunction;
var
p,x:real;
i,n: integer;

function step (x: real;n: integer):real;
begin if n=1 then step:=x
else step:= step( x, n-1)*x;
end;
function podchet(x:real; n: integer):real;
Var x1: real;
begin if n=1 then podchet:= 2*x
else x1:= step (x,n);
podchet:= podchet(x, n-1)*(2*x1)/n;
end;
BEGIN
WRITE ('VVOD X N ');
readln( x, n);
p:=1;
for i:=1 to n do
begin
y:=podchet(x, i-1);
p:=p*1;
end;
writeln;( ' p= ', p);
readln;
end.












volvo
Оззя, ты begin/end нигде не забыл wink.gif
Ozzя
Цитата(volvo @ 23.05.2007 12:03) *

Оззя, ты begin/end нигде не забыл wink.gif

volvo

Да я и не смотрел толком программу товарисча rolleyes.gif
В своем огрызке кода вроде не забыл rolleyes.gif
volvo
function podchet(x:real; n: integer):real;
Var x1: real;
begin if n=1 then podchet:= 2*x
else BEGIN x1:= step (x,n); { <--- здесь}
podchet:= podchet(x, n-1)*(2*x1)/n;
END; { <--- здесь }
end;


Без них ты получишь мусор однозначно (неинициализированная локальная переменная X1)
UpRe_ID
Цитата(volvo @ 23.05.2007 12:43) *

function podchet(x:real; n: integer):real;
Var x1: real;
begin if n=1 then podchet:= 2*x
else BEGIN x1:= step (x,n); { <--- здесь}
podchet:= podchet(x, n-1)*(2*x1)/n;
END; { <--- здесь }
end;


Без них ты получишь мусор однозначно (неинициализированная локальная переменная X1)



прога работает только после ввода данных она пишет " stack overflow error"
volvo
Основная программа немного неверная... Вот так вызывать:

BEGIN
WRITE ('VVOD X N '); readln( x, n);
p:=1;

for i:=1 to n do begin
y:=podchet(x, i); { <--- Не (i - 1) !!!}
p:=p*y; { <--- Умножать надо на Y }
end;

writeln( ' p= ', p);
readln;
end.
UpRe_ID
всем огромное спасибо))))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.