Методы решения задачи о Ханойских башнях

Цель и задачи работы нахождение решения задачи о ханойских башнях. Обоснование выбора средства программирования. Требования к аппаратному и программному обеспечению. Алгоритм решения задачи. Функциональное назначение, директивы предпроцессора и константы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 16.09.2017
Размер файла 430,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство сельского хозяйства Российской Федерации

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

КУБАНСКИЙ ГОСУДАРСТВЕННЫЙ АГРАРНЫЙ УНИВЕРСИТЕТ

Кафедра системного анализа и обработки информации

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по дисциплине: Алгоритмы и структуры данных

на тему: Методы решения задачи о Ханойских башнях

выполнил студент группы ПИ-1201

Горятов Александр Александрович

Руководитель проекта Анищик Т.А.

Краснодар

2013 г.

Реферат

Пояснительная записка содержит:

15 листов,

7 картинок,

2 приложения.

Целью курсовой работы является рассмотрение различных методов решения задачи о Ханойских башнях и программная реализация в среде Visual Studio 2010.

Результатом работы являются две программы, которые иллюстрируют два метода нахождения решения задачи о Ханойских башнях в среде Visual Studio 2010.

ханойский башня программирование директив

Оглавление

  • Введение
  • 1. Постановка задачи
    • 1.1 Цель и задачи работы нахождение решения задачи о ханойских башнях
    • 1.2 Обоснование выбора средства программирования
    • 1.3 Входная и выходная информация
    • 1.4 Требования к аппаратному и программному обеспечению
  • 2. Сведения из теории
  • 3. Алгоритм решения задачи
  • 4. Описание программ
    • 4.1 Функциональное назначение
    • 4.2 Директивы предпроцессора и константы
  • 5. Руководство пользователя
  • Заключение
  • Литература
  • Приложение 1
  • Приложение 2

Введение

В настоящее время стремительными темпами развиваются информационные технологии и связанные с ними сферы человеческой деятельности. С каждым годом всё больший объём информации обрабатывается с помощью современных персональных компьютеров.

Для того чтобы написать программу любого уровня сложности применяют так называемые средства быстрой разработки приложений. Их ключевым преимуществом является отсутствие необходимости проектировать стандартные элементы управления операционной системы Windows. А так же можно визуально наблюдать за каждым процессом написания и отладки программного обеспечения. Все это значительно упрощает процесс создания программы.

Целью курсовой работы является получение практических навыков и опыта разработки программ в среде визуального программирования Visual Studio 2010 express с помощью разработки приложения Решение задачи о ханойских башнях.

1. Постановка задачи

1.1 Цель и задачи работы нахождение решения задачи о восьми ферзях

Основной целью данной работы является разработка программы «Нахождение решения задачи о ханойских башнях», а также закрепление практических навыков программирования в среде “Visual Studio 2010”.

Задачи курсовой работы:

-изучить методы решения задачи о ханойских башнях;

-разработать алгоритм решения задачи;

-осуществить программную реализацию в среде “Visual Studio 2010”;

-протестировать разработанное приложение.

1.2 Обоснование выбора средства программирования

Для написания программы выбрана среда программирования “Visual Studio 2010 express”, основанную на языке программирования C++. Данная среда выгодно отличается эффективностью и надежностью. А так же C++ предоставляет разработчику более комфортные условия и более широкие возможности для создания дружественного интерфейса.

1.3 Входная и выходная информация

Входными данными для программы являются:

- количество колец;

- количество колышек;

-переменные;

Выходными данными являются результаты вычислений, иначе говоря расстановка восьми ферзей на шахматной доске.

1.4 Требования к аппаратному и программному обеспечению

Персональный компьютер фирмы IBM серии PC (или совместимый с этими моделями), работающий под управлением операционной системы (ОС) Windows 98/XP/Vista/7/8, операционная память не менее 64 Мбайт, процессор с тактовой частотой не менее 133 MHz, клавиатура, мышь.

2. Сведения из теории

Ханойская башня является одной из популярных головоломок XIXв.

Даны три стержня, на один из которых нанизаны восемь колец, причем кольца отличаются размером и лежат меньшие на большем. Задача состоит в том, чтобы перенести пирамиду из восьми колец за наименьшее число ходов на другой стержень. За один раз разрешается переносить только одно кольцо, причём нельзя класть большее кольцо на меньшее.

Легенда гласит, что в Великом храме города Бенарас, под собором, отмечающим середину мира, находится бронзовый диск, на котором укреплены 3 алмазных стержня, высотой в один локоть и толщиной с пчелу.

Давным-давно, в самом начале времён, монахи этого монастыря провинились перед богом Брахмой. Разгневанный, Брахма воздвиг три высоких стержня и на один из них возложил 64 диска, сделанных из чистого золота. Причем так, что каждый меньший диск лежит на большем.

Как только все 64 диска будут переложены со стержня, на который Брахма сложил их при создании мира, на другой стержень, башня вместе с храмом обратятся в пыль и под громовые раскаты погибнет мир.

Количество перекладываний в зависимости от количества колец вычисляется по формуле 2n-1.

Число перемещений дисков, которые должны совершить монахи, равно 18 446 744 073 709 551 615. Если бы монахи, работая день и ночь, делали

каждую секунду одно перемещение диска, их работа продолжалась бы 584 миллиарда лет.

В информатике задачи, основанные на легенде о Ханойской башне, часто рассматривают в качестве примера использования рекурсивных алгоритмов и преобразования их к не рекурсивным.

3. Алгоритм решения задачи

Минимальное число ходов, необходимое для решения головоломки, равно 2n - 1, где т -- число дисков.

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

Рекурсивный алгоритм решения задачи

В программировании рекурсия -- вызов функции из неё же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия), например, функция вызывает функцию , а функция -- функцию . Количество вложенных вызовов функции или процедуры называется глубиной рекурсии. Рекурсивная программа позволяет описать повторяющееся или даже потенциально бесконечное вычисление, причём без явных повторений частей программы и использования циклов.

Структурно рекурсивная функция на верхнем уровне всегда представляет собой команду ветвления (выбор одной из двух или более альтернатив в зависимости от условия (условий), которое в данном случае уместно назвать «условием прекращения рекурсии»), имеющей две или более альтернативные ветви, из которых хотя бы одна являетсярекурсивной и хотя бы одна -- терминальной. Рекурсивная ветвь выполняется, когда условие прекращения рекурсии ложно, и содержит хотя бы один рекурсивный вызов -- прямой или опосредованный вызов функцией самой себя. Терминальная ветвь выполняется, когда условие прекращения рекурсии истинно; она возвращает некоторое значение, не выполняя рекурсивного вызова. Правильно написанная рекурсивная функция должна гарантировать, что через конечное число рекурсивных вызовов будет достигнуто выполнение условия прекращения рекурсии, в результате чего цепочка последовательных рекурсивных вызовов прервётся и выполнится возврат.

Помимо функций, выполняющих один рекурсивный вызов в каждой рекурсивной ветви, бывают случаи «параллельной рекурсии», когда на одной рекурсивной ветви делается два или более рекурсивных вызова.

Параллельная рекурсия типична при обработке сложных структур данных, таких как деревья. Простейший пример параллельно-рекурсивной функции -- вычисление ряда Фибоначчи, где для получения значения n-го члена необходимо вычислить (n-1)-й и (n-2)-й.

4. Описание программ

4.1 Функциональное назначение

Данные программы предназначены для нахождения решения задачи о ханойских башнях.

4.2 Директивы предпроцессора и константы

Директива #include указывает препроцессору, что нужно обработать содержимое указанного файла, если эти содержимое отображалось в программе- источник в точке отображения директивы.* (http://msdn.microsoft.com/ru-ru/library/36k2cdd4.aspx)

#include <iostream> - это заголовочный файл включающий классы, функции и переменные для организации ввода и вывода в С++.

CH - число колец;

N - начальное положение колец;

K- конечное положения колец;

PR - промежуточный колышек;

5. Руководство пользователя

Запускаемым файлом программы является файл башня.exe.

После запуска первой программы нахождения решения задачи о ханойских башнях на экране появляется главное окно программы, представленное на рисунке 1.

Рисунок 1 - Главное окно программы «1 Нахождение решения задачи о восьми ферзях»

Далее вводим исходный колышек

Рисунок 2 - ввод главного колышка

После вводим конечный колышек

Рисунок 3 - ввод конечного колышка.

После вводим «промежуточное хранилище»

Рисунок 4 - ввод «промежуточного хранилища»

И в конце вводим количество дисков

Рисунок 5 - ввод количества дисков

В результате получаем решение

Рисунок 7 - решение задачи о ханойских башнях

Заключение

В ходе выполнения курсовой работы были получены и закреплены навыки программирования в среде Visual Studio 2010. В результате созданы два рабочих приложения «1 Нахождение решения задачи о Ханойских башнях». Проведенное тестирование работы программы не выявило существенных ошибок. Но это не исключает возможности их появления при проведении более глубокого и длительного тестирования.

Литература

http://ru.wikipedia.org/wiki/Ханойская_башня

http://ru.wikipedia.org/wiki/Рекурсия

Приложение 1

Листинг основного модуля программы «1 нахождение решения задачи о восьми ферзях» .

#include <iostream>

using namespace std;

void hanoi_bashnya(int CH, int N, int K, int PR) //CH-число колец, N-начальное положение колец, K-конечное положение колец PR - промежуточный колышек

{

if (CH != 0)

{

hanoi_bashnya(CH-1, N, PR, K);

cout << N << " --> " << K << endl;

hanoi_bashnya(CH-1, PR, K, N);

}

}

int main()

{

setlocale(LC_ALL,"rus"); //подключение русского языка

int start_peg, destination_peg, PR_peg, plate_CH;

cout << "Исходный колышек:" << endl;

cin >> start_peg;

cout << "Конечный колышек:" << endl;

cin >> destination_peg;

cout << "Промежуточное хранилище:" << endl;

cin >> PR_peg;

cout << "Количество дисков:" << endl;

cin >> plate_CH;

hanoi_bashnya(plate_CH, start_peg, destination_peg, PR_peg);

system("pause");

}

Приложение 2

Блок схема рекурсивного решения алгоритма

Размещено на Allbest.ru

...

Подобные документы

  • Анализ и характеристика рекурсивного алгоритма решения задачи о Ханойских башнях, а также порядок его временной сложности в соответствии с пошаговым алгоритмом. Методика и особенности разработки программы, печатающей последовательность действий, ее текст.

    курсовая работа [247,8 K], добавлен 08.02.2010

  • Последовательность разработки "Базы данных ГОСТИНИЦА" в среде Visual Studio 2010 C#. Обоснование выбора средства программирования. Требования к аппаратному обеспечению. Алгоритм решения задачи, функциональное назначение. Руководство пользователя.

    курсовая работа [2,0 M], добавлен 07.07.2012

  • Написание приложения "Нахождение безусловного экстремума методом Ньютона" в среде Visual Studio 2010. Требования к аппаратному и программному обеспечению. Функциональное назначение программы, директивы предпроцессора и константы, руководство пользователя.

    курсовая работа [456,3 K], добавлен 13.10.2014

  • Обоснование выбора средства программирования: входная и выходная информация, требования к аппаратному и программному обеспечению. Функциональное назначение программы, её глобальные переменные и константы, внутренняя структура и руководство пользователя.

    курсовая работа [1,4 M], добавлен 07.09.2012

  • Классификация и стек рекурсивных функций. Методика распознавания формулы, записанной в строке. Реализация салфетки Серпинского и задачи о Ханойских башнях. Алгоритм быстрой сортировки. Создание функции, сортирующей массив с использованием рекурсии.

    лабораторная работа [160,8 K], добавлен 06.07.2009

  • Организационно-экономическая сущность задачи автоматизации библиотечной информационной системы. Режимы работы и информационная модель решения задачи, описание входной и выходной информации. Обоснование выбора языка программирования, алгоритм решения.

    дипломная работа [448,5 K], добавлен 08.11.2010

  • Описание предметной области решаемой задачи. Входные документы, необходимые для решения задачи, ее функции. Разработка информационного обеспечения задачи и реквизиты входной информации. Технология и алгоритмов решения задачи и их машинная реализация.

    контрольная работа [15,1 K], добавлен 21.10.2010

  • Теоретическая основа линейного программирования. Задачи линейного программирования, методы решения. Анализ оптимального решения. Решение одноиндексной задачи линейного программирования. Постановка задачи и ввод данных. Построение модели и этапы решения.

    курсовая работа [132,0 K], добавлен 09.12.2008

  • Разработка программы для вычисления производительности труда рабочих цеха. Описание среды и языка программирования. Требования к программному и аппаратному обеспечению. Математическая модель решения задачи. Методы тестирования. Техника безопасности.

    курсовая работа [2,6 M], добавлен 29.03.2013

  • Задачи, решаемые методом динамического программирования. Основные этапы нахождения деревянного алгоритма решения задачи. Выполнение алгоритма Прима. Построение Эйлерового цикла. Решение задач средствами Excel. Алгоритм основной программы - Derevo.

    курсовая работа [586,3 K], добавлен 04.04.2015

  • Описание алгоритма решения транспортной задачи по планированию перевозки зерна. Ход решения задачи вручную, в программе TORA методом наименьшего элемента, с помощью MS Excel. Разработка программы для решения задачи в общем виде средствами Delphi.

    курсовая работа [2,5 M], добавлен 22.11.2012

  • Критерий эффективности и функции в системе ограничений. Общая постановка задачи линейного программирования. Составление математической модели задачи. Алгоритмы решения задачи симплексным методом. Построение начального опорного решения методом Гаусса.

    курсовая работа [232,4 K], добавлен 01.06.2009

  • Описание симплекс метода решения задачи линейного программирования. Решение задачи методом Литла на нахождение кратчайшего пути в графе, заданном графически в виде чертежа. Из чертежа записываем матрицу расстояний и поэтапно находим кратчайший путь.

    задача [390,4 K], добавлен 10.11.2010

  • Описание решения задачи, ее постановка, общий подход к решению. Представление исходных данных, условий задачи и целей ее решения. Составление алгоритма решения поставленной задачи. Написание программного обеспечения и тестирование конечного продукта.

    курсовая работа [1,1 M], добавлен 03.07.2011

  • Оптимизация решения задачи с помощью алгоритма отжига. Анализ теории оптимизации как целевой функции. Метод градиентного спуска. Переменные и описание алгоритма отжига. Представление задачи коммивояжера через граф. Сведение задачи к переменным и решение.

    курсовая работа [784,0 K], добавлен 21.05.2015

  • Алгоритм решения задач линейного программирования симплекс-методом. Построение математической модели задачи линейного программирования. Решение задачи линейного программирования в Excel. Нахождение прибыли и оптимального плана выпуска продукции.

    курсовая работа [1,1 M], добавлен 21.03.2012

  • Математические и алгоритмические основы решения задачи. Функциональные модели и блок-схемы решения задачи. Программная реализация решения задачи. ЛИСП-реализация вычисления неэлементарных функций. Вычисления гамма функции для положительных неизвестных х.

    курсовая работа [621,2 K], добавлен 18.01.2010

  • Поиск верхних и нижних границ для оптимального значения на подобласти допустимых решений. Методы и проблемы решения задач нелинейного программирования. Написание и отладка программы. Создание программы для решения задачи "коммивояжёра" прямым алгоритмом.

    курсовая работа [176,9 K], добавлен 22.01.2016

  • Решение задачи линейного программирования графическим методом, его проверка в MS Excel. Анализ внутренней структуры решения задачи в программе. Оптимизация плана производства. Решение задачи симплекс-методом. Многоканальная система массового обслуживания.

    контрольная работа [2,0 M], добавлен 02.05.2012

  • Обзор методов и подходов решения поставленной задачи аппроксимации логического вывода экспертной системы. Разработка и описание метода сетевого оператора для решения данной задачи. Разработка алгоритма решения. Проведение вычислительного эксперимента.

    дипломная работа [1,5 M], добавлен 23.02.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.