Форум программистов, компьютерный форум CyberForum.ru

Нерекурсивное решение задачи о Ханойских башнях (Pascal -> C++) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Постройте таблицу значений функции http://www.cyberforum.ru/cpp-beginners/thread1496551.html
ребят последние задания, помогите пожалуйста: 1)Постройте таблицу значений функции для . Решить задачу тремя способами: использовать операторы for, while, do while. дана система 0,если х<5 у= (x-5)/(x+5), если x>5 1, если x=5 2) Даны два действительных числа x и y. Задать арифметическое действие (сложение, вычитание, произведение, деление) которое необходимо выполнить.(я...
C++ Функция подсчета четных элементов бинарного дерева Требуется написать функцию подсчета количества четных узлов бинарного дерева http://www.cyberforum.ru/cpp-beginners/thread1496549.html
C++ Как проверить существование файла?
как проверить существование файла? мне нужно для условия Добавлено через 1 минуту работает: bool FileExists(const char *fname) { return access(fname, 0) != -1; }
Хранение ссылок на файловые потоки C++
Добрый вечер. Столкнулся с ошибкой C2280 - невозможность использовать конструктор копирования для ifstream. Пытаюсь заполнить приоритетную очередь парами вида <std::string, std::ifstream&>, но при добавлении в очередь нового элемента возникает ошибка (строка 12). Не могу понять, почему, ведь в контейнер должна помещаться ссылка, а не объект. std::vector<std::ifstream> fileStreams; ...
C++ Задачи С++ http://www.cyberforum.ru/cpp-beginners/thread1496455.html
Привет всем экспертам! Вот и настал тот день, когда заканчивается летняя практика, за время которой, благодаря своей легкомысленности и неспособности схватывать налету, ты так и не смог приобрести необходимые знания и не научился уверенно шарить в С++, а с тебя тут строго требуют индивидуальные задания...В общем вот список: Контрольная работа по теме «Массивы» 3. Решить задачу:...
C++ В двумерном массиве определить среднее арифметическое каждого столбца и максимум и минимум каждой строки Дан двухмерный массив 5x6 . Определить среднее арифметическое каждого столбца, определить максимум и минимум каждой строки. подробнее

Показать сообщение отдельно
Olya9898
0 / 0 / 0
Регистрация: 04.06.2015
Сообщений: 28

Нерекурсивное решение задачи о Ханойских башнях (Pascal -> C++) - C++

10.07.2015, 10:19. Просмотров 255. Ответов 0
Метки (Все метки)

Написать нерекурсивную программу для нахождения последовательности перемещений колец в задаче о ханойских башнях. Использовать стек отложенных заданий. Нерекурсивная Программа есть на Паскале, надо переделать на С++
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure move(i,m,n: integer);
begin
  сделать стек заказов пустым
  положить в стек тройку
  {инвариант: осталось выполнить заказы в стеке}
  while стек непуст do begin
    удалить верхний элемент, переложив его в
    if j = 1 then begin
      writeln ('сделать ход', p, '-><j-1,s,q>', q);
    end else begin
      s:=6-p-q;
      {s - третий стержень: сумма номеров равна 6}
      положить в стек тройки , <1,p,q><j-1,p,s>,
    end;
  end;
end;
Так же есть РЕКУРСИВНАЯ версия программы на С++
C++
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
#include <iostream>
#include <iomanip>
using namespace std;
 
void tower(int, int, int, int); 
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "Russian");
    cout << "Введите число дисков: ";
    int i;
    cin >> i;
    cout << "Введите номер основного стержня: "; 
    int m;
    cin >> m;
    cout << "Введите номер конечного стержня: "; 
    int n;
    cin >> n;
    int help_rod;
    
    if (m != 2 && n != 2)
        help_rod = 2;
    else
    if (m != 1 && n != 1)
        help_rod = 1;
    else
    if (m != 3 && n != 3)
        help_rod = 3;
 tower(i, m, help_rod, n);
    system("pause");
    return 0;
}
 
void tower(int count_disk, int baza, int help_baza, int new_baza)
{
    int count = 1; 
    if (count_disk == 1) 
    {
        cout << count_disk << ") " << baza << " " << "->" << " " << new_baza << endl;
        count_disk++;
    }
    else
    {
        tower(count_disk - 1, baza, new_baza, help_baza);
        tower(1, baza, help_baza, new_baza);
        tower(count_disk - 1, help_baza, baza, new_baza);
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru