Важная информация

User Tag List

Страница 109 из 110 ПерваяПервая ... 105106107108109110 ПоследняяПоследняя
Показано с 1,081 по 1,090 из 1094

Тема: ЭТЮДЫ

  1. #1081
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AndTorp Посмотреть сообщение
    Здравствуйте.
    Нужна короткая процедура вычисления по формуле:
    C = (A / B) * 8 ,
    где A, B, C - байты и A в диапазоне от 1 до (B - 1).
    А разрядность А В С какая? 8 или 16?

  2. #1081
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #1082
    Activist
    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    424
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    59 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    А разрядность А В С какая? 8 или 16?
    Он же написал байты. ))
    Тут больше вопрос просто байты или и регистры нужны им соответствующие ?

    Цитата Сообщение от AndTorp Посмотреть сообщение
    C = (A / B) * 8 ,
    где A, B, C - байты и A в диапазоне от 1 до (B - 1).
    По делению видел процедуры https://zxpress.ru/article.php?id=11...u4v3h388674283 , не знаю правда насколько верные.
    А здесь по сути надо C=A*8/B , а с учётом условия: ' A в диапазоне от 1 до (B - 1) ' - результат будет не больше 7
    Дальше мозги не соображают ))

  4. #1083
    Veteran
    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,042
    Спасибо Благодарностей отдано 
    934
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    122 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AndTorp Посмотреть сообщение
    Нужна короткая процедура вычисления по формуле:
    C = (A / B) * 8 ,
    где A, B, C - байты и A в диапазоне от 1 до (B - 1).
    Вот, есть такая:
    Код:
          ld c,7
          sla a ; rlca
          jr c,skip1
          cp b
          jr nc,skip1
          res 2,c
          jr skip2
    skip1:
          sub b
    skip2:
          sla a ; rlca
          jr c,skip3
          cp b
          jr nc,skip3
          res 1,c
          jr skip4
    skip3:
          sub b
    skip4:
          sla a ; rlca
          jr c,skip5
          cp b
          jr nc,skip5
          res 0,c
    skip5:
    35 байт 97 тактов.
    Можно уменьшить, за счёт точности, заменив "sla a" на "rlca".
    Можно уменьшить за счёт замедления, свернув повторение в цикл.
    Возможно можно оптимизировать.

  5. Этот пользователь поблагодарил Reobne за это полезное сообщение:

    AndTorp (01.02.2024)

  6. #1084
    Veteran
    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,042
    Спасибо Благодарностей отдано 
    934
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    122 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    97 тактов это не точно. Можно сказать, примерно 100 тактов.
    C = (A / B) * 8 , где A, B, C - регистры Z80

  7. #1085
    Member
    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    99
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Кстати, если делать по-уму - то заменятся должны не просто случайные пиксели, но ещё и так чтобы дважды не заменялись те что уже заменены.
    Решается толково написаным RND. Тогда количество итераций можно выяснить исходя из знания площади картинки и количество заменяемых пикселей за раз...
    Это как-бы настоящий подход, а то в большинстве процедур - костыли, прогнали несколько замен - а потом окончательная - весь кусок сразу...
    Не прошло и 4 года, как на спектумкомпьютинг подняли схожую тему: https://spectrumcomputing.co.uk/foru...ic.php?t=11240
    Очень интересует подобный генератор, но знаний в тервере и комбинаторике не хватает, чтобы что-нибудь тут понять.
    Что нужно: генератор, позволяющий настраивать период в заданных пределах, например, имеется массив

    db 1
    db 2
    db 3
    db 4
    db 5

    Хочу запустить генератор с периодом 5, который позволил бы мне из этого массива выбрать за 5 итераций все значения в случайном порядке - "3, 1, 4, 5, 2".
    Или - с периодом 10000 для другого массива, из 10000 элементов.
    Позволяет ли так сделать эта LCG-функция, которая рассматривается в посте?
    программирование сильно возрастает!
    https://zx-pk.ru/threads/474-deb-ass...ull=1#post7841

  8. #1086
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,802
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    генератор, позволяющий настраивать период
    Ну в общем-то вроде можно взять любой RND (например однобайтовый), который даёт 0...255 и умножать результат на N+1 - получится что в старшем байте и будет нечто 0...N

  9. #1087
    Member
    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    99
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Оно-то будет. А что будет? Любой RND может выдать последовательность "3", "3", "3", "1", "4"? Думаю, может. А зачем мне "3", "3", "3"?
    программирование сильно возрастает!
    https://zx-pk.ru/threads/474-deb-ass...ull=1#post7841

  10. #1088
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,802
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    Оно-то будет. А что будет? Любой RND может выдать последовательность "3", "3", "3", "1", "4"? Думаю, может. А зачем мне "3", "3", "3"?
    Ну можно заюзать готовые таблички размером 256 где расставлены все эти 0...N и считывать элементы индексом RND.
    Можно и без таблиц, но возня со всякими там делениями будет замедлять...

  11. #1089
    Member
    Регистрация
    18.07.2021
    Адрес
    г. Хмельницкий, Украина
    Сообщений
    99
    Спасибо Благодарностей отдано 
    10
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    23 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Можно, конечно. Особенно удобно, когда хочешь побитово, "по точкам" зажечь или погасить изображение на экране. Всего делов-то - сделать табличку в 49152 байта.
    По ссылке как раз вроде бы, как я понял, описывается генератор неповторяющихся последовательностей с настраиваемым периодом. Даже не генератор последовательностей, а, скорее, shuffle-процедура.

    https://spectrumcomputing.co.uk/foru...0ce7aa#p140188
    https://worldofspectrum.org/forums/d...omment_1013871
    Последний раз редактировалось 0xDEAD; 08.04.2024 в 15:50.
    программирование сильно возрастает!
    https://zx-pk.ru/threads/474-deb-ass...ull=1#post7841

  12. #1090
    Veteran Аватар для Destr
    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,802
    Спасибо Благодарностей отдано 
    249
    Спасибо Благодарностей получено 
    114
    Поблагодарили
    88 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от 0xDEAD Посмотреть сообщение
    когда хочешь побитово, "по точкам" зажечь или погасить изображение на экране
    Ну возми 16-битный RND (в том-же ZX-Ревю) и вперёд!
    Вызываешь, получаешь двухбайтное "случайное" значение, один байт это X второй Y, смотришь что там у тебя в картинке - если бит включен - соотв. включаешь его на экране. Повторить 65536 раз и в результате переберутся все возможные координаты и картинка проявится. Конечно если Y>192 то просто пропускается эта точка. Все нормальные генераторы пробегаются по всем коордам достаточно рандомно и попадают туда где уже были только спустя 65536 итераций (ну если 16-ти битный).
    Я на таком делал:
    Код:
    ; zx-review 3-4 1997
    ; http://zxpress.ru/article.php?id=1010
    RND_32	LD HL,(SEED)
    	CALL RND
    RND	LD A,H:ADD HL,HL:XOR H
    	ADD HL,HL,HL,HL,HL,HL:XOR H
    	ADD HL,HL,HL,HL:XOR H:ADD HL,HL,HL,HL
    	LD L,A:LD (SEED),HL
    	RET
    SEED	DEFW #FFFF	; НЕ НОЛЬ!

Страница 109 из 110 ПерваяПервая ... 105106107108109110 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •