Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 12:05   #1
Denis B
Новичок
Джуниор
 
Регистрация: 25.05.2010
Сообщений: 1
По умолчанию C++ и шахматы.

Дали такое задание по курсовому проекту, не могу сообразить как написать программу, в С++ не очень то силен. Помогите пожалуйста.

Даны натуральные числа a,b,c,d,e,f, каждое из которых не превосходит восьми.
На поле (a,b) шахматной доски расположена белая фигура, на поле (c,d)-черная. Составить программу, определяющую сможет ли
белая фигура пойти на поле (e,f) не попав при этом под удар черной фигуры, если белая фигура - ладья, а черная- слон.

Сделан примерный алгоритм, не могу написать на Си

Функция ВычислитьКоординатыПокрываемыеСлоно м(х,у)
массивКоординат = новый массив[ ][ ];
//цикл на увеличение х-растет у- уменьшается
Пока x<=8 и у>=1 Цикл
массивКоординат.добавить(x,y);
//Инкрементируем х и декрементируем у
х=х+1;
у=у-1;
КонецЦикла;
//Цикл на уменьшение х уменьшается у растет
Пока x>=1 и у<=8 Цикл
массивКоординат.добавить(x,y);
//Инкрементируем х и декрементируем у
х=х-1;
у=у+1;
КонецЦикла;

//Вернем массив координат перекрываемых слоном
Возврат массивКоординат;
КонецФункции;

//Соответственно что бы проверить какие либо координаты на пересечения с покрываемыми координатами слона
//надо передать в эту функцию координаты слона и проверить наличие координат белой фигуры в возвращаемом //массиве если они там есть то белая фигура попадает под удар черной (слона)

Последний раз редактировалось Denis B; 25.05.2010 в 12:18.
Denis B вне форума Ответить с цитированием
Старый 25.03.2011, 13:55   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Я не очень понял условие.
1. Если просто надо посмотреть может ли ладья пойти на поле (e f ) то это просто..
первое условие которое надо выполнить это что ладья может туда идти( т.е a==e || b==f)
Если это выполнено, то смотрим не бито ли поле. Это можно сделав сравнить модули разности координат ( т.е. |e-c|==|f-d|, если это равенство выполняется то поле(е f) лежит на диагоналях проходящих через (c d), т.е. бито слоном)

2.Если ладьи можно сделать сколько угодно ходов , то поле не должно лежать на битых полях.
Что описано выше.

Прога занимает в обоих случаях менее 15 строчек так что я наверно что-то не так понял 8)
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 25.03.2011, 13:59   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Denis B
ICQ 395-546-218
rrrFer вне форума Ответить с цитированием
Старый 25.03.2011, 15:01   #4
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Цитата:
определяющую сможет ли
белая фигура пойти на поле (e,f) не попав при этом под удар черной фигуры
чтобы это сделать, достаточно знать 2 вещи
1. сможет ли черная фигура сразуже срубить белую ладью(в зависимости кто первый ходит), 2. сможет ли слон заблокировать позицию e,f ., ни для кого ни секрет что слон ходит только по диагонали одного цвета.

Для того чтобы проверить возможно ли такое что слон сразуже бьет по ладье(зависит от того кто первым сделает ход), проверяем след. образом:
Код:
if (abs (a-c) == abs(b-d)){cout<<"Slon win";return 0;}... значит что они находятся на одной диагонали
Тепереь проверяем на какой (белой, черной) клетки стоит слон...
Код:
...
int a, b, c, d, e, f;
	bool g1 = false, g2 = false;
	cin>>a>>b>>c>>d>>e>>f;
	if ((c % 2 == 0 && d % 2 != 0) || (c % 2 != 0 && d % 2 == 0)) g1  = true;
	if ((e % 2 == 0 && f % 2 != 0) || (e % 2 != 0 && f % 2 == 0)) g2  = true;
	if ((g1 && g2) || (!g1 && !g2))cout<<"Slone win";else cout<<"Ladya win";[/
...
опять же зависит от того кто первый сделает ход.

Последний раз редактировалось Летучий_СкилетиК; 25.03.2011 в 15:06.
Летучий_СкилетиК вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия-Шахматы Маринка777 Общие вопросы .NET 1 03.12.2009 15:58
задача шахматы darter96 Помощь студентам 7 25.06.2009 13:43
Шахматы онлайн LAGOX PHP 1 08.05.2009 21:15
Delphi шахматы kacky Помощь студентам 3 30.10.2008 20:09
Шахматы Shchetnev Фриланс 10 27.05.2008 00:36