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

> Правила раздела!

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

 
 Ответить  Открыть новую тему 
> Stack Overflow Error
сообщение
Сообщение #1


mea culpa
*****

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

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



function y(i:byte):real;
begin
y:=(y(i-1)+1)/(y(i-1)+2);
end;

var i:byte;
begin
repeat
inc(i);
until (y(i)-y(i-1))<0.00001;
writeln('Iskomoe chislo - ',i);
readln;
end.



Этот код компилируется с ошибкой Stack Overflow Error. TP7.
Задание в оригинале:
Цитата
2...Пусть Y(0)=0; Y(i)=(Y(i-1)+1)/(Y(i-1)+2), i=1,2,3,... Найти первый член Y(n), для которого Y(n)-Y(n-1)<0.00001.


Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Этот код компилируется с ошибкой Stack Overflow Error.
Не так. Компилируется-то этот код нормально, а вот при запуске программы - вылет с указанной ошибкой... А все почему? Потому, что у тебя там рекурсия бесконечная. Где условие выхода из рекурсии? У тебя ж в задании написано, что Y(0) = 0, почему ты это не сказал своей фунции?

Добавлено через 1 мин.
P.S. На всякий случай: не забудь присвоить значение переменной I, перед тем, как ее использовать.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


mea culpa
*****

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

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


Цитата
Где условие выхода из рекурсии? У тебя ж в задании написано, что Y(0) = 0, почему ты это не сказал своей фунции?


Немного тупой вопрос...А как это нужно было сказать? Как я понимаю, условие выхода из рекурсии -
until (y(i)-y(i-1))<0.00001;
, разве не так?


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Нет-нет... У тебя прежде, чем выполнение дойдет до разности и сравнения ее с погрешностью, надо чтобы закончилась работа функции, да? Вот у тебя этого не происходит... Попробуй:
function y(i:byte):real;
begin
if i = 0 then y := 0 { <--- Вот оно, условие выхода }
else y:=(y(i-1)+1)/(y(i-1)+2);
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


mea culpa
*****

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

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


Спасибо, Volvo! smile.gif


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.10.2020 18:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name