Задача №38 |
Здравствуйте, гость ( Вход | Регистрация )
Задача №38 |
12.04.2014 - 15:43
Сообщение
#1
|
|
Читатель Группа: Пользователи Сообщений: 7 Регистрация: 19.10.2009 Из: Киев Пользователь №: 9180 |
Есть 10 маркеров, которые включаются/отключаются по каким-то внешним условиям. Например, 10 линий, продукция поступает хаотически, некие датчики на входе включают эти битики, некие датчики на выходе отключают. Задача - расчет количества включеных/выключеных. Т.е. в неком регистре надо получить число. Приблизим к реальности. Есть 10 линий, на входе каждой стоит оптический датчик, надо "мониторить", сколько датчиков сейчас выдают 1-ку. Какие - не важно. Важно - количество. И, естественно, код должен быть сразу для n. И хотелось бы добавить: 1. Решение у меня есть, но не уверен, что оно оптимальное. Признаюсь, задаю задачку в надежде, что кто-то предложит что-то супер интересное. 2. Уважаемый ivgtrk, пожалуйста, не надо сюда плодить кучу сообщение, которые к делу не имеют никакого отношения. Без обид. ) |
|
|
12.04.2014 - 17:46
Сообщение
#2
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Решение у меня есть, но не уверен, что оно оптимальное. Признаюсь, задаю задачку в надежде, что кто-то предложит что-то супер интересное. Надеюсь, задача не вызвана незнанием о существовании инструкции SUM. И, хотелось бы знать критерии интересности. Сообщение отредактировал Sergei Troizky - 13.04.2014 - 05:37 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
13.04.2014 - 15:51
Сообщение
#3
|
|
Гигант мысли Группа: Пользователи Сообщений: 459 Регистрация: 5.02.2014 Пользователь №: 10203 |
2. Уважаемый ivgtrk, пожалуйста, не надо сюда плодить кучу сообщение, которые к делу не имеют никакого отношения. Без обид. ) Уважаемый lkobets, и тем не менее, Вы сами же спровоцировали появление этого моего сообщения, "не относящегося к делу", о недопустимости которых меня же и просите. Без обид. Неплохо бы, для начала, прежде чем упоминать подобное - разобраться для себя, чем (кем) были вызваны, и по какому поводу те или иные мои посты "не по делу". На подобные безосновательные выпады я просто обязан отреагировать, уж простите. Или же будьте добры привести примеры того, о чем утверждаете. Я что то не припомню за собой таких деяний, касательно поставленных задач: плодить кучу сообщение, которые к делу не имеют никакого отношения. Что касается же Вашей задачи - на наиболее прагматичное (читай - простое и эффективное) решение, Вам дали намек в предыдущем посте. -------------------- Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
|
|
|
15.04.2014 - 04:46
Сообщение
#4
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Надеюсь, задача не вызвана незнанием о существовании инструкции SUM. И, хотелось бы знать критерии интересности. А в ответ- тишина. Ладно, предположим, у Вас FX1S либо FX1N, и инструкция SUM недоступна. Тогда, можно так: LD M8000 RST D0 RST Z FOR K10 LD M8000 MOV K1X20Z K1M0 INC Z LD M0 INC D0 NEXT Опрашиваются 10 последовательных входов, начиная с X20, результат- в D0. Программа будет также затрагивать биты M0-M3. -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
15.04.2014 - 16:56
Сообщение
#5
|
|
Читатель Группа: Пользователи Сообщений: 7 Регистрация: 19.10.2009 Из: Киев Пользователь №: 9180 |
Цитата Надеюсь, задача не вызвана незнанием о существовании инструкции SUM. Признаюсь, инструкцию упустил. Но в любом случае, как было выше сказано, для 1S, 1N задача остается актуальной (мануал уже почитал). Цитата Тогда, можно так: LD M8000 RST D0 RST Z FOR K10 LD M8000 MOV K1X20Z K1M0 INC Z LD M0 INC D0 NEXT Опрашиваются 10 последовательных входов, начиная с X20, результат- в D0. Программа будет также затрагивать биты M0-M3. Цитата И, хотелось бы знать критерии интересности. Интересно, реально ли решить без использования индексных регистров. И, естественно, без инструкции SUM. |
|
|
16.04.2014 - 09:05
Сообщение
#6
|
|
Гигант мысли Группа: Пользователи Сообщений: 252 Регистрация: 15.11.2007 Пользователь №: 6407 |
Можно топорно ...
- обнулить счётчик бит (например D0) в начале программы - добавить на каждый бит отдельно inc D0 - в конце программы D0 перенести в любую ячейку, которая и будет всегда содержать сумму активных |
|
|
21.04.2014 - 21:20
Сообщение
#7
|
|
Гигант мысли Группа: Пользователи Сообщений: 377 Регистрация: 30.12.2004 Пользователь №: 108 |
Можно топорно ... - обнулить счётчик бит (например D0) в начале программы - добавить на каждый бит отдельно inc D0 - в конце программы D0 перенести в любую ячейку, которая и будет всегда содержать сумму активных При заданном объеме задачи (10 бит), и даже где-то до 30-ти бит, я именно так бы и сделал. Не стоит оно организации цикла. Кроме того, адреса наблюдаемых входов смогут быть совершенно произвольными и в любом порядке. И будут впрямую мониториться на экране, что тоже удобно. Последний пункт в цитате- лишний, если значение полностью вычисляется до его использования. Интересно, реально ли решить без использования индексных регистров. И, естественно, без инструкции SUM. Извольте: LD M8000 RST D0 DWAND K8X0 HFFFFFFFF K8M100 'Скопировать желаемые входы в буфер через маску, в пределах 32-х последовательных входов. FOR K32 'Проделать нижеследующее столько раз, какова длина буфера (не путать с количеством наблюдаемых входов). LD M100 'Посчитать включенный младший бит буфера. INC D0 LD M8000 SFTR M8001 M100 K32 K1 'Сдвинуть биты буфера, записав в старший бит ноль. NEXT Можно использовать и более длинный буфер, сформировав его более чем одной инструкцией. Сообщение отредактировал Sergei Troizky - 21.04.2014 - 21:40 -------------------- Делать надо сразу хорошо. Плохо само получится.
|
|
|
Текстовая версия | Сейчас: 28.03.2024 - 23:57 |