![]() |
|
Модераторы: volvo877, Snowy, MetalFan |
![]()
|
|
| K270490 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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. А вот Код:
|
|||
|
||||
| Dobermann |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 992 Регистрация: 7.1.2008 Репутация: нет Всего: 0 |
Ну для начала закрой файл в конце...и почему именно 1705?
|
|||
|
||||
| volvo877 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2073 Регистрация: 15.11.2004 Репутация: 2 Всего: 116 |
1) НИКОГДА не отключайте проверку выхода за границы массивов в опциях компилятора!!! 2) НИКОГДА не используйте стиль "спагетти" при написании программ!!! Нет, будут отключать (и не замечать, что после чтения из файла первой же строки есть попытка записать ее по индексу 0. А массив-то описан с индексацией с 1 (единицы)!!! А что в этом случае меняется, какая переменная молча затирается - это по фигу, да?), и будут использовать эти дебильные goto... Чего ты их понаставил? С Бейсика что-ли переводил программу? Вот в Бейсике и оставляй, Паскаль позволяет обойтись другими (намного более красивыми методами) для решения этой задачи... Разбираться в коде не буду, делать больше нечего, как изобретать велосипед. Надо - вот тут есть действительно работающий код: http://volvo71.narod.ru/sorting.htm#sort_heap, дорабатывай для своей структуры... И не забудь закрыть файл, иначе он всегда будет пустым... |
|||
|
||||
![]()
|
| Правила форума "Delphi" | |
|
|
Запрещается! 1. Обсуждать и делится взломанными компонентами или программным обеспечением 2. Публиковать ссылки на варез 3. Оффтопить
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |