IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Рекрусивные функции, помогите пожалуйста
UpRe_ID
сообщение 23.05.2007 8:58
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Че? зачем

Репутация: -  0  +


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

Код
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.


А вот текст проги Рекурсивные процедуры и функции


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
UpRe_ID
сообщение 23.05.2007 9:44
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Че? зачем

Репутация: -  0  +


Ай нид хелп...
плиз...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 23.05.2007 9:50
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


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

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

В чем неправильность твоей программы? Неверные результаты выдает?
Или препод так сказал?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
UpRe_ID
сообщение 23.05.2007 9:52
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Че? зачем

Репутация: -  0  +


Она просто недописана.
Где-то я что-то забыл..
в синтаксе паскаля не силен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 23.05.2007 9:56
Сообщение #5


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


А условие задачи - подсчитать P?
Тогда просто в цикле считай
for i:=1 to n do
begin
y:=podchet(x, i-1);
P:=p+y
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
UpRe_ID
сообщение 23.05.2007 10:18
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Че? зачем

Репутация: -  0  +


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

А то что дал, куда вставить ?
А то паскалю куда не пиши че та не нравиться...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 23.05.2007 10:28
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


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












 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.05.2007 11:03
Сообщение #8


Гость






Оззя, ты begin/end нигде не забыл wink.gif
 К началу страницы 
+ Ответить 
Ozzя
сообщение 23.05.2007 11:38
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


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

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

volvo

Да я и не смотрел толком программу товарисча rolleyes.gif
В своем огрызке кода вроде не забыл rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.05.2007 11:43
Сообщение #10


Гость






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 16:03
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Че? зачем

Репутация: -  0  +


Цитата(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"

Сообщение отредактировано: UpRe_ID - 24.05.2007 16:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.05.2007 16:11
Сообщение #12


Гость






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

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
сообщение 24.05.2007 20:09
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 13
Пол: Мужской
Реальное имя: Че? зачем

Репутация: -  0  +


всем огромное спасибо))))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 23:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"