- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
интересная задача по программированию
-
- здесь недавно
- Сообщения: 6
- Зарегистрирован: 29 ноя 2012, 15:33
- Имя: Алпатов Евгений Юрьевич
интересная задача по программированию
Доброго Всем времени суток.Наткнулся на интересную задачу:
Необходимо написать функцию (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...
Заранее спасибо)))
Необходимо написать функцию (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...
Заранее спасибо)))
-
- здесь недавно
- Сообщения: 58
- Зарегистрирован: 23 фев 2013, 16:48
- Имя: Alexey Shepolov
Re: интересная задача по программированию
в 3 строки не получится. во первых на выходе не битовый сигнал получается а слово (2 байта) только в двоичном виде.
закономерность я нашел такую:
1 приходит целое число, которое является по сути смещением в выходном слове для установки бита(пришла 1 - значит в выходном числе должен установится 1 бит).
2 это смещение по которому должна устанавливаться 1 отсчитывается слева направо (если на входе 14 то единица установлена в 14-м бите слева)
3 затем следует еще одно условие : если смещение меньше или равно половине (то есть 8) , то бит также устанавливается и справо налево(если на входе 2 то на выходе единица установлена и справа со смещением 2). как только смещения перекрывают друг друга , то есть на входе число больше 8 то в выходном числе надо устанавливать соседний бит (то есть в числе 9 сначала устанавливается девятый бит слево направо а затем устанавливается соседний бит, т.к. 9>8)
закономерность я нашел такую:
1 приходит целое число, которое является по сути смещением в выходном слове для установки бита(пришла 1 - значит в выходном числе должен установится 1 бит).
2 это смещение по которому должна устанавливаться 1 отсчитывается слева направо (если на входе 14 то единица установлена в 14-м бите слева)
3 затем следует еще одно условие : если смещение меньше или равно половине (то есть 8) , то бит также устанавливается и справо налево(если на входе 2 то на выходе единица установлена и справа со смещением 2). как только смещения перекрывают друг друга , то есть на входе число больше 8 то в выходном числе надо устанавливать соседний бит (то есть в числе 9 сначала устанавливается девятый бит слево направо а затем устанавливается соседний бит, т.к. 9>8)
-
- здесь недавно
- Сообщения: 58
- Зарегистрирован: 23 фев 2013, 16:48
- Имя: Alexey Shepolov
-
- авторитет
- Сообщения: 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
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: интересная задача по программированию
массив значений, выборка по индексу.
и никаких закономерностей искать не нужно =)
и никаких закономерностей искать не нужно =)
-
- здесь недавно
- Сообщения: 58
- Зарегистрирован: 23 фев 2013, 16:48
- Имя: Alexey Shepolov
Re: интересная задача по программированию
здорово сказал. вроде бы умные словосочетания но ни о чем) как начальство обычно говорит: "сделай то, то и то...там же все просто" , а как это сделать если деньги он не хочет выделять на проект? слова должны закрепляться чем то. я тоже могу сказать: косвенная адресация, смещение в адресном регистре и никаких проблем. думаю что это решение задачи точно облегчит :DВладимир Кузнецов писал(а):массив значений, выборка по индексу.
и никаких закономерностей искать не нужно =)
-
- знаток Eplan
- Сообщения: 1136
- Зарегистрирован: 21 сен 2012, 22:45
- Имя: aranea
- Благодарил (а): 30 раз
- Поблагодарили: 165 раз
Re: интересная задача по программированию
Alex1980, непонятные для вас слова "массив" и "индекс" наглядно представлены на картинке ниже
алгоритм 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ти двух байтовых ячеек, содержимое которого фактически описано в первом сообщении.
Делая выборку из массива по индексу являющемуся входным значением получаем искомое.
Непонятно только что за битовый сигнал требуется по условию.
На форуме овена дали аналогичный ответ, если кому не понятно могут посмотреть там.
Каждому входному значению будет соответствовать своё значение в ячейке.
В конкретном случае нужно создать массив (DB) из 16ти двух байтовых ячеек, содержимое которого фактически описано в первом сообщении.
Делая выборку из массива по индексу являющемуся входным значением получаем искомое.
Непонятно только что за битовый сигнал требуется по условию.
На форуме овена дали аналогичный ответ, если кому не понятно могут посмотреть там.
-
- авторитет
- Сообщения: 878
- Зарегистрирован: 21 авг 2009, 14:25
- Имя: Василий Иванович
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
-
- не первый раз у нас
- Сообщения: 321
- Зарегистрирован: 31 авг 2011, 22:14
- Имя: Кузнецов Владимир Сергеевич
- Страна: Россия
- город/регион: Казань
- Поблагодарили: 1 раз
Re: интересная задача по программированию
Всем хочется показать себя умными :)Василий Иванович писал(а):Слишком много шума из задачки уровня школьной олимпиады.
-
- здесь недавно
- Сообщения: 58
- Зарегистрирован: 23 фев 2013, 16:48
- Имя: Alexey Shepolov
Re: интересная задача по программированию
у вас человек evgeny_alp просто спросил. а вы как раз начали поднимать шум) типа школьные задачки, типа умные словосочетания :D если не хотите помогать то промолчите. зачем нести бред который ему точно не полезен. этот форум наверно и создали чтоб опытный помог новичку. с весной всехВладимир Кузнецов писал(а):Всем хочется показать себя умными :)Василий Иванович писал(а):Слишком много шума из задачки уровня школьной олимпиады.
-
- не первый раз у нас
- Сообщения: 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)
MW 500 WORD - > m 500.0 (0 bit)
....
m 500.2 (2 bit)
....
m 501.2 (11 bit)
....
m 501.7 (15 bit)