Задача 29) Заданы координаты короля и слона на шахматной доске. Определить, бьют ли фигуры друг друга

1) Для решения задачи необходимо выяснить текущие координаты фигур.

Король бьет все, что находится на расстоянии одной клетки в любом направлении от него.

Слон бьет фигуру только в том случае, если выполняется условие:

x1-x2=y1-y2, где x1 и y1 –координаты короля, а x2 и y2 – координаты слона.

2) Блок-схема:

Начало
Запрос и получение исходных данных
|x1-x2|<=1 && |y1-y2|<=1
Да
Нет
“‘Король бьет слона
“Слон бьет короля”
|x1-x2|=|y1-y2|
Нет
Да
Конец

 

 


3) Основная часть программы на языке C++:

 

#include "stdafx.h"

#include "math.h"

 

int _tmain(int argc, _TCHAR* argv[])

{

int kx,ky,sx,sy;

bool b=false;

printf("1-aya koordinata korolia: ");

scanf("%d",&kx);

printf("2-aya koordinata korolia: ");

scanf("%d",&ky);

printf("1-aya koordinata slona: ");

scanf("%d",&sx);

printf("2-aya koordinata slona: ");

scanf("%d",&sy);

if ((kx==sx)&&(ky==sy))

{

printf("\nKto-to kogo-to uzhe s.el:)\n");

return 0;

}

if ((abs(kx-sx)<=1)&&(abs(ky-sy)<=1))

{

printf("\nKorol' b'et slona\n");

b=true;

}

if (!(abs(sx-kx)-abs(sy-ky)))

{

printf("\nSlon b'et korolia\n");

b=true;

}

if (b==false)

{

printf("\nFiguri ne mogut pobit' drug druga iz dannih poziciy\n");

}

return 0;

}

4) Обоснование выбора условных операторов:

Конструкция для проверки не стоят ли фигуры на одной клетке:

if ((kx=sx)&&(ky==sy))

Если соответствующие координаты фигур равны, то они стоят на одной клетке.

Конструкция для проверки может ли король побить слона:

if ((abs(kx-sx)<=1)&&(abs(ky-sy)<=1))

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

Конструкция для проверки может ли слон побить короля:

if (!(abs(sx-kx)-abs(sy-ky)))

Если разность x-координат по модулю равна разности y-координат по модулю, тослон может побить короля.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: