4 / 4 / 6
Регистрация: 10.12.2016
Сообщений: 192
1

Программа неверно делает расчеты

28.11.2017, 00:49. Показов 645. Ответов 1
Метки нет (Все метки)

Доброго времени суток!

У меня был код программы которая решала задачку о Ханойских башнях.
Кликните здесь для просмотра всего текста
В центре мира в вершинах равностороннего треугольника в землю вбиты три алмазных шпиля. На одном из них надето 64 золотых диска убывающих радиусов (самый большой – нижний). Трудолюбивые буддийские монахи день и ночь переносят диски с одного шпиля на другой. При этом, диски следует переносить по одному и нельзя класть больший диск на меньший (рис. 1). Когда все диски перенесут на другой шпиль, наступит конец света (задачу и рассказ придумал математик Эдуар Люка в 1883 г.).


Я попытался переделать ее так, что бы она выполнялась в цикле, для того, что бы посчитать значения для дисков от 1 до 10 и вывести время расчетов для каждого из количества дисков. Но в результате программа перестала нормально считать.

Прилаживаю код и результат работы программы.

Надеюсь на Вашу помощь!
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
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
// Ханойские башни
#include <iostream> //потоквый ввод/вывод
#include <fstream> //ввод/вывод в файл
#include <iomanip> //редактирование вывода
#include <math.h> //математические вычесления
#include <windows.h> //отображение языка
/* вычисление времени работы участка кода */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int *stack1, *stack2, *stack3, top1=0, top2=0, top3=0, element;
 
/* добавить элемент в стек*/
void push(int start){
    if(start==1){
        for(int i=top1-1;i>=0;i--)
            stack1[i+1]=stack1[i];
 
        stack1[0]=element;
        top1++;
    }
 
    if(start==2){
        for(int i=top2-1;i>=0;i--)
            stack2[i+1]=stack2[i];
 
        stack2[0]=element;
        top2++;
    }
 
    if(start==3){
        for(int i=top3-1;i>=0;i--)
            stack3[i+1]=stack3[i];
 
        stack3[0]=element;
        top3++;
    }
}
 
/* удалить элемент из стека */
void pop(int start){
    if(start==1)
    {
        element=stack1[0];
        for(int i=0;i<=top1-1;i++){
            stack1[i]=stack1[i+1];
            if(i==top1-1)
                stack1[i]=0;
        }
        top1--;
    }
 
    if(start==2)
    {
        element=stack2[0];
        for(int i=0;i<=top2-1;i++){
            stack2[i]=stack2[i+1];
            if(i==top2-1)
                stack2[i]=0;
        }
        top2--;
    }
 
    if(start==3)
    {
         element=stack3[0];
        for(int i=0;i<=top3-1;i++){
            stack3[i]=stack3[i+1];
            if(i==top3-1)
                stack3[i]=0;
        }
        top3--;
    }
}
 
/* вывод стека*/
void Input(int m){
    cout<<"   Исходный   "<<"Промежуточный "<<"   Конечный  "<<endl;
    for(int i=0;i<m;i++){
            if(i<top1)
                cout<<setw(7)<<stack1[i];
            else cout<<setw(7)<<0;
            if(i<top2)
                cout<<setw(14)<<stack2[i];
            else cout<<setw(14)<<0;
            if(i<top3)
                cout<<setw(14)<<stack3[i]<<endl;
            else cout<<setw(14)<<0<<endl;
    }
}
 
 
void Hanoi_Tower(int m, int start, int destination, int buffer)
{
        if (m == 0)
        {
            return;
        }
            Hanoi_Tower(m-1, start, buffer, destination);
            cout<< start << " -> " << destination << endl;
            cout<<endl;
            //system("cls");
            pop(start);
            push(destination);
            Input(m);
            Hanoi_Tower(m-1, buffer, destination, start);
}
 
 
int main(){
 
/* корректное отображение русского языка*/
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
ofstream table("отчет.txt",ios_base::out | ios_base::trunc);
if (!table.is_open()) // если файл небыл открыт
    {
     cout << "Файл не может быть открыт или создан\n"; // напечатать соответствующее сообщение
     return 1; // выполнить выход из программы
    }
 
int m;
for (m=1;m<5;m++)
{
int start=1, destination=3, buffer=2;
 
stack1= new int [m];
stack2= new int [m];
stack3= new int [m];
 
for(int i=0;i<m;i++){
    element=m-i;
   push(start);
}
Input(m);
 
 clock_t t;
 t = clock(); //фиксация времени
 
Hanoi_Tower(m, start, destination, buffer);
 
  t = clock() - t;
 
  table<<"Количество колец: "<<m<<endl;
  table<<"Время до наступления конца света "<<((float)t)/CLOCKS_PER_SEC<<" секунд"<<endl; //вывод времени
  table<<"___________________________________________________________"<<endl;
 
top1=0; top2=0; top3=0;
 
delete [] stack1;
delete [] stack2;
delete [] stack3;
}
 
table.close(); //закрытие файла
//system("cls");
 
    cout << "Данные успешно записаны в файл \"отчет.txt\"\n";
    system("pause");
 
return 0;
}
Миниатюры
Программа неверно делает расчеты  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2017, 00:49
Ответы с готовыми решениями:

почему не делает расчеты в "с="? код с++
запускать запускает, а расчет &quot;с &quot; не делает в чем причина? помогите, буду признательна) ...

Программа производит расчеты только по одному из двух введенных значений
Подскажите как сделать что бы я вручную вводил значение radius и он выдавал ответ. Сейчас он...

Неверно работает программа со строкой
Задача программы ниже - при помощи клавиш w, a, s, d выбрать на выводимой клавиатуре нужный символ...

Программа написана, но работает неверно
Программа написана, но работает неверно. Ввести символьную строку и заменить все буквы &quot;а&quot; на буквы...

1
4 / 4 / 6
Регистрация: 10.12.2016
Сообщений: 192
28.11.2017, 00:55  [ТС] 2
Всё, нашел ошибку. Надо было переменную m объявить глобально.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2017, 00:55

Программа неверно строит график функции
Добрый день. Необходимо написать программу которая строит графики трёх функций. Если с первыми...

программа по непонятным мне причинам работает неверно
#include &lt;cstdio&gt; #include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; int main() {...

Неверно преобразовываю ряд, или же неверно записываю его в код
Задание:Для заданного с консоли значения n определить сумму числового ряда: s=\sum...

Правильно ли программа делает расчеты?
Условие: Дани векторы X и Y с n координатами и кваратные матрицы А и В, размерности n X n. Найти...

Программа делает неправильные расчеты
Программа вроде работает, но делает неправильные расчеты. program kursova22; uses...

Программа делает расчеты и выводит результаты на экран
К примеру, пользователю необходимо ввести 5 чисел (каждое число в отдельное окошко), а программа...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.