Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите изменить вычисления в макросе

Помогите изменить вычисления в макросе

Ответ
Поиск в этой теме
Непрочитано 09.10.2009, 09:48 #1
Помогите изменить вычисления в макросе
Малявка
 
Егорьевск Моск.обл.
Регистрация: 28.02.2007
Сообщений: 206

Здравствуйте!
Пользуюсь макросом, суммирующим числа, уже пару лет. Замечательный! Спасибо мастерам от ЛИСПа, ведь это они написали мне макрос на этом форуме.

Код:
[Выделить все]
(defun c:sum ()
  (print
    "Выберите текстовые объекты среди которых
будет произведененна калькуляция"
  )
  (print
    (strcat
      "Сумма = "
      (rtos
  (apply
    (function +)
    (mapcar
      (function
        (lambda (a)
    (atof
      (vl-string-subst "." "," (cdr (assoc 1 (entget a)))))))
      (vl-remove-if
        (function listp)
        (mapcar (function cadr)
          (ssnamex (ssget '((0 . "TEXT,MTEXT")))))))))))
  (princ))
Сейчас есть необходимость изменить вычисления, помогите пожалуйста!
Нужно, набрав команду в ком.строке и получив приглашение выбрать числа, выбрать четыре числа и нажать ВВОД. А макрос должен не только суммировать эти четыре числа, но затем поделить сумму на четыре и умножить частное от деления на сто. Результат выдать в ком.строке.
Пыталась сама корячиться, да не выходит. Что взять с блондинки от автокада?
Мне такая фенька нужна для оформления картограммы земляных масс. Да, да, всё еще делаем "ручками", без привлечения Геониксов и Сивилов, увы.
Помогите пожалуйста.
Спасибо.
p.s. А лучше того, сделайте так, чтобы макрос делил сумму на количество выделенных чисел. Пригодится для вычислений среднего значения не только четырех чисел, а любого количества

Последний раз редактировалось Малявка, 09.10.2009 в 10:13. Причина: Благодарность админу: Спасибо за форматирование поста!
Просмотров: 4230
 
Непрочитано 09.10.2009, 10:53
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Ну, вот, например:
Код:
[Выделить все]
 
;******* SUM_N.LSP **********
; Сумма числовых значений и вычисление среднего.
; В.В. Громов.
(defun C:SUM_N ( / echo ss1 ss ssn1 pp pp1 n ssn e et text sum summ summa sred)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq ss1 (ssget)) 
(setq ss (ssadd)) ;Набор СОЗДАН (пустой пока)
(setq ssn1 (sslength ss1) n 0) ;Количество примитивов
(repeat ssn1
(setq pp (ssname ss1 n)) ;Имена примитивов
(setq pp1 (entget pp)) ;Данные примитива с именем pp
(cond
((= (cdr (assoc '0 pp1)) "TEXT") (ssadd pp ss) ;Набор ТЕКСТОВ
))
(setq n (+ n 1))
)
(if ss (progn
(setq ssn (sslength ss) n 0)
(repeat ssn
(setq e (ssname ss n))
(setq et (entget e))
(setq text (cdr (assoc '1 et)))
(setq text (vl-string-trim "%U" text))
(princ "\n Число ")(princ n)(princ ": ")(princ text)
(setq sum (cons (atof text) sum))
(setq n (+ n 1))
)
))
(princ "\n Количество объектов: ") (princ ssn)
(setq summ (apply '+ sum))
(setq summa (strcat " Сумма чисел = " (rtos summ)))
(princ summa)
(setq sred (/ summ ssn))
(princ "\n Среднее значение = ") (princ sred)
(setq sred (* sred 100))
(princ "\n Среднее значение, умноженное на 100 = ") (princ sred)
(setvar "CMDECHO" echo)
(princ)
)
Profan вне форума  
 
Автор темы   Непрочитано 09.10.2009, 11:21
#3
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Огромное спасибо! Оно самое!
А если коснуться предложенного мной макроса, нельзя ли изменить одну строчку в нем (там, где знак суммы), чтобы вместо знака суммы вставить все действия? (Я так пыталась изменить макрос).
Малявка вне форума  
 
Непрочитано 09.10.2009, 11:53
#4
CB

Конструирование в области нефтеразведки
 
Регистрация: 10.02.2006
Гомель
Сообщений: 321


Код:
[Выделить все]
 
(defun c:sum1 (/ lst)
 (print
  "Выберите текстовые объекты среди которых
будет произведененна калькуляция"
 ) ;_  print
 (setq
  lst (mapcar
       (function
        (lambda (a)
         (atof (vl-string-subst "."
                                ","
                                (cdr (assoc 1 (entget a)))
               ) ;_  vl-string-subst
         ) ;_  atof
        ) ;_  lambda
       ) ;_  function
       (vl-remove-if
        (function listp)
        (mapcar (function cadr)
                (ssnamex (ssget '((0 . "TEXT,MTEXT"))))
        ) ;_  mapcar
       ) ;_  vl-remove-if
      ) ;_  mapcar
 ) ;_  setq
 (print
  (strcat "Среднее значение чисел = "
          (rtos (/ (apply (function +) lst) (length lst)))
  ) ;_  strcat
 ) ;_  print
 (princ)
) ;_  defun
CB вне форума  
 
Автор темы   Непрочитано 09.10.2009, 11:56
#5
Малявка


 
Регистрация: 28.02.2007
Егорьевск Моск.обл.
Сообщений: 206


Спасибо!
Малявка вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Помогите изменить вычисления в макросе

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите pls узнать стоимость полного проекта (стадия AC) при реконструкции в г. Москве SSSerge Прочее. Отраслевые разделы 1 24.07.2009 13:23
Помогите настроить угловые еденицы измерения vall AutoCAD 8 27.08.2008 00:47
Как изменить n! лисп? Jоhnny LISP 25 11.01.2008 15:15
Помогите умным советом... Agens Программирование 43 30.12.2007 10:43
Как изменить разрешение растрового изображения? luin AutoCAD 4 10.04.2006 22:49