Тема: генератор случайных чисел ОЧЕНЬ НУЖЕН

нужна программка которая автоматом бы генерировала ряд случайных чисел с казанием от и до и вставляла их в однострочные, многострочные поля и аттрибуты блока.
при этом раннее введеный текст попросту заменялся бы этим числом.
так же она должна спрашивать ставить знак перед числом или нет. если ДА то "минус и плюс" ставятся.

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

Недавно была похожая тема в VBA:
https://www.caduser.ru/forum/topic37741.html

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

> Grigarash
Поиск 1
Поиск 2

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

https://www.caduser.ru/forum/topic32552.html
http://autolisp.ru/dwlsp/22

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

(defun vk_RandNum (/ modulus multiplier increment random)
  (if (not *seed*)
    (setq *seed* (getvar "DATE"))
  )
  (setq  modulus     65536
  multiplier 25173
  increment  13849
  *seed*     (rem (+ (* multiplier *seed*) increment) modulus)
  random     (/ *seed* modulus)
  )
)
(defun c:tr (/ From To Diff SS Ent +Sign Num)
  (initget 0)
  (setq From (getint "From: "))
  (while (progn (initget 0) (not (> (setq To (getint "To: ")) From)))
  )
  (setq  +Sign (if (< From 0)
    "+"
    ""
        )
  )
  (setq Diff (- To From))
  (while (setq SS (ssget ":S" (list (cons 0 "TEXT"))))
    (setq Num (- To (atoi (rtos (* Diff (vk_RandNum)) 2 0))))
    (setq Ent (entget (ssname SS 0)))
    (entmod
      (subst
  (cons 1
        (if (<= Num 0)
    (itoa Num)
    (strcat +Sign (itoa Num))
        )
  )
  (assoc 1 Ent)
  Ent
      )
    )
  )
  (princ)
)

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

Эту програмку писали мне здесь же. За что большое спасибо авторам...
Как пользоваться...
Расставляешь текст в тех местах где он тебе нужен... Например я ставлю все нули. Запускаешь лисп. Он срашивает сначала минимальное число, потом максимальное. И счелкаешь на свой текст - он волшебным образом превращается в случайное число.
Если воодишь диапазон чисел со знаками, то программа автоматом подставляет знаки + и -. Если без знаков, то результат тоже будет без знаков.
Очень удобно...

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

Прога не работает в 2008 пишет что-то про SSGET

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

> Grigarash
Попробуй эту строчку

(while (setq SS (ssget ":S" (list (cons 0 "TEXT"))))

Записать так

(while (setq SS (ssget "[b]_:S[/b]" (list (cons 0 "TEXT"))))

Еще генератор случайных чисел есть здесь
http://dwg.ru/f/showthread.php?p=218772

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

У меня работает под 2008... проверь - может что нить не так делаешь??? (вызывается комбинацией tr)

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

спасибо VVA
по твоему совету все заработало
а не подскажешь как сделать чтобы значения менялись во всех выделенных объектах
а то приходится каждый по отдельности выделять

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

> Grigarash

;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * _dwgru-random
;;; *
;;;  На основе vk_RandNum
;;;  https://www.caduser.ru/forum/topic32763.html
;;; *
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun _dwgru-random (/ modulus multiplier increment)
;;; Генерирует случайное вещественное число в диапазоне от 0 до 1
;;; Используется глобальная переменная *DWGRU_SEED*
  (if (not *DWGRU_SEED*)
    (setq *DWGRU_SEED* (getvar "DATE"))
  )
  (setq  modulus     65536
  multiplier 25173
  increment  13849
  *DWGRU_SEED*     (rem (+ (* multiplier *DWGRU_SEED*) increment) modulus))
  (/ *DWGRU_SEED* modulus)
)
;;; ************************************************************************
;;; * Библиотека DWGruLispLib Copyright ©2007  DWGru Programmers Group
;;; *
;;; * dwgru-random-range
;;; *
;;; *http://dwg.ru/f/showthread.php?p=218772
;;; *
;;; * 07/12/2007 Версия 0001.  Редакция Владимир Азарко (VVA)
;;; ************************************************************************
(defun dwgru-random-range (Minnum Maxnum )
;;; Генерирует случайное число из указанного диапазона целых чисел
;;; Использует функцию библиотеки
    ;;;                 _dwgru-random
    ;;; Параметры:
    ;;; Minnum - минимальное целое число
    ;;; Maxnum - максимальное целое число
    ;;; Возврат:
    ;;;   целое число из указанного диапазона
    ;;; Пример:
  ;|
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 3
  (DWGRU-NUM-RANDOM-RANGE 1 15) ;_Результат 10
  |;
;(- Maxnum (atoi (rtos (* (- Maxnum Minnum) (_dwgru-num-random)) 2 0))) ;_Comment VVA 07.12.2007 Было так
(- Maxnum (fix (* (- Maxnum Minnum) (_dwgru-random)))) ;_Add VVA 07.12.2007 Так наверное быстрее
)
;;Text Random number
;;https://www.caduser.ru/forum/topic37867.html
(defun c:TR (/ From To SS Ent Num i)
(initget 1)
(setq From (getint "Укажите диапазон. Минимум: "))
(while
  (progn
    (initget 1)
    (not (> (setq To (getint "Укажите диапазон. Максимум: ")) From))
    )
)
(and
(setq SS (ssget "_:L" '((0 . "*TEXT"))))
(repeat (setq i (sslength SS)) ;_ end setq
  (setq Ent (entget (ssname SS (setq i (1- i)))))
  (setq Num (dwgru-random-range From To))
  (entmod (subst (cons 1 (if (<= Num 0)(itoa Num)
                           (strcat "+" (itoa Num))))
                 (assoc 1 Ent)
                 Ent
                 )
          )
 ) ;_ end repeat
)
(princ)
)

Re: генератор случайных чисел ОЧЕНЬ НУЖЕН

VVA
ну все отлично работает спасибо большое.
маленький вопросик, как теперь это сделать чтобы текст еще в мультивыноске и аттрибутах блока менялся?
лучше оставить старый код:

(defun vk_RandNum (/ modulus multiplier increment random)
(if (not *seed*)
(setq *seed* (getvar "DATE"))
)
(setq modulus 65536
multiplier 25173
increment 13849
*seed* (rem (+ (* multiplier *seed*) increment) modulus)
random (/ *seed* modulus)
)
)
(defun c:tr (/ From To Diff SS Ent +Sign Num)
(initget 0)
(setq From (getint "From: "))
(while (progn (initget 0) (not (> (setq To (getint "To: ")) From)))
)
(setq +Sign (if (< From 0)
"+"
""
)
)
(setq Diff (- To From))
(while (setq SS (ssget "_:S" (list (cons 0 "*TEXT"))))
(setq Num (- To (atoi (rtos (* Diff (vk_RandNum)) 2 0))))
(setq Ent (entget (ssname SS 0)))
(entmod
(subst
(cons 1
(if (<= Num 0)
(itoa Num)
(strcat +Sign (itoa Num))
)
)
(assoc 1 Ent)
Ent
)
)
)
(princ)
)