|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
26.03.2016, 15:58 | #1 |
Пользователь
Регистрация: 11.02.2015
Сообщений: 57
|
Поиск в ближайших элементах матрицы.
Продолжение 2-ух предыдущих вопросов.
По задаче дана матрица(Она рабочая и перемещает элементы(циклы и условия всё работает отлично)) Вдобавок к вышеперечисленному есть такое специфическое задание Нужно проверить есть ли в ближайших 8 ячейках матрицы данные То есть,нужная область проверки, участок матрицы 3 на 3,посередине наш элемент и нужно найти другой элемент в тех ячейках что окружают основной элемент. Иными словами есть у меня элемент 0,он находится на участке 3 на 3 посередине,и нужно произвести поиск в ячейках,окружающей элемент 0 на наличие элементов 0 или 5(цифры это образно),так как проект делается. Сначала была мысль разделить матрицу на несколько частей а потом собрать. Но 15 раз разбивать и собирать матрицу мягко говоря перспектива не радует. Поэтому и интересно может есть какие нибудь алгоритмы поиска в определённой части матрицы нужных мне значений. Я не прошу чтобы за меня что-то писали,это я сразу говорю... Интересно узнать словесную реализацию, можно ли произвести это через какой-либо алгоритм(например из АлгоЛиста) или же можно простыми действиями и функциями решить мой вопрос. Последний раз редактировалось schoolboy99; 26.03.2016 в 16:19. |
26.03.2016, 16:27 | #2 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Чтобы рассмотреть участок 3 на 3 с элементом [i1, j1] в середине:
Код:
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
26.03.2016, 21:52 | #3 |
Пользователь
Регистрация: 11.02.2015
Сообщений: 57
|
Применил для своей процедуры
У меня наподобие игры,процедура moving прошла и активный элемент 0 оказался в новой ячейке,и вот тут в дело вступает процедура checking Условия по заданию очень своеобразные. 1)Если в заданном диапазоне встречается 5 то активный элемент 0,становится 1,внутри вложенный оператор условия что если опять он попадает где 5,то уже сформировывается новый активный элемент 0. 2)Если в заданном диапазоне ничего нету то активному элементу присваивается символ 'П'-это означает промах,во условном операторе я ещё сделал проверку,что если опять будет 'П' то ячейка становится пустой '-' 3)Если в заданном диапазоне поисков встречается активный элемент то я вызываю процедуру moving чтобы снова повторить попытку. Код:
|
26.03.2016, 23:18 | #4 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Попробую сформулировать то, как понял:
Есть матрица с "-", "5" и "0". Процедура moving перемещает все "0" на новые места, которые раньше были прочерками. После чего нужно выполнить checking. Проверка делает следующее: если два нулевых элемента различаются по обеим координатам не более чем на 1, то нужно опять выполнить moving; если вокруг рассматриваемого нулевого элемента ничего нет, то он заменяется на П; если около рассматриваемого нулевого элемента есть "5", то нулевой элемент заменяется на "1", если же встретится еще одна "5" около рассматриваемого элемента, то элемент заменятся на прочерк и генерируется новый нулевой элемент. Вопросы: Так ли я все понял? Нужно ли обеспечить в процедуре moving перемещение всех нулей на новые места? Что будет, если будет три "5" около нулевого элемента? Активный элемент это текущий рассматриваемый нулевой элемент?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
27.03.2016, 13:24 | #5 |
Пользователь
Регистрация: 11.02.2015
Сообщений: 57
|
1)Да именно так
2)В процедуре moving все нули перемещаются на новые места случайным образом. Ваш пример перемещения всех нулей я добавил в свой код и переделал на свою программу и он у меня все 0-ли перемещает.Я там ещё цикл добавил Забыл сказать что 5 должно стать прочерком,0 становится +1,а 5 становится -. Иными словами его не будет в следующем такте(шаге). В будущем там будет задано количество тактов(То есть например 6 объектов надо будет 6 раз перемещать с помощью moving\checnking) но я над этим кодом пока работаю.Над образованием циклов и подсчёта. 3)Если будет 3 5-рки,то 0 удаляет только одну 5-рку(их останется 2). Последний раз редактировалось schoolboy99; 27.03.2016 в 14:32. |
27.03.2016, 14:36 | #6 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
когда я писал решалку судоку, у меня каждая ячейка была объектом, имеющим свойство-массив "соседних" ячеек. это очень удобно.
могу подарить код. Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
27.03.2016, 15:16 | #7 |
Пользователь
Регистрация: 11.02.2015
Сообщений: 57
|
Спасибо вам,но я откажусь
Мне легче написать своё и потом попытаться исправить ошибки и доработать,чем взять чужое.. По крайней мере в этой задаче. |
27.03.2016, 15:22 | #8 | |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Цитата:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
|
|
27.03.2016, 15:44 | #9 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,318
|
Честно говоря, после ответов не прибавилось у меня понимания
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
27.03.2016, 16:00 | #10 |
Пользователь
Регистрация: 11.02.2015
Сообщений: 57
|
Лист Задания
Насчёт тактов,я пока пишу код. А сверху код - это попытка реализовать ниже перечисленные условия • В текущий такт времени происходят следующие события: 2. Если в 8 соседний клетках(вокруг точки прыжка) и в самой точке конца прыжка нет пассивных элементов, то текущему активному элементу присваивается -1(промах) 3. Если в 8 соседних клетках или в самой точки конца прыжка есть 1 или несколько пассивных объектов то этот активный элемент получает +1(выполнено),т.е. алгебраически суммируются предыдущие и этот+1(1 это своеобразный рейтинг). Все пассивных в этих 9-ти клетках исчезают, их уничтожает активный объект и в следующем такте времени их нет. 4. Текущий активный объект переходит в точку конца прыжка в следующем такте времени. 5. Такты перебираются. В текущем такте все активные. Замечание: Если активный объект прыгает на активный объект то попытка прыжка повторяется(вызываю moving). • Если у активного элемента рейтинг(+2) то в следующем такте времени он исчезает и не участвует в дальнейшем рассмотрении. • Если у активного элемента 2+ то он генерирует случайное место на полей другому новому активному элементу при его плюсы обнуляются. • Если у любой пустой клетке есть 3 активных соседа, то в этой же клетке в следующее такте времени рождается активный объект. Последний раз редактировалось schoolboy99; 27.03.2016 в 17:39. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Нахождение точек ближайших к прямой (Си) | Ckiv | Помощь студентам | 1 | 06.02.2014 17:00 |
Бинарный поиск с определением ближайших узлов | k281092 | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 20.11.2011 21:30 |
Задача о паре ближайших точек | CyberGirl | Помощь студентам | 4 | 18.06.2011 18:11 |
Матрицы.Поиск координат элементов матрицы. | dima-intro | Помощь студентам | 1 | 11.12.2010 22:48 |
Найти 2 ближайших ел-та в массиве | neon2k | Помощь студентам | 3 | 08.01.2009 02:50 |