Добрый вечер!!! Проблема такая: дали исходник и сказали разобраться с ним, разобрался почти во всём, кроме одной функции, требуется помощь старших кодеров))))))
Вот исходник:
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
| #include <set>
#include <string>
#include <iostream>
using namespace std;
typedef string polecoord;
typedef set<polecoord> Tpoleset;
bool end (polecoord figuracoord)
{
return 'A' <= figuracoord[0] && figuracoord[0] <= 'H'
&& '1' <= figuracoord[1] && figuracoord[1] <= '8';
}
bool bjet_kon
(
polecoord kon_coord,
char vert,
char horiz
)
{
if(!end(kon_coord)) return false;
return abs((kon_coord[0] - vert) * (kon_coord[1] - horiz));
}
bool bjet_lad
(
polecoord lad_coord,
char vert,
char horiz
)
{
if(!end(lad_coord)) return false;
return (lad_coord[0] - vert) + (lad_coord[1] - horiz);
}
bool bjet_ferz
(
polecoord ferz_coord,
char vert,
char horiz
)
{
if(!end(ferz_coord)) return false;
return bjet_lad(ferz_coord, vert, horiz)
|| abs(ferz_coord[0] - vert) == abs(ferz_coord[1] - horiz);
}
size_t ferz_lad_kon_bjut_poley
(
polecoord ferz_coord,
polecoord lad_coord,
polecoord kon_coord
)
{
Tpoleset res_pole_set;
for(char vert = 'A'; vert <= 'H'; ++vert)
{
for(char horiz = '1'; horiz <= '8'; ++horiz)
{
if(bjet_kon(kon_coord, vert, horiz)
|| bjet_lad(lad_coord, vert, horiz)
|| bjet_ferz(ferz_coord, vert, horiz))
{
res_pole_set.insert(polecoord(1, vert) + horiz);
}
}//for(char horiz = '1'; horiz <= '8'; ++horiz)
}//for(char vert = 'A'; vert <= 'H'; ++vert)
res_pole_set.erase(ferz_coord);
res_pole_set.erase(lad_coord);
res_pole_set.erase(kon_coord);
return res_pole_set.size();
}
int main ()
{
polecoord ferz_coord;
polecoord lad_coord;
polecoord kon_coord;
for(;;)
{
cout << "vvedite koordinati figyr v formate D1 A2 E4"
<< endl
<< "Ferz: ";
cin >> ferz_coord;
do
{
cout << "Ladya: ";
cin >> lad_coord;
}
while(lad_coord == ferz_coord);
do
{
cout << "Horse: ";
cin >> kon_coord;
}
while(kon_coord == ferz_coord
|| kon_coord == lad_coord);
cout << endl
<< "Byut polei: "
<< ferz_lad_kon_bjut_poley(ferz_coord, lad_coord, kon_coord)
<< endl
<< endl
<< endl;
}
return 0;
} |
|
Помогите разобраться с функцией:
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
| size_t ferz_lad_kon_bjut_poley
(
polecoord ferz_coord,
polecoord lad_coord,
polecoord kon_coord
)
{
Tpoleset res_pole_set;
for(char vert = 'A'; vert <= 'H'; ++vert)
{
for(char horiz = '1'; horiz <= '8'; ++horiz)
{
if(bjet_kon(kon_coord, vert, horiz)
|| bjet_lad(lad_coord, vert, horiz)
|| bjet_ferz(ferz_coord, vert, horiz))
{
res_pole_set.insert(polecoord(1, vert) + horiz);
}
}// for(char horiz = '1'; horiz <= '8'; ++horiz)
}// for(char vert = 'A'; vert <= 'H'; ++vert)
res_pole_set.erase(ferz_coord);
res_pole_set.erase(lad_coord);
res_pole_set.erase(kon_coord);
return res_pole_set.size();
} |
|
Не могу точно понять что она делает и каким образом, очень надеюсь на помощь старших товарищей)))))
Добавлено через 22 минуты
Если что условия задачи вот :
//На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь.
//Требуется определить количество пустых полей доски, которые находятся под боем.
//Для простоты будем полагать, что фигуры могут «бить» через другие фигуры.