Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/41: Рейтинг темы: голосов - 41, средняя оценка - 4.95
22 / 19 / 6
Регистрация: 24.12.2012
Сообщений: 435
1

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

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

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

C++
1
2
3
4
5
auto t = (x1-x2) / (y1 - y2);
if ( t == 1 || t == -1)
    cout << "yes";
else
    cout << "no";
и еще были, но они как и этот неверные. Подскажите пожалуйста сам алгоритм. Спасибо.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2013, 16:41
Ответы с готовыми решениями:

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

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

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

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

10
0 / 0 / 0
Регистрация: 12.09.2013
Сообщений: 11
14.09.2013, 16:43 2
непонимаю что то поясни
0
22 / 19 / 6
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 16:46  [ТС] 3
nikitasuper, всмысле? Задание не понимаешь?
1
9 / 2 / 0
Регистрация: 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
22 / 19 / 6
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 16:58  [ТС] 5
ykaland, спасибо большое.
0
9 / 2 / 0
Регистрация: 04.03.2013
Сообщений: 13
14.09.2013, 17:00 6
для пешков немного сложнее, нужно учитывать цвет фигуры
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
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
22 / 19 / 6
Регистрация: 24.12.2012
Сообщений: 435
14.09.2013, 17:14  [ТС] 8
Цитата Сообщение от ValeryS Посмотреть сообщение
что за переменная типа auto?
C++11.
0
Ghost
174 / 174 / 40
Регистрация: 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
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
14.09.2013, 18:33 10
Цитата Сообщение от ValeryS Посмотреть сообщение
что за переменная типа auto?
старый компилятор?
С++11 уже старый? О.о
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
14.09.2013, 18:39 11
Цитата Сообщение от Nekto Посмотреть сообщение
С++11 уже старый?
а причем здесь 11?
это ключевое слово было введено еще со времен K&R, означало что компилятор сам решает куда переменную втыкать в регистр или в стек
потом умерло, потом возродилось, вот я и переспросил
0
14.09.2013, 18:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2013, 18:39
Помогаю со студенческими работами здесь

На шахматной доске расставить 8 ферзей так, чтобы они не били друг друга
На шахматной доске расставить 8 ферзей так, чтобы они не били друг друга

Расставить 8 ферзей на шахматной доске так, чтобы они не били друг друга
В коде какая-то ошибка поправьте пожалуйста unit Unit1; interface uses Winapi.Windows,...

Рекурсия: На шахматной доске расставить 8 ферзей так, чтобы они не били друг друга
Всем привет. Прошу помочь в решении задачи в VBA c помощью рекурсии. Задача: На шахматной доске...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru