Генерация случайного числа в заданном диапазоне.

Обсуждение программ nnCron и nnCron LITE

Re: Генерация случайного числа в заданном диапазоне.

Postby VoidVolker » Sun, 20 Dec 2015, 21:51

Какой цикл?
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Генерация случайного числа в заданном диапазоне.

Postby Aveiro » Sun, 20 Dec 2015, 22:07

Aveiro wrote:Теперь нужно "зациклить" решение с возможностью выйти в любой момент..

Задача:
Code: Select all
----
6. Снова эти пять чисел (Но уже без ввода, они вводились в самом начале)
7. 4 числа, 3 , 2, 1,.....5,4,3,2,1....5....


nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Генерация случайного числа в заданном диапазоне.

Postby VoidVolker » Mon, 21 Dec 2015, 12:23

Code: Select all
#( Задача_122321122015
NoActive
SingleInstance
Action:

    0
    100 0 DO PAUSE: 200
        WIN-INPUT-TEXT: "TEST" "Введите число" "1" 120 0=   
        IF
            S>NUM SWAP 1+
        ELSE
            LEAVE                                                         \ выход из цикла, если число больше не вводилось
        THEN
    LOOP

    DUP 0= IF DROP EXIT THEN
   
    10 0 DO
        >R
        1 R@ DO
            I RANDOM ROLL
            FILE-EXIST: "D:\SYSTEM\CONTROL\STOP.flag" IF
                LEAVE
            ELSE
                DUP . \ <...полезный код...>
            THEN
        -1 +LOOP
        R>
    LOOP
   
    0 DO DROP LOOP

)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Генерация случайного числа в заданном диапазоне.

Postby Aveiro » Mon, 21 Dec 2015, 21:35

Введенные числа после прохода первого цикла куда то делись...
Code: Select all
#( Задача_122321122015
NoActive
SingleInstance
VARIABLE VAR_NUMBER_AUTO_POSTING_NUMBERS
Action:

    0
    100 0 DO PAUSE: 200
        WIN-INPUT-TEXT: "TEST" "Введите число" "1" 120 0=   
        IF
            S>NUM SWAP 1+
        ELSE
            LEAVE                                                         \ выход из цикла, если число больше не вводилось
        THEN
    LOOP

    DUP 0= IF DROP EXIT THEN
   
    10 0 DO
        >R
        1 R@ DO
            I RANDOM ROLL VAR_NUMBER_AUTO_POSTING_NUMBERS !                            \ --> запись в переменную числа из ранее заданных выбранного случайным образом
           BALLOON: "Внимание" "%VAR_NUMBER_AUTO_POSTING_NUMBERS @% - номер."
            PAUSE: 3000
            FILE-EXIST: "D:\SYSTEM\CONTROL\STOP.flag" IF
                LEAVE
            ELSE
                DUP . \ <...полезный код...>
            THEN
        -1 +LOOP
        R>
    LOOP
   
    0 DO DROP LOOP

)#
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Генерация случайного числа в заданном диапазоне.

Postby VoidVolker » Mon, 21 Dec 2015, 23:37

Вот сюда они и делись, по очереди:
Code: Select all
VAR_NUMBER_AUTO_POSTING_NUMBERS !

Вот это как бы не просто так написано:
Code: Select all
DUP . \ <...полезный код...>

В данном случае полезный код — это вывод числа в консоль. Тут надо заменить точку на нужный код.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Генерация случайного числа в заданном диапазоне.

Postby Aveiro » Tue, 22 Dec 2015, 01:02

Да, начало получаться когда вставил код где точка.
Но алгоритм не работает как надо, числа сейчас повторяются, а нужно: :(

Задача:
Code: Select all
----------
2. Случайным образом из этих чисел выбирается одно, и количество чисел становится на одно меньше (выбранное число больше не участвует в цикле)...
---------


Code: Select all
#( Задача_122321122015
NoActive
SingleInstance
VARIABLE VAR_NUMBER_AUTO_POSTING_NUMBERS
Action:

    0
    100 0 DO PAUSE: 200
        WIN-INPUT-TEXT: "TEST" "Введите число" "1" 120 0=   
        IF
            S>NUM SWAP 1+
        ELSE
            LEAVE                                                         \ выход из цикла, если число больше не вводилось
        THEN
    LOOP

    DUP 0= IF DROP EXIT THEN
   
    10 0 DO
        >R
        1 R@ DO
            I RANDOM ROLL
            FILE-EXIST: "D:\SYSTEM\CONTROL\STOP.flag" IF
                LEAVE
            ELSE
                DUP
                VAR_NUMBER_AUTO_POSTING_NUMBERS !
               MSG: "%VAR_NUMBER_AUTO_POSTING_NUMBERS @% - номер."
            THEN
        -1 +LOOP
        R>
    LOOP
   
    0 DO DROP LOOP

)#
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Генерация случайного числа в заданном диапазоне.

Postby VoidVolker » Tue, 22 Dec 2015, 02:08

Code: Select all

#( Задача_020822122015
NoActive
SingleInstance
Action:

    0
    5 0 DO PAUSE: 200
        WIN-INPUT-TEXT: "TEST" "Введите число" "1" 120 0=   
        IF
            S>NUM SWAP 1+
        ELSE
            LEAVE                                                         \ выход из цикла, если число больше не вводилось
        THEN
    LOOP

    DUP 0= IF DROP EXIT THEN
   
   
    5 0 DO
       
        1000 RANDOM 10 + 0 DO \ 10-1000 раундов перемешивания
            DUP >R
            0 DO \ Перемешивание всех чисел на стеке
                I 1+    \ 0 - нельзя
                RANDOM ROLL
            LOOP
            R>
        LOOP
       
        DUP >R
        0 DO    \ Проходим по очереди по всем числам на стеке
            FILE-EXIST: "D:\SYSTEM\CONTROL\STOP.flag"
            IF
                LEAVE
            ELSE
                I ROLL DUP
                . \ <-- используем число
            THEN
        LOOP CR
       
        R>
    LOOP
   
    0 DO DROP LOOP  \ Очищаем стек

)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Генерация случайного числа в заданном диапазоне.

Postby Aveiro » Tue, 22 Dec 2015, 18:46

Ура ! Работает как надо, спасибо большое ! :rock:
Я бы точно начал записывать в какие-то массивы, ячейки и затем пытался адресно выдергивать значения. :rolleyes:
--------------------------------
Не сочтите за назойливость, просто нужные задачи... Последний вопрос, все тоже самое,вводятся числа,НО перебираются они не случайным образом а по порядку. Что изменится в коде ?
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Генерация случайного числа в заданном диапазоне.

Postby VoidVolker » Tue, 22 Dec 2015, 19:51

Исчезнет цикл по по перемешиванию:
Code: Select all
        1000 RANDOM 10 + 0 DO \ 10-1000 раундов перемешивания
            DUP >R
            0 DO \ Перемешивание всех чисел на стеке
                I 1+    \ 0 - нельзя
                RANDOM ROLL
            LOOP
            R>
        LOOP
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Генерация случайного числа в заданном диапазоне.

Postby Aveiro » Wed, 23 Dec 2015, 16:54

Цикл убрал, ввожу числа по порядку:
Code: Select all
1 2 3 4 5


В результате получаю такой перебор чисел:
Code: Select all
5 4 3 2 1.. 1 2 3 4 5..5 4 3 2 1 и т.д


А как получить ?
Code: Select all
1 2 3 4 5.. 1 2 3 4 5..


А так все работает.
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Генерация случайного числа в заданном диапазоне.

Postby VoidVolker » Wed, 23 Dec 2015, 17:30

Code: Select all
#( Задача_020822122015
NoActive
SingleInstance
Action:

    0
    5 0 DO PAUSE: 200
        WIN-INPUT-TEXT: "TEST" "Введите число" "1" 120 0=   
        IF
            S>NUM SWAP 1+
        ELSE
            LEAVE                                                         \ выход из цикла, если число больше не вводилось
        THEN
    LOOP

    DUP 0= IF DROP EXIT THEN
   
   
    5 0 DO
       
        1000 RANDOM 10 + 0 DO \ 10-1000 раундов перемешивания
            DUP >R
            0 DO \ Перемешивание всех чисел на стеке
                I 1+    \ 0 - нельзя
                RANDOM ROLL
            LOOP
            R>
        LOOP
       
        DUP >R 0 DO \ Инверсия чисел на стеке
                I ROLL
        LOOP R>

        DUP >R
        0 DO    \ Проходим по очереди по всем числам на стеке
            FILE-EXIST: "D:\SYSTEM\CONTROL\STOP.flag"
            IF
                LEAVE
            ELSE
                I ROLL DUP
                . \ <-- используем число
            THEN
        LOOP
       
        R>
    LOOP
   
    0 DO DROP LOOP  \ Очищаем стек

)#
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Генерация случайного числа в заданном диапазоне.

Postby Aveiro » Wed, 23 Dec 2015, 18:14

Что- то не работает код, одно и тоже число... :(

Code: Select all
#( Задача_020822122015
NoActive
SingleInstance
VARIABLE Var_1
Action:

    0
    5 0 DO PAUSE: 200
        WIN-INPUT-TEXT: "TEST" "Введите число" "1" 120 0=   
        IF
            S>NUM SWAP 1+
        ELSE
            LEAVE                                                         \ выход из цикла, если число больше не вводилось
        THEN
    LOOP

    DUP 0= IF DROP EXIT THEN
   
   
    5 0 DO
       
        1000 RANDOM 10 + 0 DO \ 10-1000 раундов перемешивания
            DUP >R
            0 DO \ Перемешивание всех чисел на стеке
                I 1+    \ 0 - нельзя
                RANDOM ROLL
            LOOP
            R>
        LOOP
       
        DUP >R 0 DO \ Инверсия чисел на стеке
                I ROLL DUP
        LOOP R>

        DUP >R
        0 DO    \ Проходим по очереди по всем числам на стеке
            FILE-EXIST: "D:\SYSTEM\CONTROL\STOP.flag"
            IF
                LEAVE
            ELSE
                I ROLL DUP
            Var_1 !
                MSG: "%Var_1 @%"
            THEN
        LOOP
       
        R>
    LOOP
   
    0 DO DROP LOOP  \ Очищаем стек

)#
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Генерация случайного числа в заданном диапазоне.

Postby VoidVolker » Wed, 23 Dec 2015, 18:33

DUP лишний остался — исправил.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Генерация случайного числа в заданном диапазоне.

Postby Aveiro » Wed, 23 Dec 2015, 18:57

Отлично ! Все работает. Спасибо. :)

С наступающими Вас праздниками и всего наилучшешего в Новом году :!:
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

Re: Генерация случайного числа в заданном диапазоне.

Postby Aveiro » Thu, 31 Dec 2015, 07:05

Посмотрите пожалуйста где ошибка.
Задумка такая...Есть разделение на ручной и автоматический ввод данных.
При автоматическом вводе: В блокноте написаны в столбик числа, в конце написано слово STOP

Code: Select all
1
5
334
4356
stop


В цикле по очереди копируем в буфер обмена, сравниваем со словом Stop , если не совпало кладем на стек.
Совпало со Stop выходим.

При ручном вводе вводимые числа просто кладем на стек.

Code: Select all
#( Clipboard_1                                                                     
SingleInstance
NoLog                                                             
NoActive
Action:
4 S" Number" DROP S" Будет АВТО_ВВОД данных ?" DROP 0 MessageBoxA
6 =                                                                           
IF                                                                    \ автоматический ввод (занесение в буфер обмена, затем в стек)
    0
   100 0 DO PAUSE: 2000
        WIN-EXIST: "* — Блокнот" WIN-HWND VISIBLE? AND
       IF
           WIN-SEND-KEYS: "* — Блокнот" "^c{DOWN}+({END}){END}+({HOME})"          \ копирование строки в буфер обмена -->
            S" %CLIPBOARD%" EVAL-SUBST S" /(STOP)|(Stop)|(stop)|(СТОП)|(Стоп)|(стоп)/" RE-MATCH    \ --> сравнение текста со словом Stop
            IF                                                                     
                LEAVE                                                \ появилось слово Stop --> вышли из задачи
            ELSE
             CLIPBOARD S>NUM SWAP 1+                              \ Правильно или нет ? Значение буфера надо положить на стек
           THEN
        THEN
    LOOP
ELSE                                                                 \ ручной ввод данных в окно
    0
    100 0 DO PAUSE: 200
        WIN-INPUT-TEXT: "Number" "ВВЕДИТЕ НОМЕР" "Номер" 120 0=   
        IF
            S>NUM SWAP 1+
       ELSE
            LEAVE                                                                 
        THEN
      DUP 0= IF DROP EXIT THEN
    LOOP
THEN
)#


Выдается ошибка. В стеке почему-то одно и тоже значение. Может что-то очистить надо ?
nncron.exe v 1.93b15 Build 1177 08.02.2016
tm.exe v 1.93b15 Build 604 08.02.2016
Aveiro
 
Posts: 222
Joined: Tue, 06 Jul 2010, 21:19

PreviousNext

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Google [Bot] and 3 guests

cron