Здравствуйте! У меня возникла проблемма в задаче нахождения Эйлерова пути между словами. Задача состоит в следующем: есть N слов из букв латинского альфавита. Сложить из них цепочку и найти эйлеров путь, при чем конец последующего слова должен совпадать с началом предыдущего. Кое-что я написала, но не пойму почему мне постоянно компилятор дает ошибку-переполнение стэка, когда у меня нет рекурсии. Что делать? Спасибо! Файл я вложу, потому что он состоит из 200 строчек, и я не думаю, что можно просто его написать на экране.
volvo
1.12.2005 18:50
Цитата
не пойму почему мне постоянно компилятор дает ошибку-переполнение стэка, когда у меня нет рекурсии.
У тебя в процедуре findeiler (при входе в нее происходит Stack Overflow, правда?) описаны ЛОКАЛЬНЫЕ переменные (они хранятся в стеке) общим размером:
итого - 19064 байта... Размер стека по умолчанию = 16К, вот и переполнение...
Пути решения проблемы: 1) увеличить размер стека (директива {$M StackSize HeapMin HeapMax}) по крайней мере до 32К 2) перенести описание переменной R в глрбальную область видимости, тогда она будет располагаться в DataSegment-е и место в стеке занимать не будет (но может появиться новая проблема - общий размер всех глобальных переменных может превысить 64К, а это уже хуже...) 3) использовать динамическую память (она же - "куча")...
setare
1.12.2005 18:58
Извините, а как мы писали директиву? Что-то я подзабыла! Мы писали $M а потом 64000 или нет? А вообще эта программа будет работать, если устранить эту проблему? Просто в голову больше ничего не идет, все что было написала и уже не знаю, а если не будет работать что делать?
volvo
1.12.2005 19:05
Цитата
А вообще эта программа будет работать, если устранить эту проблему?
Вот этого я не знаю... Нужно просто хорошо подобрать тесты, чтобы результаты говорили сами за себя... Если у тебя есть такие тесты уже готовые - выложи их тоже, будем тестировать...
А директиву - хотя бы вот так:
{$M 32768, 0, 0}
Тогда программа уже НЕ вылетает с переполнением стека...
setare
1.12.2005 19:08
Большое спасибо! Просто понимаете, я не очень понимаю, что вы имеете в виду под тестами. Я просто ввожу слова, потом задаю номера двух слов, чтобы программа рассчитывала путь и все. А тестов нет. Я чуть поправила программу, еще раз вложу.
virt
1.12.2005 19:43
под тестами volvo имеет в виду те самые наборы данных которые ты вводишь ,и правильные ответы к ним.
setare
1.12.2005 19:52
Честно говоря я в маленьком затруднении! Я ввела слова mec,cab,bec. Она мне выдала эти же слова по-порядку как они сейчас написаны. По-моему тут что-то не так. Если я сама правильно расчитала.
setare
2.12.2005 16:18
Извините!Просто я хотела уточнить, вы не будете больше тестировать мою программу? Потому что как-то моя просьба и тема вообще ушла на 20 план, а я ждала вашего ответа очень долго!
setare
8.12.2005 17:57
Здравсвуйте! Извините меня за упрямость, но я по техничесим причинам не могу отстать от вас. У меня сомнения, что моя программа работает правильно, но вот уже несколько дней я думаю что поменать а что добавить и ничего не получается. Можете ле вы еще раз взглянуть на мою программу? Пожалуйста!!!
virt
8.12.2005 18:37
Уточни задачу : есть набор слов ,надо выстроить слова в таком порядке ,что бы он включал в себя все слова и последняя буква слова была первой буквой следующего слова. Или некоторые слова можно не использовать?
setare
8.12.2005 18:55
Мы вводим с клавиатуры слова. Программа просто должно выстроить эти слова в цепочку, причем последняя буква первого слова должна совпадатьс с первой буквой последующего. Я обязательно должна использовать процедуры, которые написаны там. Так как их дал нам препод. Не код, а название и только код процедуры findeiler. Если вы мне поможете я буду вам очень благодарна. Все сова надо использовать.
setare
8.12.2005 19:50
Ну вот!!! Людииии!!!Помогите!!!Не бросайте на произвол судьбы!!
virt
8.12.2005 21:25
Цитата
Я обязательно должна использовать процедуры, которые написаны там.
Тебе надо переделать прогу которую дал препод или свою написать?
Код
Не код, а название и только код процедуры findeiler.
Это как??
Пожалуйста отвечай на вопросы которые спрашивают ,и только на них.
setare
8.12.2005 22:42
Отвечаю: Мне нужно с использованием кода процедуры findeiler (который нам выдал препод) написать программу. То что я как-то сделала. После тестирования она мне выдает неправильный результат. И мой конкретный вопрос: Почему? Мне хочется узнать где я ошиблась. Вот и все.Спасибо!
setare
9.12.2005 17:54
Уважаемые программисты! Не могли бы вы обратить внимание на мою программу еще раз, а не игнорировать ее. Сколько можно! Мне очень важен ваш ответ, а вы даже не откликаетесь на мои просьбы.
volvo
9.12.2005 18:28
setare, понимаешь в чем дело... Твой преподаватель поступил очень "мудро", разрешив тебе пользоваться для достижения цели любыми средствами, но только с
Цитата
использованием кода процедуры findeiler
... Без этого ограничения задача решается гораздо проще, и я уверен, тебе бы давно уже помогли ее решить... Но притягивать за уши какую-то непонятно кем "наваянную" процедуру ...
setare
9.12.2005 18:35
И что же мне теперь делать?Я же не выновата, что он дал нам такую процедуру.
virt
9.12.2005 18:48
а он какое нить описание давал ,или что то что поможетразобраться?
setare
9.12.2005 18:54
извините, а что именно? написать что означают входящие в процедуру процедуры и функции?или все,все переменные?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.