Форум программистов, компьютерный форум CyberForum.ru

Определить бъют ли две фигуры на шахматной доске друг друга - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 16:41     Определить бъют ли две фигуры на шахматной доске друг друга #1
Привет. Помогите пожалуйста. Даны координаты двух фигур на шахматной доске. Определить бьют ли они друг друга. Фигуры могут быть или двое ладьей, или двое офицеров, или двое королев, или двое коней. Т.е. две фигуры одинаковы. Про ладью все просто. Сделали с одным условием. А вот про остальные у меня что то с одним не получается. Был вариант для офицера:

C++
1
2
3
4
5
auto t = (x1-x2) / (y1 - y2);
if ( t == 1 || t == -1)
    cout << "yes";
else
    cout << "no";
и еще были, но они как и этот неверные. Подскажите пожалуйста сам алгоритм. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2013, 16:41     Определить бъют ли две фигуры на шахматной доске друг друга
Посмотрите здесь:

Рекурсивный алоритм шахматная доска расставить фигуры так чтобы не били друг друга C++
C++ Сколько коней можно без угроз друг другу расставить на шахматной доске размером M на N
C++ На шахматной доске 8х8 расположены три фигуры
C++ На шахматной доске стоят три ферзя. найти ту пару из них которые угрожают друг другу!
Расставить 8 ферзей на шахматной доске 8 на 8, которые не бьют друг друга C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nikitasuper
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 11
14.09.2013, 16:43     Определить бъют ли две фигуры на шахматной доске друг друга #2
непонимаю что то поясни
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 16:46  [ТС]     Определить бъют ли две фигуры на шахматной доске друг друга #3
nikitasuper, всмысле? Задание не понимаешь?
ykaland
9 / 2 / 2
Регистрация: 04.03.2013
Сообщений: 13
14.09.2013, 16:58     Определить бъют ли две фигуры на шахматной доске друг друга #4
Для конёв ( ) ):
C++
1
2
3
4
5
6
dx = abs(x1-x2);
dy = abs(y1-y2);
if (dx*dy = 2)
   cout << "коня бъёт коню";
else
   cout << "нибъёт";
Добавлено через 2 минуты
Для офицеров:
C++
1
2
if (abs(x1-x2) == abs(y1-y2))
   cout << "таки да! биот!";
Добавлено через 2 минуты
Для королёв:
C++
1
2
if (abs(x1-x2) < 2 && abs(y1-y2) < 2)
   cout << "взаимный шахъ";
Добавлено через 40 секунд
для королев комбинируй офицеров и ладъёв.
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 16:58  [ТС]     Определить бъют ли две фигуры на шахматной доске друг друга #5
ykaland, спасибо большое.
ykaland
9 / 2 / 2
Регистрация: 04.03.2013
Сообщений: 13
14.09.2013, 17:00     Определить бъют ли две фигуры на шахматной доске друг друга #6
для пешков немного сложнее, нужно учитывать цвет фигуры
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
14.09.2013, 17:04     Определить бъют ли две фигуры на шахматной доске друг друга #7
Цитата Сообщение от SERUYBKR Посмотреть сообщение
auto t = (x1-x2) / (y1 - y2);
что за переменная типа auto?
старый компилятор?
при такой записи можешь запросто схватить исключение, деление на 0
так насчет ладей
все просто или вертикаль одна или горизонталь одна
значит
C++
1
if(x1==x2 || y1==y2)
для слонов диагональ должна быть одна
из теоремы Пифагора квадраты катетов должны быть равны
C++
1
if((x1-y1)*(x1-y1)==(x2-y2)*(x2-y2))
для ферзя слон+ладья
для коней сумма движений по горизонтали+ сумма движений по вертикали равна 3
при этом не вертикали не горизонтали не должны совпадать
C++
1
if(x1!=x2 && y1!=y2 &&(x1-x2+y1-y2)*(x1-x2+y1-y2)==9)
не проверял так мысли вслух
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 17:14  [ТС]     Определить бъют ли две фигуры на шахматной доске друг друга #8
Цитата Сообщение от ValeryS Посмотреть сообщение
что за переменная типа auto?
C++11.
Belfegor
Ghost
 Аватар для Belfegor
172 / 172 / 6
Регистрация: 16.09.2012
Сообщений: 524
14.09.2013, 18:23     Определить бъют ли две фигуры на шахматной доске друг друга #9

Не по теме:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <windows.h>
using namespace std;
 
int main() {
    setlocale(LC_ALL, "Russian");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int x1, y1, x2, y2;
    cout << "Введите номер строки и номер столбца первой фигуры: ";
    cin >> x1 >> y1;
    cout << "Введите номер строки и номер столбца второй фигуры: ";
    cin >> x2 >> y2;
    int dx = x1 - x2;
    int dy = y1 - y2;
    if (dx < 0)dx = -dx;
    if (dy < 0)dy = -dy;
    cout << ((x1 == x2 || y1 == y2 || dx == dy) ? "Бьют\n" : "Не бьют\n");
 
    return 0;
}
ферзь ферзя так?



Добавлено через 16 минут

Не по теме:

оно в теге... я спрашивал...вам бы только спасибки ставить

Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
14.09.2013, 18:33     Определить бъют ли две фигуры на шахматной доске друг друга #10
Цитата Сообщение от ValeryS Посмотреть сообщение
что за переменная типа auto?
старый компилятор?
С++11 уже старый? О.о
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2013, 18:39     Определить бъют ли две фигуры на шахматной доске друг друга
Еще ссылки по теме:

C++ Используя стандартные правила шахматной игры, определить бьют фигуры друг друга или нет
C++ Найти две наиболее удаленных друг от друга точки
Определить, являются ли клетки (a, b), (c, d) полями одного цвета на шахматной доске C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
14.09.2013, 18:39     Определить бъют ли две фигуры на шахматной доске друг друга #11
Цитата Сообщение от Nekto Посмотреть сообщение
С++11 уже старый?
а причем здесь 11?
это ключевое слово было введено еще со времен K&R, означало что компилятор сам решает куда переменную втыкать в регистр или в стек
потом умерло, потом возродилось, вот я и переспросил
Yandex
Объявления
14.09.2013, 18:39     Определить бъют ли две фигуры на шахматной доске друг друга
Ответ Создать тему
Опции темы

Текущее время: 03:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru