Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1

Замена фигур на шахматной доске

09.08.2012, 09:51. Показов 2418. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задача. расставить случайным образом четырех коней на шахматной доске (два белых и два черных). вывести отдельно список полей под боем каждого из коней, список полей под боем нескольких (указать каких именно), и полей не под боем ни одного из четырех.

Добавлено через 9 часов 7 минут
слабо? это, конечно, не диагональ симметричной матрицы вывести...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.08.2012, 09:51
Ответы с готовыми решениями:

Числа на шахматной доске в С++
В клетках шахматной доски находятся целые числа. --- Определить в программе глобальные данные- константу N=8 и двумерный числовой массив...

Числа на шахматной доске
В клетках шахматной доски находятся целые число. --- Определить в программе глобальные данные – константу N = 8 и двумерный числовой массив...

Числа на шахматной доске
В клетках шахматной доски находятся целые число. --- Определить в программе глобальные данные – константу N = 8 и двумерный числовой массив...

18
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
09.08.2012, 10:36
А что собственно, не получается?
0
2393 / 1914 / 763
Регистрация: 27.07.2012
Сообщений: 5,559
09.08.2012, 10:56
Ну и причём тут С++?
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 10:57  [ТС]
как это сделать на с++. так на доске я расставляю и понимаю, какие поля у какого коня под боем. и на бумажке списки могу записать. а дальше - никак. какие классы нужны, какие поля, ф-ии...
0
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
09.08.2012, 11:23
Цитата Сообщение от novi4ok Посмотреть сообщение
как это сделать на с++. так на доске я расставляю и понимаю, какие поля у какого коня под боем. и на бумажке списки могу записать. а дальше - никак. какие классы нужны, какие поля, ф-ии...
ну навскидку создаешь структуру типа

|
C++
1
2
3
4
5
6
struct pole{
 int Kon1;
 int Kon2;
 int Kon3;
 int Kon4;
};
дальше делаешь двухмерный массив типа pole, пробегаешься по нему расставляешь битые поля, каждому коню в свою переменню в структуре, а дальше уже делай все остальные необходимые манипуляции
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 11:25  [ТС]
Цитата Сообщение от Aloir Посмотреть сообщение
ну навскидку создаешь структуру типа

|
C++
1
2
3
4
5
6
struct pole{
 int Kon1;
 int Kon2;
 int Kon3;
 int Kon4;
};
дальше делаешь двухмерный массив типа pole, пробегаешься по нему расставляешь битые поля, каждому коню в свою переменню в структуре, а дальше уже делай все остальные необходимые манипуляции
а конь?
0
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
09.08.2012, 11:31
Цитата Сообщение от novi4ok Посмотреть сообщение
а конь?
что конь?

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

после ввода всех коней бежишь по полю, расставляешь битки, и считаешь что тебе нужно.
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 17:12  [ТС]
ну да, "задней левой" ... ж
0
 Аватар для yleart
60 / 45 / 12
Регистрация: 07.10.2011
Сообщений: 139
09.08.2012, 17:41
Создаешь нулевую матрицу 8x8. Ставишь единицы - это кони. Потом пишешь 8 функции вероятных ходов коня, которые возвращают true если конь под боем какого либо... Ну вот и все xD
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 22:34  [ТС]
а конь? вообще без коня, только единицы? а как потом списки строить - вот "иду" я по этой матрице (шесть раз нужно пройти, наверное?), и что? вот "пришел" на клетку матрицы, она в списке? выводить ее?

Добавлено через 57 секунд
и никто ни строчки кода не предложил, только какая-то структура. "клуб четырех коней" какой-то.

Не по теме:

столица переезжает в васюки.

0
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
09.08.2012, 22:45
Цитата Сообщение от novi4ok Посмотреть сообщение
и никто ни строчки кода не предложил, только какая-то структура. "клуб четырех коней" какой-то.
А вы попробуйте себя повежливее вести.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
09.08.2012, 23:00
Цитата Сообщение от novi4ok Посмотреть сообщение
на доске я расставляю и понимаю, какие поля у какого коня под боем. и на бумажке списки могу записать. а дальше - никак.
Я понимаю, так: чем проще рассуждения тем легче рассуждать. У коня есть координаты. Что значит битое поле? Это поле куда возможен ход (неучитывая какой фигурой оно занято, тут решите сами, кстати если стоит дружеский конь то под боем ли он находится?)
Далее каждое такое поле по осям (четыре направления) определяется смещением на 2 позиции прямо (по x например) и одну позицию в сторону (по другой координате, для x это y). При проверке координат поля нужно проверить не вышли ли за пределы шахматного поля 8Х8 и возможно на наличие дружественного коня (если решите, что друзей не бьют)).
ps Для коня в центре доски - 4 направления двойного сдвига, по два одинарных сдвига в каждом, то есть 8 битых полей.
1
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
09.08.2012, 23:45  [ТС]

Не по теме:

Цитата Сообщение от defer Посмотреть сообщение
А вы попробуйте себя повежливее вести.
вежливо - это когда взрослым дядям не делают замечаний. в крайнем случае проходят мимо, надув губки.



Добавлено через 5 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Я понимаю, так: чем проще рассуждения тем легче рассуждать. У коня есть координаты. Что значит битое поле? Это поле куда возможен ход (неучитывая какой фигурой оно занято, тут решите сами, кстати если стоит дружеский конь то под боем ли он находится?)
Далее каждое такое поле по осям (четыре направления) определяется смещением на 2 позиции прямо (по x например) и одну позицию в сторону (по другой координате, для x это y). При проверке координат поля нужно проверить не вышли ли за пределы шахматного поля 8Х8 и возможно на наличие дружественного коня (если решите, что друзей не бьют)).
ps Для коня в центре доски - 4 направления двойного сдвига, по два одинарных сдвига в каждом, то есть 8 битых полей.
понимаешь, я не хочу думать ни о битах, ни о клетках, пока не решу проблему дизайна. мы ведь с++ имеем. значит, классы можем создавать, которые что-то будут уметь. напрашивается пока участники "доска", "конь", "список" (или "генератор отчетов"? или и то и другое?). тогда уже и нолики по клеточкам можно раскладывать. но если сразу полезу рисовать матрицы с четырьмя единичками, запутяюсь. напишу, конечно, и так, но тогда самому нужно становиться конем, и через пару часов уже перестану понимать, как оно все работает. хороший (удачный) дизайн даже в такой примитивной задаче упрощает работу.

принимаются предложения по улучшению моего наброска списка участников.
0
92 / 88 / 17
Регистрация: 13.11.2011
Сообщений: 193
10.08.2012, 01:28
novi4ok,
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
#include<iostream>
#include<ctime>
using namespace std;
bool is_under_attack(int a1, int x1, int a2, int x2){
     int check=abs(a1-a2)*10+abs(x1-x2);
     if (check==12 || check==21) return true;
     return false;
}
int main(){
    // создаем, инициализируем и отображаем координаты четырех коней
    srand(time(0));
    int horse[4][2];
    for (int i=0; i<8; i++){
        horse[i/2][i%2]=rand()%8+1;
        if (i%2==1) cout<<i/2+1<<" horse : "<<(char)(horse[i/2][0]+64)<<horse[i/2][1]<<endl;
    }
    
    cout<<"\n1 list : "; // список полей под боем каждого из коней
    for (int i=1; i<=4; i++){
        cout<<"\n\t"<<i<<" horse : ";
        for (int x=1; x<=8; x++)
            for (int y=1; y<=8; y++)
                if (is_under_attack(x,y,horse[i-1][0],horse[i-1][1])) cout<<(char)(x+64)<<y<<" ";
    }
    
    cout<<"\n\n2 list : \n"; // список полей под боем нескольких коней
    for (int x=1; x<=8; x++)
        for (int y=1; y<=8; y++){
            string result="";
            int count=0;
            for (int i=1; i<=4; i++)
                if (is_under_attack(x,y,horse[i-1][0],horse[i-1][1])){
                   count++;
                   result+=(char)(i+48);
                   result+=" ";
                }
            if (count>1) cout<<"\t"<<(char)(x+64)<<y<<" : "<<result<<endl;
        }
    
    cout<<"\n3 list : "; // поля не под боем
    for (int x=1; x<=8; x++)
        for (int y=1; y<=8; y++){
            int count=0;
            for (int i=1; i<=4; i++)
                if (is_under_attack(x,y,horse[i-1][0],horse[i-1][1])) count++;
            if (count==0) cout<<(char)(x+64)<<y<<" ";
        }
    
    cout<<"\n\n"; system("pause");
    return 0;
}
Миниатюры
Замена фигур на шахматной доске  
1
13.08.2012, 02:35

Не по теме:


просто не там ответил)

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
13.08.2012, 03:07
Цитата Сообщение от novi4ok Посмотреть сообщение
напрашивается пока участники "доска", "конь", "список" (или "генератор отчетов"? или и то и другое?).
Можно сделать шахматное поле - клетка
хранит свою координату, указатели на бьющие фигуры, указатель на размещенную в нем фигуру.(указатели могут быть нулевыми).
фигура - хранит масть (цвет) координату, умеет возвращать список битых полей.
Доска (позиция) хранит список всех полей, фигур, умеет инициализировать поля, принимать запросы на перемещение фигуры и делать ход.
Отчеты генерирует внешняя ф-ция опрашивающая поля доски.
Всего то нового, - класс шахматная клетка (поле).
0
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
13.08.2012, 03:34
Цитата Сообщение от IGPIGP Посмотреть сообщение
Можно сделать шахматное поле - клетка
хранит свою координату, указатели на бьющие фигуры, указатель на размещенную в нем фигуру.(указатели могут быть нулевыми).
фигура - хранит масть (цвет) координату, умеет возвращать список битых полей.
Доска (позиция) хранит список всех полей, фигур, умеет инициализировать поля, принимать запросы на перемещение фигуры и делать ход.
Отчеты генерирует внешняя ф-ция опрашивающая поля доски.
Всего то нового, - класс шахматная клетка (поле).
Вы бы это в коде выложили, а словесных описаний в теме и так достаточно
0
 Аватар для Aloir
225 / 225 / 38
Регистрация: 17.12.2010
Сообщений: 713
13.08.2012, 20:11
Цитата Сообщение от defer Посмотреть сообщение
Вы бы это в коде выложили, а словесных описаний в теме и так достаточно
Вы так рассуждаете как будто, мы обязаны вам предоставить решение данной задачи.

попробуйте выложить свой пример кода, или хотя бы набросок, а мы вас подправим.
0
8 / 8 / 1
Регистрация: 13.08.2012
Сообщений: 18
13.08.2012, 20:50
Библиотека: Matrix.h
http://www.stroustrup.com/Prog... x/Matrix.h

Библиотека: MatrixIO.h
http://www.stroustrup.com/Prog... MatrixIO.h


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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
//
// 
// 
//
 
#include<iostream>
#include<fstream>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<string>
#include<list>
#include<vector>
#include<algorithm>
#include<stdexcept>
#include "Matrix.h"
#include "MatrixIO.h"
 
using namespace Numeric_lib;
using namespace std;
 
//------------------------------------------------------------------------------
 
enum Horses { none, white, black, fight_w1, fight_w2, fight_b1, fight_b2 };
 
//------------------------------------------------------------------------------
 
struct One_cell
{
    One_cell(int aa, int bb, Horses h1, Horses h2) :a(aa), b(bb) 
    { oc.first = h1; oc.second = h2; }
    int a;
    int b;
    pair<Horses, Horses> oc;
};
 
//------------------------------------------------------------------------------
 
vector<One_cell> one_cell;
 
//------------------------------------------------------------------------------
 
void f(Matrix<Horses, 2>& mtrx, int i, int j)
{
    string s;
    int f;
    if (mtrx(i, j) == white)
    {
        static int i2 = i;
        static int j2 = j;
        int k = 1;
        if (i != i2 || j != j2)
            k = 2;
        if (k == 1)
            s = "w1";
        else
            s = "w2";
        cout << "Поля под боем " << k << " белого коня\n";
    }
    else if (mtrx(i, j) == black)
    {
        static int i2 = i;
        static int j2 = j;
        int k = 1;
        if (i != i2 || j != j2)
            k = 2;
        if (k == 1)
            s = "b1";
        else
            s = "b2";
        cout << "Поля под боем " << k << " черного коня\n";
    }
 
    if (s == "w1")
        f = 3;
    else if (s == "w2")
        f = 4;
    else if (s == "b1")
        f = 5;
    else if (s == "b2")
        f = 6;
 
    if (i > 1 && j < 7)
    {
        if (mtrx(i - 2, j + 1) != none)
            one_cell.push_back(One_cell(i - 2, j + 1, mtrx(i - 2, j + 1), Horses(f)));
        mtrx(i - 2, j + 1) = Horses(f);
        cout << '(' << i - 2 << ',' << j + 1 << ") ";
    }
    if (j < 7 && j < 6)
    {
        if (mtrx(i + 1, j + 2) != none)
            one_cell.push_back(One_cell(i + 1, j + 2, mtrx(i - 2, j + 1), Horses(f)));
        mtrx(i + 1, j + 2) = Horses(f);
        cout << '(' << i + 1 << ',' << j + 2 << ") ";
    }
    if (j != 0 && i < 6)
    {
        if (mtrx(i + 2, j - 1) != none)
            one_cell.push_back(One_cell(i + 2, j - 1, mtrx(i - 2, j + 1), Horses(f)));
        mtrx(i + 2, j - 1) = Horses(f);
        cout << '(' << i + 2 << ',' << j - 1 << ") ";
    }
    if (i != 0 && j > 1)
    {
        if (mtrx(i - 1, j - 2) != none)
            one_cell.push_back(One_cell(i - 1, j - 2, mtrx(i - 2, j + 1), Horses(f)));
        mtrx(i - 1, j - 2) = Horses(f);
        cout << '(' << i - 1 << ',' << j - 2 << ") ";
    }
    cout << '\n';
}
 
//------------------------------------------------------------------------------
 
inline void keep_window_open()
{
    cin.clear();
    cout << "Please enter a character to exit\n";
    char ch;
    cin >> ch;
    return;
}
 
//------------------------------------------------------------------------------
 
inline int randint(int max) { return rand()%max; }
 
//------------------------------------------------------------------------------
 
int main()
    try
{
    setlocale( LC_ALL, "Russian" );
 
    Matrix<Horses, 2> mtrx(8, 8);
 
    srand(8);
 
    int n = 0;
    int k = 0;
    int p = 0;
 
    while(p != 2)
    {
        n = randint(8);
        k = randint(8);
        if (mtrx(n, k) != white)
        {
            mtrx(n, k) = white;
            ++p;
        }
    }
 
    p = 0;
 
    while(p != 2)
    {
        n = randint(8);
        k = randint(8);
        if (mtrx(n, k) != white && 
            mtrx(n, k) != black)
        {
            mtrx(n, k) = black;
            ++p;
        }
    }
 
    cout << mtrx << '\n';
 
    for (Index i = 0; i < 8; ++i)
        for (Index j = 0; j < 8; ++j)
        {
            if (mtrx(i, j) == white)
                f(mtrx, i ,j);
            else if (mtrx(i, j) == black)
                f(mtrx, i, j);
        }
 
    cout << "Поля не под боем ни одного из четырех: \n";
 
    for (Index i = 0; i < 8; ++i)
        for (Index j = 0; j < 8; ++j)
            if (mtrx(i, j) == none)
                cout << '(' << i << ',' << j << ") ";
 
    if (one_cell.size())
    cout << "\nСписок полей под боем нескольких: \n";
 
    for (int i = 0; i < one_cell.size(); ++i)
    {
        cout << '\n';
        if (one_cell[i].oc.first != one_cell[i].oc.second)
        {
        switch(one_cell[i].oc.first)
        {
        case 3:
            cout << "Белый конь 1\n";
            break;
        case 4:
            cout << "Белый конь 2\n";
            break;
        case 5:
            cout << "Черный конь 1\n";
            break;
        case 6:
            cout << "Черный конь 2\n";
            break;
        }
        switch(one_cell[i].oc.second)
        {
        case 3:
            cout << "Белый конь 1\n";
            break;
        case 4:
            cout << "Белый конь 2\n";
            break;
        case 5:
            cout << "Черный конь 1\n";
            break;
        case 6:
            cout << "Черный конь 2\n";
            break;
        }
        cout << '(' << one_cell[i].a << ',' << one_cell[i].b << ") ";
        }
    }
 
    cout << '\n' << mtrx << '\n';
 
    keep_window_open();
    return 0;
}
catch (exception& e) {
    cerr << "error: " << e.what() << '\n'; 
    keep_window_open();
    return 1;
}
catch (...) {
    cerr << "Oops: unknown exception!\n"; 
    keep_window_open();
    return 2;
}
 
//------------------------------------------------------------------------------
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.08.2012, 20:50
Помогаю со студенческими работами здесь

Ход на шахматной доске
Поле шахматной доски определяется парой натуральных чисел, первое из которых задает номер вертикали, а второе - номер горизонтали. Данные...

Геометрическая прогрессия на шахматной доске
Всем доброго времени суток.Отписывайтесь кто как решил. #include &quot;head.h&quot; void main() {//на поле 64 клетки ///сколько надо...

Расставить n ладей на шахматной доске n*n
Вообщем нужно расставить n ладей на шахматной доске n*n Вот то что у меня получилось: #pragma argsused #include&lt;iostream.h&gt; ...

Цвет клеток на шахматной доске
Даны координаты двух различных полей шахматной доски x1, y1, x2, y2 (целые числа, лежащие в диапазоне 1–8). Проверить истинность...

Расстановка ферзей на шахматной доске
Найти на кубической доске всевозможные расстановки 15 ферзей так, чтобы они не били друг друга


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru