Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Error 202. Stack is overflow error, Помогите разобраться 
:(
    Опции темы
K270490
Дата 25.12.2008, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 25.12.2008

Репутация: нет
Всего: нет



при выполнении программы ошибка Error 202. Stack is overflow error. Посоветуйте выход и объясните причину , пожалуйста.

Работаю с сортировкой строк пирамидальным методом. Вот Алгоритм:
Вот Алгоритм 

Выражение  [[ x ]] значит что берём нижнюю целую часть от х.

Алгоритм Н. (Пирамидальная  сортировка.) Записи R1, ..., RN переразмещаются на том же
месте; после завершения сортировки их ключи будут упорядочены: K1  ≤ ... ≤ KN. Сначала
файл перестраивается в пирамиду, после чего вершина пирамиды многократно исключается
и записывается на свое окончательное место. Предполагается, что N ≥ 2.
H1. [Начальная установка.] Установить l ← [[N/ 2]]+ 1, r!N.
Н2. [Уменьшить l или r.] Если l  > 1, то установить l ! l-1, R ! Rl,  K ! Kl (Если l  >1,
это означает, что происходит процесс преобразования исходного файла в пирамиду;
если же l  =  1, то это значит, что ключи K1, K2, ..., Kr уже образуют пирамиду.)
В противном случае установить R ! Rr, K ! Kr, Rr ! R1, r! r - 1; если в результате
оказалось, что r = 1, то установить R1 ! R и завершить работу алгоритма.
Н3. [Приготовиться к "протаскиванию".] Установить j ! l. (К этому моменту
K[[ j/2 ]] ≥ K j при l < [[j / 2]] < j ≤ r , (4)
а записи Rk, r  < k  ≤  N, занимают свои окончательные места. Шаги Н3 — Н8
называются алгоритмом "протаскивания"; их действие эквивалентно установке Rl ! R
с последующим перемещением записей Rl, ..., Rr таким образом, чтобы условие (4)
выполнялось и при [[j / 2]] = l .)
Н4. [Продвинуться вниз.] Установить i ! j и j ← 2j. (В последующих шагах i = [[j / 2]].)
Если j  < r, то перейти к шагу Н5; .если j  = r, то перейти к шагу Н6; если же j  > r,
то перейти к шагу Н8.
Н5. [Найти "большего" сына.] Если Kj < Kj+1, то установить j ← j+1.
Н6. [Больше K?] Если К ≥ Кj, то перейти к шагу Н8.
Н7. [Поднять его вверх.] Установить Ri ← Rj  и возвратиться к шагу Н4.
Н8. [Занести R.] Установить Ri  ←  R. (На этом алгоритм "протаскивания", начатый
в шаге НЗ, заканчивается.) Возвратиться к шагу Н2.


А вот Код:


Код

program  lab_Derevo;
uses crt,windos;
type mt=record
          num:integer;
          mas:string[20];
  end;
var
    n,i,j,l,r:integer;
    f1,f2:text;
    a:array[1..1705] of mt;
    num:integer;
    s:string;
Procedure heap(n:integer;a:array of mt);
 var
     i,j,r,l:integer;
     s:string;
     label lend,H2,H4,H5,H6,H8;
Begin
{H1.   Nachalnye ustanovki}
    l:=(n div 2) + 1;
    r:=n;
{H2.   Umenshyt' l ili r}  H2:
    if (l>1) then begin
        l:=l-1; s:=a[l].mas;  num:=a[l].num;
    end
    else begin
     s:=a[r].mas; num:=a[r].num; a[r].mas:=a[l].mas; r:=r-1;
       if (r=1) then begin
                     a[l].mas:=s;
                     goto lend;
                     end;
    end;
{H3.   Prigotovit'sya k protaskivaniyu}
   j:=l;
{H4,   Prodvinut'sya vniz}  H4:
   i:=j; j:=2*j;
   if (j<r) then goto H5;
   if (j=r) then goto H6;
   if (j>r) then goto H8;
{H5.    Nayti bolshego syna}   H5:
   if (a[j].mas<a[j+1].mas) then j:=j+1;
{H6.   Bol'she K?} H6:
   if (s>=a[j].mas) then goto H8;
{H7.   Podnyat' ego vverh}
   a[i].mas:=a[j].mas; goto H4;
{H8.   Zanesti R} H8:
   a[i].mas:=s; goto H2;
lend:
end;
BEGIN
clrscr;
  assign (f1,'in.txt');
  reset (f1);
 i:=0;
    While not EOF(f1) do begin
       readln(f1,s);
       a[i].mas:=s;
       a[i].num:=i;
       inc(i);
     end;
 n:=i;
  assign(f2,'out.txt');
  rewrite(f2);
 HEAP(n,a);
for i:=1 to n do begin
  writeln(f2,a[i].mas,'  ',a[i].num);
end;
readln;
END.


PM MAIL   Вверх
Dobermann
Дата 25.12.2008, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



Ну для начала закрой файл в конце...и почему именно 1705?
PM   Вверх
volvo877
Дата 26.12.2008, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(K270490 @  25.12.2008,  18:54 Найти цитируемый пост)
при выполнении программы ошибка Error 202. Stack is overflow error. 
У тебя при выполнении может быть все, что угодно... Тысячу раз твердишь,
1) НИКОГДА не отключайте проверку выхода за границы массивов в опциях компилятора!!!
2) НИКОГДА не используйте стиль "спагетти" при написании программ!!!

Нет, будут отключать (и не замечать, что после чтения из файла первой же строки есть попытка записать ее по индексу 0. А массив-то описан с индексацией с 1 (единицы)!!! А что в этом случае меняется, какая переменная молча затирается - это по фигу, да?), и будут использовать эти дебильные goto... Чего ты их понаставил? С Бейсика что-ли переводил программу? Вот в Бейсике и оставляй, Паскаль позволяет обойтись другими (намного более красивыми методами) для решения этой задачи... Разбираться в коде не буду, делать больше нечего, как изобретать велосипед. Надо - вот тут есть действительно работающий код: http://volvo71.narod.ru/sorting.htm#sort_heap, дорабатывай для своей структуры...

И не забудь закрыть файл, иначе он всегда будет пустым...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.