Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
3 / 3 / 2
Регистрация: 21.10.2009
Сообщений: 77

Нерекурсивное решение в Ханойских башнях

21.03.2010, 12:13. Показов 1798. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите решить задачу....

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

Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
uses Dos;
 
const
  maxDisks = 64;
type
  arrType = array[1 .. maxDisks] of integer;
  TRes = record
    Num, Cnt, Tim : Longint;
  end;
 
var
  amount: Integer;
  arr   : arrType;
  count_moves: longint;
  res : array[3..10] of TRes;
 
procedure DrawRings;
var
  i, j: integer;
  counters: array[0 .. 2] of integer;
begin
  for i := 0 to 2 do counters[i] := 0;
  for i := 1 to amount do
    inc(counters[Arr[i]]);
 
  for i := 0 to 2 do begin
    write(succ(i), ': ');
    for j := 1 to counters[i] do write('*');
    writeln;
  end;
  writeln('----------');
end;
 
procedure PrintQuant(curr, _begin, _end: integer);
begin
  Arr[curr] := _end;
  DrawRings;
  Inc(count_moves);
{  readln;}
end;
 
procedure MoveDisk(curr, _begin, _end: integer);
begin
  if curr = 1 then PrintQuant(curr, _begin, _end)
  else begin
    MoveDisk(curr - 1, _begin, 3 - _begin - _end);
    PrintQuant(curr, _begin, _end);
    MoveDisk(curr - 1, 3 - _begin - _end, _end);
  end;
end;
 
var
  i, j: integer;
  M : Longint;
  start, finish: integer;
  Hour, Minute, Sec1, Sec2, MS1, MS2: Word;
begin
  for J := 3 to 10 do begin
    GetTime(Hour, Minute, Sec1, MS1);
    count_moves := 0;
    start := 0; finish := 2;
 
    amount := j;
 
    for i := 1 to amount do Arr[i] := start;
    DrawRings;
    MoveDisk(amount, start, finish);
 
    GetTime(Hour, Minute, Sec2, MS2);
    M := (Sec2*100+MS2) - (Sec1*100+MS1);
    res[j].Num := J;
    res[j].Cnt := count_moves;
    res[j].Tim := M;
  end;
 
  writeln('Number     Count  Time, msec');
  for J := 3 to 10 do
    writeln(res[j].Num:4, res[j].Cnt:11, res[j].Tim*10:8);
 
  writeln('----------');
 
  readln;
end.
Программная реализация алгоритма решения задачи о ханойских башнях должна на каждой итерации выводить протокол работы, представляющий собой содержимое каждого из стеков (башен) после завершения очередной итерации.
Провести сравнительный вычислительный эксперимент с рекурсивным (лабораторная работа №3) и реализованным алгоритмами путем изменения числа колец. При этом максимальное число колец не должно быть большим N=10. Для каждого N измерить время выполнения программы с точностью до милисекунд. Результаты эксперимента выдать из программы в виде таблицы:


Кол-во колец Время до наступления конца света

рекурсивно нерекурсивно
----- --- ---
----- --- ---
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2010, 12:13
Ответы с готовыми решениями:

Рекурсивная функция: решение задачи о ханойских башнях
Желательно чтоби в функию передавалось четире значения - певрое ето количество дисков, которое должно бить перемещено, второй параметр -...

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

К двум программам о Ханойских башнях прикрутить счетчик шагов
Как к этим двум программам о Ханойских башнях прикрутить счетчик шагов? var N:byte; Procedure Hanoi(first, second, third, N:byte); ...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2010, 12:13
Помогаю со студенческими работами здесь

Решение задачи о Ханойских башнях
Решение задачи о Ханойских башнях. Используйте рекурсивную функцию с четырьмя параметрами: 1) Количество дисков, которое должно быть...

Задача о Ханойских башнях
Доброго времени суток! Мне нужно решить задачу о "Ханойских башнях" с помощью рекурсии. Одно из заданий прошу помочь реализовать:...

Визуализация задачи о ханойских башнях
Сделайте пожалуйста визуализацию данной программы #include <stdio.h> #include <math.h> void carryingOver(int, int, int); ...

Пояснение рекурсии в Ханойских башнях
Ребята, нашел рекурсивное решение про задачу с Ханойскими башнями, но хоть убейте не могу понять (найти): Почему получаются такие...

Задача о "Ханойских башнях" на Haskell
Добрый день! Помогите, пожалуйста, реализовать алгоритм решения задачи "Ханойские башни" на языке Haskell. Смысл задачи заключается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер