Я столкнулся с проблемой, что у молодых программистов, которые только начинают изучать языки, алгоритмы вызывают больше трудностей, чем синтаксис языка.
Если синтаксис и саму концепцию объясняет преподаватель на конкретном языке, то алгоритмы придется придумывать самостоятельно.
Единственным исключением из правил могут стать профильные технические специальности в университетах, где преподают алгоритмы.
Несмотря на то, что алгоритм решения может быть очень простым, многие не знают, как подойти к решению задачи.
Я рассмотрю пример проверки на победу в игре в крестики-нолики, но на поле 6х6 и блоке последовательных заполненных значений, равных 4. По сути здесь представлен универсальный алгоритм, только вместо переменных я использовал константы.
И это практически не зависит от языка, на котором осуществляется эта проверка.
Я предлагаю начинающим программистам сначала решить задачу графически, а затем перевести ее на тот или иной язык.
Для создания этого алгоритма подойдет клетчатый лист бумаги и ручка.
Итак, у нас есть поле 6х6.
Блок последовательно заполненных элементов, достаточный для победы, равен 4.
Думаю, теперь (просто поле из двух картинок) стало намного понятнее, как решить эту проблему.
Фактически нам предстоит решить 2 независимые задачи:
- Найдите все завершенные последовательности в блоке 4x4.
- Найдите все квадраты 4х4 в квадрате 6х6.
1. Найдите все завершенные последовательности в блоке 4х4.
Почему мы проверяем блок 4х4? Все просто; возможны только 2 диагонали нужного нам размера.Используя двоичную логику (1&1=1 и 1&0=0), мы можем легко выполнить тест в циклах.
Для этого нам понадобится по 1 переменной для каждой диагонали.
Пусть toright — логическая переменная, в которую мы записываем результат проверки диагонали сверху слева направо вниз.
И влево, чтобы проверить диагональ сверху справа в низ слева.
Первоначально мы установим значение true для этих переменных.
Далее каждую ячейку сравниваем по диагонали с символом «Х» или «О».
Разумеется, мы делаем это с помощью 2-х вызовов, либо сравниваем всё с «Х», либо всё с «О».
Сравниваем каждую ячейку диагонали с нашим символом и получаем результат (истина) или (ложь).
Затем мы выполняем логическую операцию (&) между результатом и нашим правом.
Результат этой операции снова записываем в toright. Если на каком-то этапе мы получим результат (false), то все дальнейшие права всегда будут равны (false).
Это следует из правила логических операций (1&0=0).
Давайте напишем это на Java:
Теги: #крестики-нолики #проверка победы #Образовательный процесс в ИТboolean checkDiagonal(char symb) {
-
Ищете Мощную Защиту Пк?
19 Oct, 24 -
Как Закрыть Проблемы В Трекере Ошибок
19 Oct, 24 -
Телефон Со Съемной Камерой
19 Oct, 24 -
Windows Mobile Добралась До Мини-Автомобилей
19 Oct, 24