Тема: Замена имеющегося числа - случайным

Суть задачи проста.
На чертеже имеются числа расставленые в нужном порядке, каждая на своем месте.
Нужна программка которая:
- спросила диапазон чисел (например: максимум +20 и минимум -20);
- спросила подставлять ли знак перед числом "+/-" (просто если все числа будут от 0 до 20, то знак + не нужен);
- при щелчке мыши на число на чертеже заменяла его случайным из указанного выше диапазона... Стиль отается первоначального текста... Местоположение на чертеже то же.
- Заканчивала работу скажем по двойному щелчку мыши
Например:
Диапазон от: -20 до +20
ставим +/- - Y
первоначальный текст:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
после работы:
+1 +2 -3 -15 +20 -7
-3 +4 +8 -10 -11 +15
-6 +3 +4 +8  -2  0
ИЛИ
Диапазон от: 0 до +20
ставим +/- - N
первоначальный текст:
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
после работы:
1 2 3 15 20 7
3 4 8 10 11 15
6 3 4 8  2  0

Re: Замена имеющегося числа - случайным

извините если Баяню... искал по форуму, похожие с генератором случайных чисел темы есть, но поскольку полный ноль в Лиспе - как это дело переделать под себя просто не знаю..

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 vk_EntNumSubst (/ From To Diff SS Ent)
  (initget 0)
  (setq From (getint "From: "))
  (while (progn (initget 0) (not (> (setq To (getint "To: ")) From)))
  )
  (setq Diff (- To From))
  (while (setq SS (ssget ":S" (list (cons 0 "TEXT"))))
    (setq Ent (entget (ssname SS 0)))
    (entmod
      (subst (cons 1
           (vl-princ-to-string
             (- To (atoi (rtos (* Diff (vk_RandNum)) 2 0)))
           )
         )
         (assoc 1 Ent)
         Ent
      )
    )
  )
  (princ)
)

Re: Замена имеющегося числа - случайным

переделал что бы "+" ставило, когда надо

(defun vk_EntNumSubst (/ 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: Замена имеющегося числа - случайным

так объясните плиз как сие чудо запускать надо
а то я ноль в таких вещах
аа такая програмка мне ой как пригодится (на исполняшки)