Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2008, 19:16   #1
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
Вопрос Переполнение Стека

Задача стоит такая: Затравочное заполнение 4-х связной гранично определенной области. Алгоритм такой использовал: ставим затравочную точку и проверяем ее четыре соседние точки, если точка не является закрашенной или граничной, то добавляем ее в стек. Во время реализации происходит переполнение стека,Вот Листинг:
Код:
uses graph;
Type ukaz=^tochka;
tochka=record  {Элемент списка-координаты точки}
 x:integer;
 y:integer;
 next:ukaz;
end;

var driver,mode:integer;
    x,y,x2,y2,a,b:integer;
    p,hvost,o:ukaz;  {p-голова, hvost-хвост, o-для удаления из головы}
    newcolor,oldcolor,grancolor:integer;

begin
randomize;
initGraph(driver,mode,'');
{==========Рисуем 6-ти угольник в случайном месте=====================}
 x:=random(340);
 y:=random(240);
 x2:=x+50;
 y2:=y;
 line(x,y,x2,y2);
 line(x2,y2,x2,y2+30);
 line(x2,y2+30,x2+50,y2+30);
 line(x2+50,y2+30,x2+50,y2+70);
 line(x,y+70,x2+50,y2+70);
 line(x,y,x,y+70);

{===============================}
 grancolor:=15; {Цвет границы}
 oldcolor:=0; {Старый цвет};
 newcolor:=Blue; {Цвет закраски}

 new(p);  {Помещаем первую затравочную точку}
 p^.x:=x+1;
 p^.y:=y+1;
 hvost:=p;
 a:=p^.x;
 b:=p^.y;

  while hvost<>nil do
   begin
    putPixel(a,b,red);
     if (GetPixel(a+1,b)<>grancolor) and (Getpixel(a+1,b)<>newcolor) then
      begin
       new(hvost^.next);
       hvost:=hvost^.next;
       hvost^.x:=a+1;
       hvost^.y:=b;
      end;

    if (GetPixel(a-1,b)<>grancolor) and (Getpixel(a-1,b)<>newcolor) then
      begin
       new(hvost^.next);
       hvost:=hvost^.next;
       hvost^.x:=a-1;
       hvost^.y:=b;
      end;

    if (GetPixel(a,b-1)<>grancolor) and (Getpixel(a,b-1)<>newcolor) then
      begin
       new(hvost^.next);
       hvost:=hvost^.next;
       hvost^.x:=a;
       hvost^.y:=b-1;
      end;

    if (GetPixel(a,b+1)<>grancolor) and (Getpixel(a,b+1)<>newcolor) then
      begin
       new(hvost^.next);
       hvost:=hvost^.next;
       hvost^.x:=a;
       hvost^.y:=b+1;
      end;

      o:=p^.next;
      dispose(p);
      p:=o;

      a:=p^.x;
      b:=p^.y;


   end;  {while}



readln;
closeGraph;
end.

Последний раз редактировалось Викдон; 19.12.2008 в 19:18.
Викдон вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рекурсивным закрашиванием. Переполнение стэка. prost Помощь студентам 7 02.06.2008 22:34
массивы, переполнение при делении Alter Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.05.2008 20:11
Переполнение при возведении в степень ruPy Общие вопросы Delphi 1 01.02.2008 19:21
Переполнение стека при передачи функциям массивов большой размерности graphoman Общие вопросы Delphi 2 07.01.2008 21:47
Заполнение стека inkvizitor Общие вопросы Delphi 5 08.10.2007 16:01


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS