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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
#1

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

14.09.2013, 16:41. Просмотров 1425. Ответов 10
Метки нет (Все метки)

Привет. Помогите пожалуйста. Даны координаты двух фигур на шахматной доске. Определить бьют ли они друг друга. Фигуры могут быть или двое ладьей, или двое офицеров, или двое королев, или двое коней. Т.е. две фигуры одинаковы. Про ладью все просто. Сделали с одным условием. А вот про остальные у меня что то с одним не получается. Был вариант для офицера:

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

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

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

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

Определить бьют ли друг друга шахматные фигуры в заданной позиции - C++
Условие задачи Недавно Петя начал играть в шахматы. Напомним, что в шахматы играют два игрока, у каждого из которых изначально есть по...

На шахматной доске 8х8 расположены три фигуры - C++
Задача: //На шахматной доске 8х8 расположены три фигуры: ферзь, ладья и конь. //Требуется определить количество пустых полей...

Сколько коней можно без угроз друг другу расставить на шахматной доске размером M на N - C++
Сколько коней можно без угроз друг другу расставить на шахматной доске размером M на N. ;)

10
nikitasuper
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 11
14.09.2013, 16:43 #2
непонимаю что то поясни
0
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 16:46  [ТС] #3
nikitasuper, всмысле? Задание не понимаешь?
1
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 секунд
для королев комбинируй офицеров и ладъёв.
2
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 16:58  [ТС] #5
ykaland, спасибо большое.
0
ykaland
9 / 2 / 2
Регистрация: 04.03.2013
Сообщений: 13
14.09.2013, 17:00 #6
для пешков немного сложнее, нужно учитывать цвет фигуры
0
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,070
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)
не проверял так мысли вслух
1
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 17:14  [ТС] #8
Цитата Сообщение от ValeryS Посмотреть сообщение
что за переменная типа auto?
C++11.
0
Belfegor
Ghost
173 / 173 / 6
Регистрация: 16.09.2012
Сообщений: 526
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 минут

Не по теме:

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

1
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
14.09.2013, 18:33 #10
Цитата Сообщение от ValeryS Посмотреть сообщение
что за переменная типа auto?
старый компилятор?
С++11 уже старый? О.о
0
ValeryS
Модератор
6679 / 5088 / 475
Регистрация: 14.02.2011
Сообщений: 17,070
14.09.2013, 18:39 #11
Цитата Сообщение от Nekto Посмотреть сообщение
С++11 уже старый?
а причем здесь 11?
это ключевое слово было введено еще со времен K&R, означало что компилятор сам решает куда переменную втыкать в регистр или в стек
потом умерло, потом возродилось, вот я и переспросил
0
14.09.2013, 18:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2013, 18:39
Привет! Вот еще темы с ответами:

Расставить на доске N ферзей так, чтобы они не били друг друга - C++
смысл в том чтобы расставить на шахматной доске размером N*N, N ферзей так, чтобы они не били друг друна. пыиался сделать что то методом...

На шахматной доске стоят три ферзя. найти ту пару из них которые угрожают друг другу! - C++
помогите пожалуйста, или подскажите как начать)) на шахматной доске стоят три ферзя. найти ту пару из них которые угрожают друг другу!

Цифры стоящие друг от друга через две - C++
Как на основе этого кода я смогу посчитать сумму цифр стоящих друг от друга через две То есть, я ввожу например: 12345678 Число делится...

Найти две наиболее удаленных друг от друга точки - C++
Структуры: I. Решить задачу, используя структуру point для хранения координат точки: Множество точек задано в пространстве. Найти две...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru