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, Супермодераторы



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

Сейчас этот форум просматривают: Dmitriy40


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

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