• Предмет: Информатика
  • Автор: MSashaZ
  • Вопрос задан 4 месяца назад

C++
1. Дана позиция туры на шахматной доске (d3). Отметить ячейки на доске, находящиеся под угрозой туры. Тура может ходить по строке и столбцу, в котором она расположена.
2. Дана позиція офіцера на шаховій дошці (d3). Відмітити клітинки на дошці, що знаходяться під загрозою офіцера. Офіцер може ходити по діагоналях, які перетинаються на клітинці, у якій він розміщений.
3. Дана позиция лошади на шахматной доске(d3). Отметить ячейки на доске, под угрозой фигуры. Для позиции d3
Доска: (a-h, 1-8)

Ответы

Ответ дал: Mirox921
1

Решение для задачи с турой:

#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;

}

Вас заинтересует