|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.05.2007, 14:53 | #1 |
Пользователь
Регистрация: 05.05.2007
Сообщений: 31
|
Помогите с "Ханойскими башнями"
Дорогие мои!!! Мне надо курсовую сдавать..... а у меня ничего нет!!! Программка вот такая:
Есть три стержня A, B, и C. На стержень A надето N дисков, наверху самый маленький, каждый следующий диск больше предыдущего, а внизу самый большой. На другие стержни дисков не надето. Hеобходимо перенести диски со стержня A на стержень C, пользуясь стержнем B, как вспомогательным, так, чтобы диски на стержне C располагались в том же порядке, в каком они располагаются на диске A перед перемещением. При перемещении никогда нельзя класть больший диск на меньший. Все это надо сделать на Delphi с формой, чтобы пользователь мог сам переносить диски.... ПОЖАЛУЙСТА ПОМОГИТЕ!!!!!!!!!!!!!!!!!!!!!!!!! |
05.05.2007, 17:21 | #2 |
Форумчанин
Регистрация: 16.04.2007
Сообщений: 298
|
В инете есть замечательный файл помощи drkb.chm. Скачай его, там много интересного, а на твой вопрос:
"Ханойская башня" построена на очень простом алгоритме. Здесь я привожу этот алгоритм, который Вы сможете без труда воспроизвести. type THanoiPin = 0..2; THanoiLevel = 0..9; procedure MoveDisc(FromPin, ToPin : THanoiPin; Level : THanoiLevel); // Это Вы должны сделать сами. Переместите один диск с одного штырька на другой. // Диск окажется наверху (естественно, выше него дисков не будет) Вы можете каким угодно образом перемещать диски 3-х пирамид. 3 пирамиды - наиболее простая разновидность алгоритма. Таким образом процедура переноса диска (MoveDisc) аналогична операции переноса диска на верхний уровень (MoveTopDisc): переместить диск наверх с одного штырька (FromPin) на другой штырек (ToPin) и передать указатель на штырек-приемник (MoveTower) вместе с уровнем расположения перемещенного диска. Другое решение заключается в использовании трех массивов [THanoiLevel] логического типа. В этом случае триггер "Истина (True)" означает наличие на пирамиде диска с размером, соответствующим порядковому номеру элемента массива THanoiLevel. procedure MoveTower(FromPin, ToPin : THanoiPin; Level : THanoiLevel); begin if HanoiLevel <= High(THanoiLevel) then begin MoveTower(FromPin, 3 - FromPin - ToPin, Level + 1); MoveDisc(FromPin, ToPin, Level); MoveTower(3 - FromPin - ToPin, ToPin, Level + 1); end; end; Чтобы переместить пирамиду целиком, вы должны вызвать процедуру MoveTower следующим образом: MoveTower(0, 1, Low(THanoiLevel)); Взято с www.delphiworld.narod.ru
Не надо ничего усложнять. Все достаточно тривиально.
|
05.05.2007, 19:03 | #3 |
Пользователь
Регистрация: 05.05.2007
Сообщений: 31
|
Это я уже видела!!!! Спасибо тебе, конечно, ОГРОМНОЕ!!! Но просто сейчас реально времени нет..... Может у кого-нибудь есть уже готовая программка?? Если есть я буду ОЧЕНЬ благодарна!!!!
|
05.05.2007, 23:51 | #4 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Код:
Последний раз редактировалось Stilet; 17.02.2010 в 08:28. |
06.05.2007, 10:55 | #5 |
Пользователь
Регистрация: 05.05.2007
Сообщений: 31
|
Понимаешь, мне на Дельфи надо!!!!!!!!!!! На Паскале-то я уже сделала!!!
|
07.05.2007, 16:54 | #6 |
Андрей
Форумчанин
Регистрация: 21.11.2006
Сообщений: 457
|
Так в чем проблема? Портировать с Паскаля на Делфи? Скинь наработки, раз есть...
ICQ: 5311314
[SIGPIC][/SIGPIC] |
08.05.2007, 00:28 | #7 |
JAVA BEAN
Участник клуба
Регистрация: 22.04.2007
Сообщений: 1,329
|
Берём объект ListBox1, кидаем на форму, берём кнопку Button1, кидаем на форму, пишем:
const N=10; procedure Hanoy(A,B,C:char; count:integer); begin if count>0 then begin Hanoy(A,C,B,count-1); Form1.ListBox1.Items.Add('From '+A+' to '+C); Hanoy(B,A,C,count-1); end end; 2 раза щёлкаем по кнопке. В появившейся процедуре пишем: Hanoy('A','B','C',N) |
13.05.2007, 13:25 | #8 |
Пользователь
Регистрация: 05.05.2007
Сообщений: 31
|
Люди!!!! Вот вроде с игрой у меня все получилось, теперь мне бы на Дельфи написать демо-версию этой игры, т.е. чтобы она показывала сама все ходы - передвигала эти самые блоки!!! Буду очень благодарна!!!!!!!!!!!!!
|
14.05.2007, 08:13 | #9 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
В каждом цикле (а точнее в одном) делаем прорисовку параметров и паузу.
Познавая других, мы познаем себя.
С'est la vie... |
12.01.2008, 22:34 | #10 |
Пользователь
Регистрация: 12.01.2008
Сообщений: 30
|
с алгоритмом понятно, но как это всё привязать к компонентам, мож я чё не понимаю... из чего тогда делать колышки и диски?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при использовании OlePropertyGet("Documents").OleProcedure("Add") в C++ Builder | AleksP | C++ Builder | 7 | 11.04.2009 13:06 |
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует | skobets | Общие вопросы C/C++ | 2 | 03.06.2008 06:51 |
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) | Dorvir | Microsoft Office Excel | 2 | 28.03.2008 10:03 |
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" | MAcK | Компоненты Delphi | 11 | 24.10.2007 10:49 |
На чем пишутся стратегии типа "Казаков" и "Эпохи империи" | Tayfun | Свободное общение | 3 | 26.06.2007 20:27 |