1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

интересная задача по программированию

PLC, прочие контроллеры, промышленные компьютеры, операторские панели
Ответить

Автор темы
evgeny_alp
здесь недавно
здесь недавно
Сообщения: 6
Зарегистрирован: 29 ноя 2012, 15:33
Имя: Алпатов Евгений Юрьевич

интересная задача по программированию

Сообщение evgeny_alp »

Доброго Всем времени суток.Наткнулся на интересную задачу:

Необходимо написать функцию (Step 7), которая будет преобразовывать целое число на входе, в битовый сигнал на выходе (размерность слово).
Суть в том, что бы уложиться в минимум строк кода функции. Идеально в 3 строки.

Вход Выход
0 0000 0000 0000 0000
1 1000 0000 0000 0001
2 0100 0000 0000 0010
3 0010 0000 0000 0100
4 0001 0000 0000 1000
5 0000 1000 0001 0000
6 0000 0100 0010 0000
7 0000 0010 0100 0000
8 0000 0001 1000 0000
9 0000 0000 1100 0000
10 0000 0000 0110 0000
11 0000 0000 0011 0000
12 0000 0000 0001 1000
13 0000 0000 0000 1100
14 0000 0000 0000 0110
15 0000 0000 0000 0011

Уже сутки ломаю голову, всё никак(((... Закономерность видна с 1 по 8 и с 9 по 15, но вот чтобы с 1 по 15...
Заранее спасибо)))

Alex1980
здесь недавно
здесь недавно
Сообщения: 58
Зарегистрирован: 23 фев 2013, 16:48
Имя: Alexey Shepolov

Re: интересная задача по программированию

Сообщение Alex1980 »

в 3 строки не получится. во первых на выходе не битовый сигнал получается а слово (2 байта) только в двоичном виде.
закономерность я нашел такую:
1 приходит целое число, которое является по сути смещением в выходном слове для установки бита(пришла 1 - значит в выходном числе должен установится 1 бит).
2 это смещение по которому должна устанавливаться 1 отсчитывается слева направо (если на входе 14 то единица установлена в 14-м бите слева)
3 затем следует еще одно условие : если смещение меньше или равно половине (то есть 8) , то бит также устанавливается и справо налево(если на входе 2 то на выходе единица установлена и справа со смещением 2). как только смещения перекрывают друг друга , то есть на входе число больше 8 то в выходном числе надо устанавливать соседний бит (то есть в числе 9 сначала устанавливается девятый бит слево направо а затем устанавливается соседний бит, т.к. 9>8)

Alex1980
здесь недавно
здесь недавно
Сообщения: 58
Зарегистрирован: 23 фев 2013, 16:48
Имя: Alexey Shepolov

Re: интересная задача по программированию

Сообщение Alex1980 »

задачу лучше решить на STL

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: интересная задача по программированию

Сообщение Василий Иванович »

А мне на SCL больше нравится. Как-то так будет:

Y := SHL(IN := BOOL_TO_WORD(X>0), N := 16 - X) OR SHL(IN := BOOL_TO_WORD(X>0), N := 7 - ABS(8-X));

Надо, конечно, протестить, но вроде граблей быть не должно. Увы, в Ваш идеал не уложился - всего одна строка. :D

Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 22:14
Имя: Кузнецов Владимир Сергеевич
Страна: Россия
город/регион: Казань
Поблагодарили: 1 раз

Re: интересная задача по программированию

Сообщение Владимир Кузнецов »

массив значений, выборка по индексу.
и никаких закономерностей искать не нужно =)

Alex1980
здесь недавно
здесь недавно
Сообщения: 58
Зарегистрирован: 23 фев 2013, 16:48
Имя: Alexey Shepolov

Re: интересная задача по программированию

Сообщение Alex1980 »

Владимир Кузнецов писал(а):массив значений, выборка по индексу.
и никаких закономерностей искать не нужно =)
здорово сказал. вроде бы умные словосочетания но ни о чем) как начальство обычно говорит: "сделай то, то и то...там же все просто" , а как это сделать если деньги он не хочет выделять на проект? слова должны закрепляться чем то. я тоже могу сказать: косвенная адресация, смещение в адресном регистре и никаких проблем. думаю что это решение задачи точно облегчит :D
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Re: интересная задача по программированию

Сообщение aranea »

Alex1980, непонятные для вас слова "массив" и "индекс" наглядно представлены на картинке ниже
[+] картинка
Изображение
картинку сделал Yegor, решение задачи http://www.owen.ru/forum/showpost.php?p ... stcount=12
алгоритм http://iadt.siemens.ru/forum/viewtopic. ... 541#122541
Изображение

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: интересная задача по программированию

Сообщение Василий Иванович »

Не давайте ссылок на алгоритмы с ошибкой. Михайло нумерует биты, начиная со старшего. Детская болезнь левизны, чтоль... :)

Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 22:14
Имя: Кузнецов Владимир Сергеевич
Страна: Россия
город/регион: Казань
Поблагодарили: 1 раз

Re: интересная задача по программированию

Сообщение Владимир Кузнецов »

Любой конечный автомат можно реализовать через ячейки в памяти (ПЗУ).
Каждому входному значению будет соответствовать своё значение в ячейке.
В конкретном случае нужно создать массив (DB) из 16ти двух байтовых ячеек, содержимое которого фактически описано в первом сообщении.
Делая выборку из массива по индексу являющемуся входным значением получаем искомое.
Непонятно только что за битовый сигнал требуется по условию.
На форуме овена дали аналогичный ответ, если кому не понятно могут посмотреть там.

Василий Иванович
авторитет
авторитет
Сообщения: 878
Зарегистрирован: 21 авг 2009, 14:25
Имя: Василий Иванович
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Re: интересная задача по программированию

Сообщение Василий Иванович »

Слишком много шума из задачки уровня школьной олимпиады.
:ext_sleep:

Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 22:14
Имя: Кузнецов Владимир Сергеевич
Страна: Россия
город/регион: Казань
Поблагодарили: 1 раз

Re: интересная задача по программированию

Сообщение Владимир Кузнецов »

Василий Иванович писал(а):Слишком много шума из задачки уровня школьной олимпиады.
:ext_sleep:
Всем хочется показать себя умными :)

Alex1980
здесь недавно
здесь недавно
Сообщения: 58
Зарегистрирован: 23 фев 2013, 16:48
Имя: Alexey Shepolov

Re: интересная задача по программированию

Сообщение Alex1980 »

Владимир Кузнецов писал(а):
Василий Иванович писал(а):Слишком много шума из задачки уровня школьной олимпиады.
:ext_sleep:
Всем хочется показать себя умными :)
у вас человек evgeny_alp просто спросил. а вы как раз начали поднимать шум) типа школьные задачки, типа умные словосочетания :D если не хотите помогать то промолчите. зачем нести бред который ему точно не полезен. этот форум наверно и создали чтоб опытный помог новичку. с весной всех :ges_up:

Владимир Кузнецов
не первый раз у нас
не первый раз у нас
Сообщения: 321
Зарегистрирован: 31 авг 2011, 22:14
Имя: Кузнецов Владимир Сергеевич
Страна: Россия
город/регион: Казань
Поблагодарили: 1 раз

Re: интересная задача по программированию

Сообщение Владимир Кузнецов »

Alex1980 писал(а):зачем нести бред который ему точно не полезен.
Вообще то я по теме ответил и дал верный ответ, который потом пришлось подробнее объяснять для непонятливых.
А вот автор куда то пропал, что не делает ему чести и показывает реальную актуальность задачи.

Михаил
здесь недавно
здесь недавно
Сообщения: 8
Зарегистрирован: 10 июл 2012, 14:34
Имя: М М В

Re: интересная задача по программированию

Сообщение Михаил »

Ничего писать не надо. Надо просто правильно обращаться к памяти.
MW 500 WORD - > m 500.0 (0 bit)
....
m 500.2 (2 bit)
....
m 501.2 (11 bit)
....
m 501.7 (15 bit)
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»