C++
1. Дана позиция туры на шахматной доске (d3). Отметить ячейки на доске, находящиеся под угрозой туры. Тура может ходить по строке и столбцу, в котором она расположена.
2. Дана позиція офіцера на шаховій дошці (d3). Відмітити клітинки на дошці, що знаходяться під загрозою офіцера. Офіцер може ходити по діагоналях, які перетинаються на клітинці, у якій він розміщений.
3. Дана позиция лошади на шахматной доске(d3). Отметить ячейки на доске, под угрозой фигуры. Для позиции d3
Доска: (a-h, 1-8)
Answers & Comments
Решение для задачи с турой:
#include <iostream>
#include <vector>
using namespace std;
int main() {
char file, rank;
int f, r;
vector<string> board(8, "........");
// ввод позиции туры
cout << "Введите позицию туры (например, d3): ";
cin >> file >> rank;
// преобразование введенных данных в координаты на доске
f = file - 'a';
r = 8 - (rank - '0');
// отметка клеток, находящихся под угрозой туры
for (int i = 0; i < 8; i++) {
board[r][i] = '-';
board[i][f] = '-';
}
// отображение доски
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
return 0;
}
Решение для задачи с офицером:
#include <iostream>
#include <vector>
using namespace std;
int main() {
char file, rank;
int f, r;
vector<string> board(8, "........");
// ввод позиции офицера
cout << "Введите позицию офицера (например, d3): ";
cin >> file >> rank;
// преобразование введенных данных в координаты на доске
f = file - 'a';
r = 8 - (rank - '0');
// отметка клеток, находящихся под угрозой офицера
for (int i = 0; i < 8; i++) {
if (f - i >= 0 && r - i >= 0) {
board[r-i][f-i] = '-';
}
if (f + i < 8 && r - i >= 0) {
board[r-i][f+i] = '-';
}
if (f - i >= 0 && r + i < 8) {
board[r+i][f-i] = '-';
}
if (f + i < 8 && r + i < 8) {
board[r+i][f+i] = '-';
}
}
// отображение доски
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
return 0;
}
Решение для задачи с лошадью:
#include <iostream>
using namespace std;
int main() {
char pos[3]; // позиция лошади на доске
int row, col;
// получаем позицию лошади
cout << "Введите позицию лошади на доске (например, d3): ";
cin >> pos;
// определяем строку и столбец позиции лошади
row = pos[1] - '0';
col = pos[0] - 'a' + 1;
// определяем и отмечаем возможные ходы лошади
int moves[8][2] = {{1, 2}, {1, -2}, {-1, 2}, {-1, -2}, {2, 1}, {2, -1}, {-2, 1}, {-2, -1}};
cout << "Клетки, находящиеся под угрозой лошади: ";
for (int i = 0; i < 8; i++) {
int r = row + moves[i][0];
int c = col + moves[i][1];
if (r >= 1 && r <= 8 && c >= 1 && c <= 8) {
char ch = 'a' + c - 1;
cout << ch << r << " ";
}
}
cout << endl;
return 0;
}