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

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

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

 
 Ответить  Открыть новую тему 
> Рекурсия в графике (Построение кривой Гильберта), Ошибка переполнения стека. Не могу понять из-за чего?
сообщение
Сообщение #1


Новичок
*

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

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


Задание построить кривую Гильберта. Вроде бы все должно работать, но как только дело доходит до построения выдает "Ошибка 202. Стек переполнен". Помогите разобраться почему.


Program Gilbert;
uses Crt,Graph;
Var
h,gd,gm:integer;
a:byte;
n:byte;

Procedure LD;
Begin
Linerel(0,h);
End;

Procedure LU;
Begin
Linerel(0,-h);
End;

Procedure LL;
Begin
Linerel(-h,0);
End;

Procedure LR;
Begin
Linerel(h,0);
End;

Procedure GDw(i:byte);ForWard;
Procedure GUp(i:byte);ForWard;
Procedure GL(i:byte);
Begin
GDw(i-1);LL;
GL(i-1);LD;
GL(i-1);LR;
GUp(i-1);Delay(5000);
End;

Procedure GR(i:byte);
Begin
GUp(i-1);LR;
GR(i-1);LU;
GR(i-1);LL;
GDw(i-1);Delay(5000);
End;

Procedure GUp;
Begin
GR(i-1);LU;
GUp(i-1);LR;
GUp(i-1);LD;
GL(i-1);Delay(5000);
End;
Procedure GDw;
Begin
GL(i-1);LD;
GDw(i-1);LL;
GDw(i-1);LU;
GR(i-1);Delay(5000);
End;


Begin
clrscr;
Write('vvedite dlinu storoni v pixselyah');
Readln(h);
Write('vvedite poryadok krivoi');
Readln(n);
gd:=detect;gm:=0;
InitGraph(gd,gm,'');
Moveto(100,100);
GUp(n);
Readln;
CloseGraph;
Readln;
End.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






У тебя нет условия выхода из рекурсии...

Procedure GL(i:byte);
Begin
if i > 0 then begin { <--- Вот это условие }
GDw(i-1);LL;
GL(i-1);LD;
GL(i-1);LR;
GUp(i-1);Delay(5000);
end;
End;

и так далее, во всех процедурах, имена которых начинаются с G...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Эх, вот это я тупое животное=) Спасибо большое=)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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