IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Задача №38
lkobets
сообщение 12.04.2014 - 15:43
Сообщение #1


Читатель
*

Группа: Пользователи
Сообщений: 7
Регистрация: 19.10.2009
Из: Киев
Пользователь №: 9180




Есть 10 маркеров, которые включаются/отключаются по каким-то внешним условиям. Например, 10 линий, продукция поступает хаотически, некие датчики на входе включают эти битики, некие датчики на выходе отключают.
Задача - расчет количества включеных/выключеных. Т.е. в неком регистре надо получить число.

Приблизим к реальности. Есть 10 линий, на входе каждой стоит оптический датчик, надо "мониторить", сколько датчиков сейчас выдают 1-ку. Какие - не важно. Важно - количество.
И, естественно, код должен быть сразу для n.

И хотелось бы добавить:
1. Решение у меня есть, но не уверен, что оно оптимальное. Признаюсь, задаю задачку в надежде, что кто-то предложит что-то супер интересное.
2. Уважаемый ivgtrk, пожалуйста, не надо сюда плодить кучу сообщение, которые к делу не имеют никакого отношения. Без обид. )


Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 12.04.2014 - 17:46
Сообщение #2


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(lkobets @ 12.04.2014 - 15:43) *
Решение у меня есть, но не уверен, что оно оптимальное. Признаюсь, задаю задачку в надежде, что кто-то предложит что-то супер интересное.

Надеюсь, задача не вызвана незнанием о существовании инструкции SUM.
И, хотелось бы знать критерии интересности.


Сообщение отредактировал Sergei Troizky - 13.04.2014 - 05:37


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ivgtrk
сообщение 13.04.2014 - 15:51
Сообщение #3


Гигант мысли
****

Группа: Пользователи
Сообщений: 459
Регистрация: 5.02.2014
Пользователь №: 10203



Цитата(lkobets @ 12.04.2014 - 19:43) *
2. Уважаемый ivgtrk, пожалуйста, не надо сюда плодить кучу сообщение, которые к делу не имеют никакого отношения. Без обид. )

Уважаемый lkobets, и тем не менее, Вы сами же спровоцировали появление этого моего сообщения, "не относящегося к делу", о недопустимости которых меня же и просите. Без обид. Неплохо бы, для начала, прежде чем упоминать подобное - разобраться для себя, чем (кем) были вызваны, и по какому поводу те или иные мои посты "не по делу". На подобные безосновательные выпады я просто обязан отреагировать, уж простите. Или же будьте добры привести примеры того, о чем утверждаете. Я что то не припомню за собой таких деяний, касательно поставленных задач: плодить кучу сообщение, которые к делу не имеют никакого отношения.

Что касается же Вашей задачи - на наиболее прагматичное (читай - простое и эффективное) решение, Вам дали намек в предыдущем посте.


--------------------
Никому никогда ничего не объясняйте — каждый всё равно поймёт так, как ему выгодно.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 15.04.2014 - 04:46
Сообщение #4


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(Sergei Troizky @ 12.04.2014 - 17:46) *
Надеюсь, задача не вызвана незнанием о существовании инструкции 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.


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
lkobets
сообщение 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.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
m_by
сообщение 16.04.2014 - 09:05
Сообщение #6


Гигант мысли
****

Группа: Пользователи
Сообщений: 252
Регистрация: 15.11.2007
Пользователь №: 6407



Можно топорно ...
- обнулить счётчик бит (например D0) в начале программы
- добавить на каждый бит отдельно inc D0
- в конце программы D0 перенести в любую ячейку, которая и будет всегда содержать сумму активных
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Sergei Troizky
сообщение 21.04.2014 - 21:20
Сообщение #7


Гигант мысли
****

Группа: Пользователи
Сообщений: 377
Регистрация: 30.12.2004
Пользователь №: 108



Цитата(m_by @ 16.04.2014 - 09:05) *
Можно топорно ...
- обнулить счётчик бит (например D0) в начале программы
- добавить на каждый бит отдельно inc D0
- в конце программы D0 перенести в любую ячейку, которая и будет всегда содержать сумму активных

При заданном объеме задачи (10 бит), и даже где-то до 30-ти бит, я именно так бы и сделал.
Не стоит оно организации цикла. Кроме того, адреса наблюдаемых входов смогут быть совершенно произвольными и в любом порядке.
И будут впрямую мониториться на экране, что тоже удобно.
Последний пункт в цитате- лишний, если значение полностью вычисляется до его использования.


Цитата(lkobets @ 15.04.2014 - 16:56) *
Интересно, реально ли решить без использования индексных регистров. И, естественно, без инструкции 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


--------------------
Делать надо сразу хорошо. Плохо само получится.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 28.03.2024 - 23:57