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

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

Форум «Всё о Паскале» _ Задачи _ Рекрусивные функции

Автор: UpRe_ID 23.05.2007 12:58

исправте мой неправельный текст на более правильный :

Код
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 23.05.2007 13:44

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

Автор: Ozzя 23.05.2007 13:50

Цитата(UpRe_ID @ 23.05.2007 10:44) *

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

В чем неправильность твоей программы? Неверные результаты выдает?
Или препод так сказал?

Автор: UpRe_ID 23.05.2007 13:52

Она просто недописана.
Где-то я что-то забыл..
в синтаксе паскаля не силен.

Автор: Ozzя 23.05.2007 13:56

А условие задачи - подсчитать P?
Тогда просто в цикле считай

for i:=1 to n do
begin
y:=podchet(x, i-1);
P:=p+y
end;

Автор: UpRe_ID 23.05.2007 14:18

Условие подсчитать?

А то что дал, куда вставить ?
А то паскалю куда не пиши че та не нравиться...

Автор: Ozzя 23.05.2007 14:28

Тьфу ты, там произведение, а не сумма. 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 23.05.2007 15:03

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

Автор: Ozzя 23.05.2007 15:38

Цитата(volvo @ 23.05.2007 12:03) *

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

volvo

Да я и не смотрел толком программу товарисча rolleyes.gif
В своем огрызке кода вроде не забыл rolleyes.gif

Автор: volvo 23.05.2007 15: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)

Автор: UpRe_ID 24.05.2007 20:03

Цитата(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 24.05.2007 20:11

Основная программа немного неверная... Вот так вызывать:

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 25.05.2007 0:09

всем огромное спасибо))))