Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/47: Рейтинг темы: голосов - 47, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 24.10.2016
Сообщений: 5

Определить бьют ли друг друга шахматные фигуры в заданной позиции

24.10.2016, 14:10. Показов 9524. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие задачи
Недавно Петя начал играть в шахматы.
Напомним, что в шахматы играют два игрока, у каждого из которых изначально есть по 8 фигур и 8 пешек. В этой задаче пешки рассматривать не будем.
Ни одна фигура, кроме коня, не может перепрыгивать через свои или чужие фигуры. Нельзя делать ход на поле, занятое своей фигурой. При ходе на поле, занятое чужой фигурой, она снимается с доски.
Фигуры ходят следующим образом:
- король — на любую соседнюю по вертикали, горизотнали или диагонали клетку;
- ферзь - на любое расстояние по вертикали, горизотнали или диагонали;
- ладья - на любое расстояние по вертикали, горизотнали;
- слон - на любое расстояние по диагонали;
- конь - в форме буквы «Г»: на 1 клетку по горизонтали и на 2 по вертикали, или наоборот, на 1 клетку по вертикали и 2 по горизонтали.
Вам даны позиции одной белой и одной черной фигуры. Определите, бьют ли фигуры друг друга, и, если бьют, выведите какая из них бьет какую.
Формат входного файла
Первая строка входного файла содержит тип и позицию белой фигуры. Вторая строка содержит тип и позицию черной фигуры.
Каждая фигура задается строкой, состоящей из трех символов.
Первый символ обозначает тип фигуры: «В» — слон, «N» — конь, «R» — ладья, «Q» — ферзь, «К» — король.
Второй символ задает горизонталь (от «а» до «h»).
Третий символ задает вертикаль (от «1» до «8»).
Гарантируется, что фигуры стоят на различных клетках шахматной доски.
Формат выходного файла
В выходной файл выведите одно слово — ответ на задачу. В случае, если ни одна фигура не бьет другую, выведите «NONE». В случае, если обе фигуры бьют друг друга, выведите «ВОТН». В случае, если белая фигура бьет черную, а черная не бьет белую, выведите «WHITE». В случае, если черная фигура бьет белую, а белая не бьет черную, выведите «BLACK».

P.S.:можно на C++ или паскале
P.S.S.:заранее благодарен.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2016, 14:10
Ответы с готовыми решениями:

Используя стандартные правила шахматной игры, определить бьют фигуры друг друга или нет
На шахматной доске расставлены три фигуры. Используя стандартные правила шахматной игры, определить бьют они друг друга или нет....

На шахматной доске расставлены три фигуры. Определить бьют они друг друга или нет
На шахматной доске расставлены три фигуры. Используя стандартные правила игры узнать бьют они друг друга или нет. Расположение фигур...

Заданы координаты короля и ладьи на шахматной доске определить бьют ли фигуры друг друга
заданы координаты короля и ладьи на шахматной доске определить бьют ли фигуры друг друга весь код в pithon

1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
24.10.2016, 18:29
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
///////////////////////////////////////////////////////////////////////////////
//1.
///////////////////////////////////////////////////////////////////////////////
//Недавно Петя начал играть в шахматы.
//Напомним, что в шахматы играют два игрока, у каждого из которых
//изначально есть по 8 фигур и 8 пешек. В этой задаче пешки
//рассматривать не будем.
//Ни одна фигура, кроме коня, не может перепрыгивать через свои
//или чужие фигуры. Нельзя делать ход на поле, занятое своей фигурой.
//При ходе на поле, занятое чужой фигурой, она снимается с доски.
//Фигуры ходят следующим образом:
//- король — на любую соседнюю по вертикали, горизотнали или диагонали клетку;
//- ферзь - на любое расстояние по вертикали, горизотнали или диагонали;
//- ладья - на любое расстояние по вертикали, горизотнали;
//- слон - на любое расстояние по диагонали;
//- конь - в форме буквы «Г»: на 1 клетку по горизонтали и на 2 по вертикали,
//или наоборот, на 1 клетку по вертикали и 2 по горизонтали.
//Вам даны позиции одной белой и одной черной фигуры. Определите,
//бьют ли фигуры друг друга, и, если бьют, выведите какая из них бьет какую.
 
//Формат входного файла
//Первая строка входного файла содержит тип и позицию белой фигуры.
//Вторая строка содержит тип и позицию черной фигуры.
//Каждая фигура задается строкой, состоящей из трех символов.
//Первый символ обозначает тип фигуры:
//    «В» — слон,
//    «N» — конь,
//    «R» — ладья,
//    «Q» — ферзь,
//    «К» — король.
//Второй символ задает горизонталь (от «а» до «h»).
//Третий символ задает вертикаль (от «1» до «8»).
 
//Гарантируется, что фигуры стоят на различных клетках шахматной доски.
 
//Формат выходного файла
//В выходной файл выведите одно слово — ответ на задачу.
//В случае, если ни одна фигура не бьет другую, выведите «NONE».
//В случае, если обе фигуры бьют друг друга, выведите «ВОТН».
//В случае, если белая фигура бьет черную, а черная не бьет белую,
//выведите «WHITE». В случае, если черная фигура бьет белую,
//а белая не бьет черную, выведите «BLACK».
///////////////////////////////////////////////////////////////////////////////
#include <cmath>
#include <iostream>
///////////////////////////////////////////////////////////////////////////////
enum    T_piece_type
{
    BISHOP_PIECE    =   'B',
    KNIGHT_PIECE    =   'N',
    ROOK_PIECE      =   'R',
    QUEEN_PIECE     =   'Q',
    KING_PIECE      =   'K'
};
///////////////////////////////////////////////////////////////////////////////
struct  T_piece
{
    //-------------------------------------------------------------------------
    T_piece_type    piece_type_;
    char            col_;
    char            row_;
    //-------------------------------------------------------------------------
    bool    attacks( T_piece    const   &   p )                             const
    {
        int     abs_delta_col   =   std::abs( col_ - p.col_ );
        int     abs_delta_row   =   std::abs( row_ - p.row_ );
 
        switch( piece_type_ )
        {
        case    BISHOP_PIECE    :   return  bishop_attacks  ( abs_delta_col,  abs_delta_row );
        case    KNIGHT_PIECE    :   return  knight_attacks  ( abs_delta_col,  abs_delta_row );
        case    ROOK_PIECE      :   return  rook_attacks    ( abs_delta_col,  abs_delta_row );
 
        case    QUEEN_PIECE     :   return  queen_attacks   ( abs_delta_col,  abs_delta_row );
        case    KING_PIECE      :   return  king_attacks    ( abs_delta_col,  abs_delta_row );
        default                 :   return  false;
        }
    }
    //-------------------------------------------------------------------------
    static
    bool    bishop_attacks
        (
            int     abs_delta_col,
            int     abs_delta_row
        )
    {
        return      abs_delta_col
                ==  abs_delta_row;
    }
    //-------------------------------------------------------------------------
    static
    bool    rook_attacks
        (
            int     abs_delta_col,
            int     abs_delta_row
        )
    {
        return          abs_delta_col
                    *   abs_delta_row
                ==  0;
    }
    //-------------------------------------------------------------------------
    static
    bool    knight_attacks
        (
            int     abs_delta_col,
            int     abs_delta_row
        )
    {
        return          abs_delta_col
                    *   abs_delta_row
                ==  2;
    }
    //-------------------------------------------------------------------------
    static
    bool    queen_attacks
        (
            int     abs_delta_col,
            int     abs_delta_row
        )
    {
        return      bishop_attacks  ( abs_delta_col,  abs_delta_row )
                ||  rook_attacks    ( abs_delta_col,  abs_delta_row );
    }
    //-------------------------------------------------------------------------
    static
    bool    king_attacks
        (
            int     abs_delta_col,
            int     abs_delta_row
        )
    {
        return      queen_attacks   ( abs_delta_col,  abs_delta_row )
                &&  std::max        ( abs_delta_col,  abs_delta_row )   ==  1;
    }
    //-------------------------------------------------------------------------
};
///////////////////////////////////////////////////////////////////////////////
std::istream    &   operator>>
    (
        std::istream    &   istr,
        T_piece         &   piece
 
    )
{
    char    piece_type_symb{};
 
    istr    >>  piece_type_symb
            >>  piece.col_
            >>  piece.row_;
 
    piece.piece_type_   =   T_piece_type( piece_type_symb );
    return  istr;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    T_piece     white_piece;
    T_piece     black_piece;
 
    std::cin    >>  white_piece
                >>  black_piece;
 
    std::cout   <<  (
                        white_piece.attacks             ( black_piece )
                            ?   black_piece.attacks     ( white_piece )
                                    ?   "BOTH"
                                    :   "WHITE"
 
                            :   black_piece.attacks     ( white_piece )
                                    ?   "BLACK"
                                    :   "NONE"
                    )
 
                <<  std::endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2016, 18:29
Помогаю со студенческими работами здесь

Расставить шахматные фигуры на доске так, чтобы они не били друг друга
Доброго времени суток! Прошу помощи в написании программы &quot;Расставить шахматные фигуры на доске так, чтобы они не били друг друга....

Определить, бьют ли ферзи друг друга
На шахматной доске стоят два ферзя. Определить, бьют ли они друг друга. Местоположение задается 4 числами, определяющими их координаты....

Шахматы: определить, бьют ли ладья и король друг друга
Заданы координаты короля и ладьи на шахматной доске. Определить бьют ли фигуры друг друга. #include&lt;stdio.h&gt; ...

Проверить бьют ли друг друга две ладьи
Надо срочно. Ибо скоро спать. Можно просто код, голова не варит разобраться не могу. Все задания кроме данного не сдал. C++. На...

Какова вероятность того, что слоны не бьют друг друга?
На две наудачу выбранные клетки шахматной доски поставлены два разноцветных слона. Какова вероятность того, что слоны не бьют друг...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru