![]() |
![]() ![]() |
![]() |
Zveruga |
![]()
Сообщение
#1
|
|||
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Привет, Всем
![]() Пытаюсь написать игру ханойские башни для сдачи курсовой (заочник) ![]() ![]() Алгоритм такой: Все пастроенно на массиве N строк и 3 столбца, далее этот массив заполняется так: 1 0 0 2 0 0 ....... N 0 0 далее нажатиями клавиш я перезаполняю массив по принципу ханойской башни. В результате добавлю гафическое отображение всех этих действий. диски будут привязаны к элементам массива, строкам и столбцам. Вообщем пока не доработанно из за ожного сбоя. Внимание вопрос: ![]() вот исходник алгоритма заполнения матрици.
Как сделю все полностью закончу вывложу полный исходник может кому пригодится ![]()
|
|||
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Как сделю все полностью закончу вывложу полный исходник может кому пригодится Четвертый-то? Вообще-то в FAQ-е лежит 3 программы "Ханойские башни", это так, на всякий случай, для любителей вечно изобретать велосипеды... |
Zveruga |
![]()
Сообщение
#3
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Четвертый-то? Вообще-то в FAQ-е лежит 3 программы "Ханойские башни", это так, на всякий случай, для любителей вечно изобретать велосипеды... Я не любитель изобретать велосипед, но когда темы к курсовым работам всегда одни и теже деваться не куда, а если брать чье-то решение не всегда оканчивается хорошо ![]() Гораздо приятнее сделать что-то самому, чем брать уже готовое решение ![]() Будет 4-ый экземпляр, что в этом плохого? ![]() и проблема вот в этом ![]() принажамтии клавиши вверх "а" присваевается знаяение элемента матрици вот тут то и проблема, привыборе второго столбца, в нем все элементы "0", "а" присваевается значение 10, привыборе третьего столбца "а" присваевается значение 3 откуда эти значения беруться я вообще понять не могу помогите пожалуйста разобраться в принципе из за этого графическое представление всего этого действия и остановилось Сообщение отредактировано: Zveruga - 20.11.2007 10:22 |
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Будет 4-ый экземпляр, что в этом плохого? ![]() Для начала, несколько общих замечаний. 1. Научись форматировать. Я минут пять провел в двиганьи твоих строк туда-сюда, прежде чем программа приобрела нормальный вид. 2. Используй оператор case, во многих случаях это проясняет программу. Например, твое: if (key='q') or (key='Q') then stop:=true;- все можно заменить на такую конструкцию: case key of 3. Оператор repeat ... until сам по себе представляет операторные скобки, begin и end внутри него не нужны. 4. Вместо Stop=false рекомендую писать not Stop. 5. Выводи чуть больше пояснений. Когда прога останавливается молча - непонятно, что жать.. Теперь по твоей проблеме. В том блоке, который ты пытался выделить жирным (я исправил, никогда больше не делай так в программном тексте), есть явная ошибка. Ты проверяешь условие на элемент матрицы, но НЕ проверяешь индекс. Поэтому ты легко выскакиваешь за пределы массива. Если у тебя включена опция Range Check, то это приведет к ошибке, а если не включена - то к непредсказуемому поведению проги (что, как я понимаю, и случилось). Рекомендую держать Range Check включенным на этапе отладки. Исправь и приноси новый вариант программы. Будем разбираться дальше ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Atos |
![]()
Сообщение
#5
|
![]() Прогрессор ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: ![]() ![]() ![]() |
Цитата вот тут то и проблема, привыборе второго столбца, в нем все элементы "0", а вот этот цикл как раз и предполагает, что в столбце найдётся хотя бы один положительный элемент
Таких элементов нет, поэтому происходит выход за границы массива |
Zveruga |
![]()
Сообщение
#6
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Спасибо за ответы
![]() Все замечания учел ![]() ![]() По поводу case, я так понял этот оператор можно использовать только для значищих клавиш на клавиатуре, а для клавиш управления его использовать нельзя. Работаю дальше над программой ![]() З.Ы. Прошу прощения за долгие ответы. Из за разници во времяни не могу быстро отвечать. |
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
а для клавиш управления его использовать нельзя Почему же? Вот, например, самый простой вариант обработчика нажатий клавиш..if KeyPressed then begin -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Zveruga |
![]()
Сообщение
#8
|
![]() Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
Прошу прощение за ДОООЛГИЙ ответ
![]() ![]() ![]() Может это не самый лучший вариант, но все таки сделал сам, но с вашей помощью! Спасибо всем кто откликнулся ![]() program nb3; P.S. За курсовик получил оценку хорошо ![]() |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 2:58 |