На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
  
> Генерация случайных чисел
    Тут вдруг захотелось сделать генератор (псевдо)случайных чисел.
    Подумал, и понял, что абсолютно не знаю (даже не представляю), КАК заставить комп выбрать случайное число, например, в промежутке от 0 до 10...  
    Но от этого стало еще интереснее...  
    Мож кто знает алгоритм генератора случ. чисел?..
    или какие-нить мысли?..

      Идешь в Паскаль, в поиске набираешь "случайные числа"
        "...Извините, ничего похожего не найдено..."  :'(
          Вот пару способов:
          ExpandedWrap disabled
            imul    ax,9421<br>inc     ax
          Результат - AX

          ExpandedWrap disabled
            in      ax,40h<br>add     al,ah <br>add     al,Rnd<br>mov     Rnd,al
          Результат - AL (Rnd - переменная)
          Сообщение отредактировано: 7in -
            Цитата M0l0t, 04.05.02, 18:54:37
            "...Извините, ничего похожего не найдено..."  :'(
            Та нииии!
            Не в форуме поиск, а на сайте паскальном!
            Взгляни наверх! Разделы сайта -> Pascal
            Вот там надо искать!
              :) Ну допустим системное время в миллисекундах, прошедшее с 0:00 1 января 1970
                ideal
                codeseg
                proc rnd
                dataseg
                @@rnd      db "aaaaaaaaaaaaaaaaaa"       ; длина строки ограничена моделью памяти  
                ; и здравым смыслом :-)
                ; начальное значение не должно быть нулем!
                c=$-@@rnd
                @@cnt     dw c
                @@br1        db 1h
                @@br2     db 1000000b
                codeseg
                     lea di,[@@rnd]
                     mov bx,[@@cnt]
                     mov cx,[word ptr @@br1]
                     and cl,[byte ptr @@rnd+bx-1]
                     jz @@test
                     and ch,[byte ptr @@rnd]
                     jnz @@Reset
                     jmp @@Set
                @@test:       
                     and ch,[byte ptr @@rnd]
                     jz @@Reset      
                @@Set:
                     stc
                @@Reset:   
                     rcl [@@rnd+bx-1],1
                     rcr dx,1
                     dec bx
                     rcl dx,1
                     jnz @@Reset
                @@Exit:
                     ret      
                endp

                Сообщение отредактировано: Zzzaraza -
                  Н-да, нас, помнится, целый семестр учили данному вопросу, вспоминаются всякие страшные слова. типа "аддитивный метод", "мультипликативный метод", метод Неймана и т.д. Но единственное, что могу щас всплмнить, из простого - берется стартовое двухзначное число, возводится в квадрат. Это - первое случайное число. Далее из него берутся две средние цифры (т.е. из 2564 - берется 56) и опять возводится в квадрат - получается второе. Получается довольно равномерное распределение, конечно, не как с теплового датчика в Пентиуме 4, но тоже ничего. Самый простой способ, IMHO.
                    Было бы разумно верить (но только ВЕРИТЬ, конкретных данных нет!), что наиболее качественные случайные числа из всего того, что у же есть в компе и не надо писать самому дает Win32API CryptGenRandom(), которая fills a buffer with cryptographically random bytes (MSDN). Так что если кому не хило инициализировать CryptoAPI, это наверно самый качественный источник случайных чисел в компе. Если у кого есть ссылки, насколько случайна CryptGenRandom(), буду примного благодарен!  

                    Это не плагиат, это я сам написал в Программном форуме! А вот очень интересно - как выяснить, стоит ли в моем компе хардверный генератор случайных чисел? Я в названиях чипов ничего не понимаю...
                      Таких алгоритмов несчетное множество, но главное чтобы они удовлетворяли двум критериям:
                      1. Чтобы период генератора был как можно больше. Период - это количество генераций через которое генератор начинает повторяться.
                      2. Чтобы при прочих равных условиях генерация всегда начиналась с одного и того же числа. Иначе проги отлаживать тяжело.
                        Здесь я напишу свой приклад на языке Visual Basic, для World 2003, вот пример:

                        1.Этот код показывает чисто случайное число, и вводит в документа World случайное число от 30.

                        Sub RandTime()

                        Randomize Time * Rnd

                        a1 = Int(30 * Rnd)

                        Set o = ActiveDocument.Range
                        o.Move Unit:=wdParagraph
                        o.Text = " " & a1

                        End Sub

                        2.Перевести все числа в буквы. Некоторых букв нет, так как они не используются.

                        Sub NumberTranslit

                        Set MyRange = ActiveDocument.Content
                        With MyRange.Find
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "10"
                        .Replacement.Text = "й"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "11"
                        .Replacement.Text = "к"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "12"
                        .Replacement.Text = "л"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "13"
                        .Replacement.Text = "м"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "14"
                        .Replacement.Text = "н"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "15"
                        .Replacement.Text = "о"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "16"
                        .Replacement.Text = "п"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "17"
                        .Replacement.Text = "р"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "18"
                        .Replacement.Text = "с"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "19"
                        .Replacement.Text = "т"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "20"
                        .Replacement.Text = "у"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "21"
                        .Replacement.Text = "ф"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "22"
                        .Replacement.Text = "х"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "23"
                        .Replacement.Text = "ц"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "24"
                        .Replacement.Text = "ч"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "25"
                        .Replacement.Text = "ш"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "26"
                        .Replacement.Text = "щ"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "27"
                        .Replacement.Text = "ы"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "28"
                        .Replacement.Text = "ь"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "29"
                        .Replacement.Text = "ю"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "30"
                        .Replacement.Text = "я"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "0"
                        .Replacement.Text = " "
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "1"
                        .Replacement.Text = "а"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "2"
                        .Replacement.Text = "б"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "3"
                        .Replacement.Text = "в"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "4"
                        .Replacement.Text = "г"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "5"
                        .Replacement.Text = "д"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "6"
                        .Replacement.Text = "е"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "7"
                        .Replacement.Text = "ж"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "8"
                        .Replacement.Text = "з"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = "9"
                        .Replacement.Text = "и"
                        .Execute Replace:=wdReplaceAll
                        .ClearFormatting
                        .Replacement.ClearFormatting
                        .Text = " "
                        .Replacement.Text = ""
                        .Execute Replace:=wdReplaceAll
                        End With

                        End Sub

                        4.Все это вкидаем в этот код.

                        Sub PatchOfRandTime

                        RandTime
                        RandTime
                        RandTime

                        'Можна и больше RandTime

                        NumberTranslit

                        End PatchOfRandTime
                        Сообщение отредактировано: ОМО -
                          Дональд Кнут. Искусство программирования. Том 2
                          Там целая глава на эту тему
                            Вот даю ссылку, здесь в архиве есть шаблон для документа World 2003, скачайте Генератор Пророчеств.
                            Сообщение отредактировано: ОМО -
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0412 ]   [ 15 queries used ]   [ Generated: 29.03.24, 12:23 GMT ]