刘炎华 发表于 2021-5-22 18:35:31

求助,公式计算

如图片所示,不知道能不能实现...请大家帮我看下


vitalgg 发表于 2021-5-22 18:35:32

本帖最后由 vitalgg 于 2021-5-22 20:19 编辑

没有做 0 除检查 和 R0 /= Rt 检查 ,自己加吧。 顺便 推广一下 @lisp:   http://atlisp.cn

(defun ktr0rt:dialog (/ dcl_fp dcl-tmp dcl_id ktr0rt:cal)
(defun ktr0rt:cal (/ k t1 r0 rt res)
    (setq k (read (get_tile "K")))
    (setq t1 (read (get_tile "t")))
    (setq r0 (read (get_tile "R0")))
    (setq rt (read (get_tile "Rt")))
    (if k (setq k (float k)))
    (if t1 (setq t1 (float t1)))
    (if r0 (setq r0 (float r0)))
    (if rt (setq rt (float rt)))
    (cond   ((or (= 0 r0)(= 0 rt)(= 0 t1))       (alert "R0 Rt t不能为 0"))
      ((and (null k)
            (numberp t1)
            (numberp r0)
            (numberp rt))
       (set_tile "K"(rtos (* t1 (- (/ 1 rt)(/ 1 r0))) 2 5)))
      ((and (numberpk)
            (null t1)
            (numberp r0)
            (numberp rt))
       (set_tile "t" (rtos (/ k (- (/ 1 rt)(/ 1 r0))) 2 2)))
      ((and (numberp k)
            (numberp t1)
            (null r0)
            (numberp rt))
       (set_tile "R0" (rtos (/ 1 (- (/ 1 rt) (/ k t1))) 2 2)))
      ((and (numberp k)
            (numberp t1)
            (numberp r0)
            (null rt))
       (set_tile "Rt" (rtos (/ 1 (+ (/ 1 r0) (/ k t1))) 2 2)))   (t (alert "数据不全或太全。"))
      ))

(progn
    (setq dcl-tmp (strcat (getenv "temp") "\\" "tmp-ktr0rt.dcl" ))
    (setq dcl_fp (open dcl-tmp "w"))
    (write-line (strcat "panel : dialog {"
                        "label = \"Calc\"; "
                        ":row{"
                        ": edit_box { key=\"K\";label=\"K\";}"
                        ": edit_box { key=\"t\";label=\"t\";}"
                        ": edit_box { key=\"R0\";label=\"R0\";}"
                        ": edit_box { key=\"Rt\";label=\"Rt\";}"
                        ": button { key=\"calc\";label=\"Cal\";}"
                        "}ok_cancel;}")
                        dcl_fp)
    (close dcl_fp))
(setq dcl_id (load_dialog dcl-tmp))
(if (not (new_dialog "panel" dcl_id))
      (exit))
(action_tile "calc" "(ktr0rt:cal)")
(start_dialog)
(unload_dialog dcl_id)
(vl-file-delete dcl-tmp))
(defun C:tt ()(ktr0rt:dialog))


xj6019 发表于 2021-5-22 22:07:10

vitalgg 发表于 2021-5-22 19:55
没有做 0 除检查 和 R0 /= Rt 检查 ,自己加吧。 顺便 推广一下 @lisp:   http://atlisp.cn

这里一个高手!支持@lisp
页: [1]
查看完整版本: 求助,公式计算