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

ООП - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Односвязные списки c++ http://www.cyberforum.ru/cpp-beginners/thread147907.html
Надо написать функцию, которая вставляет в список элемент со значением n после первого элемента со значением m. Реализовать как односвязный список(используя динамические структуры). Должны быть возможности добавить в конец списка новый элемент, выпечатать список, уничтожить его. Можете кто нибудь, пожалуйста, помочь с этим заданием? Заранее спасибо
C++ Работа с текстовыми файлами Создать программу, которая обрабатывает файл в последовательном режиме. Данные надо считывать по одному символу (нельзя считывать сразу весь файл или строку) Дан не пустой текстовый файл. Написать программу, которая выводит в файл все числа встреченные во входном файле (числом считать только те слова, которые состоят только из цифр. Словом считать символьную строку, которая отделена пробелами... http://www.cyberforum.ru/cpp-beginners/thread147901.html
строки и множества в С C++
Вывести в обратном порядке третье слово
C++ Матрицы в С++
Здравствуйте, форумчане...я, уповая на ваше помощь, прошу помочь мне с программой... Смысл задачи: Дана символьная матрица. Характеристикой строки назовем длину строки. Определить номер строки, имеющей наибольшую характеристику.
C++ вывести элементы массива целых чисел http://www.cyberforum.ru/cpp-beginners/thread147887.html
вывести элементы массива целых чисел, которые находится между max и min
C++ Функция которая сравнивает два целых числа и возвращает результат сравнения в виде знака: >, < или = Используя функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде знака: >, < или =, вычислить количество равных среди введенных трех чисел x, у, t. подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
22.06.2010, 22: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
167
168
169
170
171
172
173
174
175
176
177
#include <vector>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <ctime>
 
class T_pyatnashki
{    
    const static int          MIN_ELEM_VAL  = 1;
    const static int          POLE_DIM      = 4;
    const static int          POLE_SIZE     = POLE_DIM * POLE_DIM;
    const static int          EMPTY_VAL     = POLE_SIZE;
    const static int          MAX_ELEM_VAL  = POLE_SIZE - 1;
    typedef std::vector<int>  T_pole;
 
    T_pole                    pole_;
    int                       step_count_;
public:
    T_pyatnashki() : pole_(POLE_SIZE), step_count_(0)
    {
        struct T_generate_podrjad
        {
            int begin_num_;
            T_generate_podrjad(int  begin_num) : begin_num_(begin_num)
            {}
 
            int operator() ()
            {
                return begin_num_++;
            }
        };
        std::generate(pole_.begin(), pole_.end(), T_generate_podrjad(MIN_ELEM_VAL));
        std::random_shuffle(pole_.begin(), pole_.end());         
    }
    //------------------------------------------------------------------------------
    void play()
    {
        for(;;)
        {
            show();
            if(is_good_end())
            {
                std::cout << "Задача решена за "
                          << step_count_
                          << " шагов."
                          << std::endl;
                break;
            }
            if(is_bad_end())
            {
                std::cout << "Задача не имеет решения."
                          << std::endl;
                break;
            }
 
            ++step_count_;
            move();       
        }
    }
    //------------------------------------------------------------------------------
private:
    //------------------------------------------------------------------------------
    int i_from_k(int k)
    {
        return k / POLE_DIM;
    }
    //------------------------------------------------------------------------------
    int j_from_k(int k)
    {
        return k % POLE_DIM;
    }
    //------------------------------------------------------------------------------
    void show()
    {
        struct T_print_elem
        {
            enum
            {
                ELEM_WIDTH = 4
            };            
            int  row_len_;
            int  elem_count_;
            T_print_elem() : row_len_(POLE_DIM), elem_count_(0)
            {}
 
            void operator() (int elem)
            {                
                if(elem == EMPTY_VAL)
                {
                    std::cout << std::setw(ELEM_WIDTH)
                              << "";       
                }
                else
                {
                    std::cout << std::setw(ELEM_WIDTH)
                              << elem;
                }                
                if(++elem_count_ % row_len_ == 0)
                {
                    std::cout << std::endl
                              << std::endl;
                }           
            }
        };
        std::for_each(pole_.begin(), pole_.end(), T_print_elem());
        std::cout << std::endl;
    }
    //------------------------------------------------------------------------------
    int k_of_elem(int elem)
    {
        return  std::find(pole_.begin(), pole_.end(), elem) - pole_.begin();
    }
    //------------------------------------------------------------------------------
    bool is_ryadom_s_pustym(int elem)
    {
        int empty_elem_i  = i_from_k(k_of_elem(EMPTY_VAL)); 
        int empty_elem_j  = j_from_k(k_of_elem(EMPTY_VAL)); 
 
        int elem_i        = i_from_k(k_of_elem(elem)); 
        int elem_j        = j_from_k(k_of_elem(elem)); 
 
        int abs_i_shift = abs(empty_elem_i - elem_i);
        int abs_j_shift = abs(empty_elem_j - elem_j);
 
        return abs_i_shift + abs_j_shift == 1;
    }
    //------------------------------------------------------------------------------
    void swap_pole_elems
        (
            T_pole&  pole,
            int      elem1,
            int      elem2
        )
    {
         std::iter_swap(std::find(pole.begin(), pole.end(), elem1),
                        std::find(pole.begin(), pole.end(), elem2));        
    }
    //------------------------------------------------------------------------------
    void move()
    {        
        int  moving_elem;
        do
        {
            std::cout << "Шаг "
                      << step_count_
                      << ". Вы двигаете кость № ";
            std::cin >> moving_elem;
        }while(moving_elem < MIN_ELEM_VAL || MAX_ELEM_VAL < moving_elem
               || !is_ryadom_s_pustym(moving_elem));
 
        swap_pole_elems(pole_, moving_elem, EMPTY_VAL);
    }
    //------------------------------------------------------------------------------
    bool is_good_end()
    {
        T_pole  good_end_pole(pole_);
        std::sort(good_end_pole.begin(), good_end_pole.end());        
        return pole_ == good_end_pole;
    }
    //------------------------------------------------------------------------------
    bool is_bad_end()
    {
        T_pole  bad_end_pole(pole_);
        std::sort(bad_end_pole.begin(), bad_end_pole.end()); 
        swap_pole_elems(bad_end_pole, MAX_ELEM_VAL, MAX_ELEM_VAL - 1);
        return pole_ == bad_end_pole;
    }
};
 
int main()
{
    std::locale::global(std::locale(""));
    srand(static_cast<unsigned>(time(0)));
    T_pyatnashki  pyatnashki;
    pyatnashki.play();
    return 0;
}
 
Текущее время: 18:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru