Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23


Download 1.85 Mb.
Pdf ko'rish
bet36/111
Sana19.11.2023
Hajmi1.85 Mb.
#1786905
TuriУчебное пособие
1   ...   32   33   34   35   36   37   38   39   ...   111
Bog'liq
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев

Листинг 3.4. Ханойские башни 
void Hanoj(int d1,int d2,int d3, // 
стержни 
int k) // 
количество колец 
6 / 23


53 

if (k>0)

Hanoj(d1,d3,d2,k-1); 
//
переместить кольцо со стержня d1 на стержень 
d2 
//
отобразить
Hanoj(d3,d2,d1,k-1); 


В этой функции пока не прописаны два действия: 
переместить кольцо со стержня d1 на стержень d2,
− отобразить. 
Конкретный вид этих действий зависит от способа представления дан-
ных, в частности результата выполнения функции. Мы ставим своей целью 
получить графическую иллюстрацию выполнения алгоритма.
Для рисования башен необходимо знать, сколько колец и какого разме-
ра лежит на каждом стержне. Поскольку по правилам игры брать со стержня 
можно только верхнее кольцо, класть кольцо можно только на верхушку 
стержня, то естественно в качестве структуры для хранения информации о 
кольцах на стержнях выбрать стек. В соответствии с условием задачи необ-
ходимо иметь три одинаковых стека. Мы реализуем это в виде массива сте-
ков ArSt. Каждый из стеков представляет собой экземпляр класса MyStack
имеющего методы добавления и извлечения элементов. Данный класс описан 
в главе 8 книги «C#. Введение в программирование». 
В стек помещаются целые числа, величина числа соответствует разме-
ру кольца. Каждый стержень имеет свой стек. И тогда перемещение кольца с 
одного стержня на другой эквивалентно извлечению числа из одного стека и 
помещению его в другой стек. После каждого перемещения кольца отобра-
жаются башни. Функция Hanoj() с детализацией действия по перемещению 
кольца приведена в листинге 3.5. 
Листинг 3.5. Ханойские башни. Основная функция 
void Hanoj(int d1,int d2,int d3, // 
стержни 
int k) // 
количество колец 
7 / 23


54 

if (k>0) 

Hanoj(d1,d3,d2,k-1); 
int e = ArSt[d1].PopStack();// 
кольцо диа-
метром e берется со стержня d1 
ArSt[d2].PushStack(e); // 
кольцо кла-
дется на стержень d2 
Drawing();
// 
отображение 
стержней 
Hanoj(d3,d2,d1,k-1); 


Создадим проект, иллюстрирующий работу по перекладыванию колец. 
Форма проекта показана на рисунке 3.4. На ней представлен завершающий 
этап работы: 5 колец со стержня 1 перемещены на стержень 2. На форме раз-
мещены следующие элементы управления: 
− текстовое поле для ввода числа колец; 
− кнопка buttonRun, активизирующая процедуру Hanoj(); 
− кнопка buttonClear, удаляющая старый рисунок. 
Рис. 3.4. Форма проекта «Ханойские башни» 
8 / 23


55 
Обработчик события щелчка по кнопке buttonRun приведен в лис-
тинге 3.6. 

Download 1.85 Mb.

Do'stlaringiz bilan baham:
1   ...   32   33   34   35   36   37   38   39   ...   111




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling