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-координат по модулю, тослон может побить короля.