![]() |
|
Модераторы: bsa |
![]()
|
|
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
Доброе время суток.
Помогите с задачкой плз,у кого время\желание есть и кому не лень. Значит есть шахматная доска.Вводятся 2 числа,вернее координата,буква и цифра. На клетку,которая введена ставится дамка.Задача программы показать,в каких направлениях может двигаться дамка.То есть программа должна отметить все клетки,находящиеся с верху,с низу,с лева,с права и по диагонали от введённой клетки.С верхом\низом\сторонами проблем не оказалось,а вот,что делать с диагоналями я не знаю :(
У меня была идея,но как её развить я не знаю,и возможно ли таким способом это сделать вообще.(сама идея в закомментированых строках) |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Если нужно на пустой доске (в том смысле, что другие фигуры не загораживают проход), то
1. В цикле вычитаете из координат каждой клетки кординату той клетки, на которой расположена королева. Если одна из координат разности равна 0 , то горизонтальное/вертикальное направление или модули координат разности равны, то диагональное направление. 2. вначале в цикле проходите горизонталь, взяв вертикальную координату от позиции королевы, потом аналогично проходите вертикаль. С диагоналями чуть сложнее, а) можно просто пройтись в 4 стороны, следя за границой доски, прибавляя (1,1) (-1,1) (1,-1) (-1,-1) сответствено б) найти начало диагонали и двигаться от них. Это сообщение отредактировал(а) mes - 8.11.2008, 15:00 |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
вот условный пример для проверки по 4м диагональным направлениям
Это сообщение отредактировал(а) mes - 8.11.2008, 16:02 |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 1 Всего: 91 |
Предлагаю такой алгоритм. Раз уж мы идем сверху вниз и слева направо на каждой клетке проверяем условия:
Перед каждым началом прохода по линии определяем расстояние по Y от текущей линии до королевы. Предположим мы на 2ой линии, а королева на 5ой. Значит расстояние 5-2 = 3. Операцию надо проводить по модулю, т.е. если мы на линии 8, а королева на 5ой линии, то - 5-8 = [-3]. Знак числа надо опустить (можно использовать функцию abs()) Далее берем позицию X королевы. Пусть будет тоже 5. Тогда вычитаем позицию королевы по X (5) и расстояние по Y до проверяемой ячейки (3), 5-3 = 2. Запоминаем это значение в переменную leftDiag. Узнаем вторую точку на проверяемой линии, справа от королевы. Схема таже, только теперь 5+3=8. Заносим в rightDiag. Теперь при проходе по кажой ячейке на строке выполняем условие:
При попадании на строку с королевой - диагонали попадут именно на позицию X королевы (5+0). Это сообщение отредактировал(а) SABROG - 8.11.2008, 18:33 |
|||
|
||||
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
Спасибо!! В итоге всё получилось!!
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |