2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Ханойские башни
Сообщение17.08.2009, 17:31 


21/07/09
300
Напишите пожалуйста решение задачи про ханойские башни на Delphi

 Профиль  
                  
 
 Re: Ханойские башни
Сообщение18.08.2009, 15:13 


21/07/09
300
Если эта задача такая уж сложная, то прошу пожалуйста помочь в решении производной задачи. Про башни я решил на турбо паскале и она имеет вид
program e31;
var k:integer;
procedure Hanoy(n:integer;One,Two,Three:char);
begin
if n>0 then
begin
Hanoy (n-1,One,Three,Two);
writeln('переместить диск', n,'из стержня',One,'на стержень',Two);
Hanoy(n-1,Two,One,Three)
end;
end;
begin
write('Введите количество дисков');
readln(k);
Hanoy(k,'A','B','C')
end.

Осталось перевести ее на язык делфи. Я пробовал, но уменя выбивает сообщение про необъявленное поле вывода, которое я разместил в теле процедуры.Предложите пожалуйста свой метод решения этой задачи.

 Профиль  
                  
 
 Re: Ханойские башни
Сообщение18.08.2009, 17:15 
Заслуженный участник


26/07/09
1559
Алматы
Логика реализуется следующей процедурой:

Код:
(*
**  This recursive procedure moves all disks from
**  peg with number stored in SourcePeg variable
**  to peg defined by DestinationPeg value,
**  preserving its increasing order (lower disk
**  always lies on top of any subset of disks).
*)
procedure Hanoi(Disks,SourcePeg,DestinationPeg: integer);
var AuxiliaryPeg: word;
begin
    if Disks=0 then exit;

    // Find free peg (using fact that
    // sum of all pegs is six).
    AuxiliaryPeg:=6-SourcePeg-DestinationPeg;

    // Move all but one disk from source
    // to free peg.
    Hanoi(Disks-1,SourcePeg,AuxiliaryPeg);

    // Move bottom disk to destination peg.
    MoveDisk(SourcePeg,DestinationPeg);

    // Return disks from auxiliary peg
    // to destination.
    Hanoi(Disks-1,AuxiliaryPeg,DestinationPeg);
end;


Использование: Hanoi(DisksCount,1,3);

TODO:
  • Определить процедуру MoveDisk(SourcePeg,DestinationPeg), перемещающую диск со стержня SourcePeg на стержень DestinationPeg (эта процедура может просто печатать очередной ход в консоль или же проигрывать анимацию диска, перелетающего со стержня на стержень).
  • Попробовать раскрыть рекурсию (очень полезное упражнение).
  • Создать оболочку (добавить форму, поля ввода, кнопки, etc). Считывать данные (e.g. количество дисков) можно из элемента управления типа TEdit, например так: DisksCount:=StrToInt(EditBox.Text), а вывод можно производить добавляя записи в элемент типа TListBox: ListBox.Items.Add(format('%d -> %d',[SourcePeg,DestinationPeg])).

 Профиль  
                  
 
 Re: Ханойские башни
Сообщение18.08.2009, 19:02 


21/07/09
300
Примерно на таком же уровне я и остановился. Проблема в выводе информации.

 Профиль  
                  
 
 Re: Ханойские башни
Сообщение18.08.2009, 19:37 
Заслуженный участник


26/07/09
1559
Алматы
Поизучайте примеры проектов, включенных в поставку IDE.

Или какая-то конкретная проблема имеется?

 Профиль  
                  
 
 Re: Ханойские башни
Сообщение19.08.2009, 22:47 


21/07/09
300
Выскакивает сообщение undeclared identifier:mem_rez где mem_rez-имя поля Tmemo, которое есть на форме и описанное в коде формы

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group