Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2008, 16:49   #1
kolduev
Пользователь
 
Регистрация: 12.01.2008
Сообщений: 30
По умолчанию У кого нить есть пример Ханойской Башни

У кого нить есть пример Ханойской Башни, а то по тому алгоритму я ваще ничё не понимаю, игру надо сделать на Delphi, я так понимаю колышки и диски нада делать компонентом Shape! Но нифига не получается реализовать эту задачу((
kolduev вне форума Ответить с цитированием
Старый 16.02.2008, 21:44   #2
KORT
Вот я и
Форумчанин
 
Аватар для KORT
 
Регистрация: 07.04.2007
Сообщений: 501
По умолчанию

На паскале:
Код:
program Hanoi_Towers;
uses Crt;
var n : Integer;
procedure Move_Disks (n : Byte; Source, Dest, Tmp : Char);
{ n      - Число дисков на столбике Source             }
{ Source - Исходный столбик                            }
{ Dest   - Столбик, на который нужно переставить диски }
{ Tmp    - Вспомогательный столбик                     }
begin
    if n = 1 then
      Writeln('Переставить диск номер 1 со столбика ',
               Source, ' на столбик ', Dest)
    else begin
{Переставляем n-1 верхних дисков с исходного столбика на}
{вспомогательный, используя целевой диск как промежуточный}
      Move_Disks ( n-1, Source, Tmp, Dest );
      Writeln('Переставить диск номер ', n:1, ' со столбика ',
               Source, ' на столбик ', Dest);
{Переставляем все n-1 диск, расположенные на вспомогательном}
{ столбике, на целевой, используя исходный диск как
  промежуточный }
      Move_Disks ( n-1, Tmp, Dest, Source);
    end
end;
begin
  ClrScr;
  Write('Введите число дисков: ');
  Readln(n);
  Writeln;
  Writeln('Последовательность инструкций для решения задачи:');
  Writeln;
  Move_Disks (n, 'A', 'C', 'B')
end.
Исходники программ - http:\\www.kort.3dn.ru
KORT вне форума Ответить с цитированием
Старый 16.02.2008, 22:21   #3
kolduev
Пользователь
 
Регистрация: 12.01.2008
Сообщений: 30
По умолчанию

блин, который раз вижу этот алгоритм, но никак не пойму как сделать на Delphi с колышками и дисками(( чтоб можно было вручную диски перемещать!!!
kolduev вне форума Ответить с цитированием
Старый 17.02.2008, 11:19   #4
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Держи пример. Но над ним еще работать и работать.
Вложения
Тип файла: rar tower.rar (1.1 Кб, 124 просмотров)
_Dmitry вне форума Ответить с цитированием
Старый 17.02.2008, 17:27   #5
kolduev
Пользователь
 
Регистрация: 12.01.2008
Сообщений: 30
По умолчанию

ну вот теперь интересно как это совместить с тем самым алгоритмом! мож я дурак какой , но чес слово в голове не укладывается! подскажите!!!
kolduev вне форума Ответить с цитированием
Старый 17.02.2008, 17:49   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

kolduev, а собственно, КАКАЯ у вас стоит задача?
Если реализовать игру "Ханойская Башня" - чтобы человек сам её решал (путём перекладывания колечек с колышка на колышек), - то Вам нужно взять пример, столь любезно предоставленный _Dmitry и добавить в него проверку на возможные перемещения (т.е. реализовать ПРАВИЛА перекладывания - ну, можно брать только верний диск, меньший можно положить на больший и т.д.), возможные фишки - подсчёт числа перемещений, учёт времени, анимация, звуковый эффекты, музыка и т.д...
Приведённый выше код - РЕШАЕТ задачу - т.е. он выдаёт список и последовательность дисков, которые нужно переложить, чтобы решить задачу.
Его вы можете вставить в программу только в том случае, если у Вас программа будет САМА перекладывать диски - т.е. компьютер будет "показывать" игроку/зрителю, как задача решается... без его участия в перетаскивании дисков.
Разумеется можно совместить эти варианты (например, кнопочка "Подсказка" может показывать человеку какой диск и куда перекладывать следующий...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.02.2008, 18:23   #7
kolduev
Пользователь
 
Регистрация: 12.01.2008
Сообщений: 30
По умолчанию

вот у меня например 6 дисков Panel, как сделать чтобы можно было брать тока верхний, меньший ложить на больший, да и чтоб учитывалось на каком колышке какой диск лежит!

Последний раз редактировалось kolduev; 17.02.2008 в 19:38.
kolduev вне форума Ответить с цитированием
Старый 17.02.2008, 20:20   #8
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Вот пример использования приведенной выше процедуры.
Ну, а на последние вопросы ищите решение сами. Здесь работа для соображалки программиста.

Пример => пост #10

Последний раз редактировалось _Dmitry; 18.02.2008 в 11:18.
_Dmitry вне форума Ответить с цитированием
Старый 17.02.2008, 20:43   #9
kolduev
Пользователь
 
Регистрация: 12.01.2008
Сообщений: 30
По умолчанию

спасибо! это уже хоть чтото!
но последний вопрос остаётся актуальным!!
kolduev вне форума Ответить с цитированием
Старый 18.02.2008, 10:48   #10
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Вводите дополнительные переменные, массивы и храните промежуточные результаты
Вложения
Тип файла: rar tower2.rar (1.9 Кб, 212 просмотров)
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
У кого практика? Пример отчета [Smarik] Свободное общение 10 21.06.2009 19:59
FRAPS - У кого есть??? PAVEL315 Софт 1 28.11.2007 05:32
QIP Dll's Описание у кого есть? LEKA Win Api 10 18.05.2007 08:55
Ошибки компиляции. У кого есть =*=|/|MM0PT@/\=*= Паскаль, Turbo Pascal, PascalABC.NET 4 02.04.2007 06:10
Есть ли у кого пример корпоративного стандарта программирования на C/C++? lexluther Общие вопросы C/C++ 6 01.02.2007 15:10