明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7514|回复: 3

【高手进】破解VLX不如先帮我破解LSP源码吧-我10年前写的命令行计算器程序

[复制链接]
发表于 2011-11-29 09:10 | 显示全部楼层 |阅读模式
本帖最后由 fawn_lgc 于 2011-11-29 10:17 编辑

我10年前现学现用写的命令行计算器程序,为计算型钢的重量而开发。
比如8#槽钢长度5*4+6*8m
输入C8(5*4+6*8)即可得出重量。
当然它也可以进行常规的科学计算。

后来发现有漏洞,输入2..7得到1.4的结果,它把2..7当成2.0*0.7计算了。
当我回过头想修改程序时,发现我已无法读懂该程序。

各位破解高手来帮我破解LSP原码。读读这个程序,帮我改掉这个漏洞。

  1. ;;;  Copyright (C) 2001 by FAWN, Inc.
  2. ;;;  小鹿软件版权所有.
  3. ;;;  钢料统计科学计算器.calculator'_calculator

  4. (defun c:cc ()
  5.   (c:calculator)
  6.   )
  7. (defun c:calculator (/ fawn datalist error frontlist y result oldresult
  8.           backlist CPleng myerror myerrorNum funclist run #myerror
  9.        arithmetic functions plank channel AngSteel column functions2 DBMS;;函数
  10.         listword block compute statmyerror inspect consDB letter DBS);;函数
  11. ;;;  (defun *myerror*(msg)
  12. ;;;    (if (and (/= msg "Function cancelled")(/= msg "函数被取消"))
  13. ;;;     (princ(strcat "Fawn警告:" msg "\n"))
  14. ;;;      )
  15. ;;;    (princ)
  16. ;;;    )

  17. (defun arithmetic(signname item1 item2)      ;;;四则运算
  18.   (cond ((= signname "+")(+ item1 item2))
  19.         ((= signname "-")(- item1 item2))
  20.   ((= signname "*")(* item1 item2))
  21.   ((= signname "/")(if (/= item2 0)(/ item1 item2)
  22.          (progn(statmyerror "除数为零")0)))
  23.   (T(statmyerror "四则运算程序逻辑错误")nil)     ;;过程监控
  24.   )
  25. )
  26. (defun functions (functionname item / deno)               ;;函数计算
  27.     (if (or(= functionname "SIN")(= functionname "COS")
  28.      (= functionname "TG")(= functionname "CTG"))
  29.       (setq item (* (/ item 180.0)pi)))
  30.   ;;;(setq aaa (sqrt(- 1.0 (expt (sin item) 2))))
  31.   
  32.     (cond ((= functionname "SIN")(sin item))
  33.     ((= functionname "COS")(cos item))
  34.     ((= functionname "TG")(setq deno (sqrt(- 1.0 (expt (sin item) 2))))
  35.       (if(=  deno 0)(statmyerror "tg90°不存在")
  36.         (/(sin item)(cos item))))
  37.     ((= functionname "CTG")(setq deno (sqrt(- 1.0 (expt (cos item) 2))))
  38.       (if(=  deno 0)(statmyerror "ctg0°不存在")
  39.         (/(cos item)(sin item))))
  40.     ((= functionname "ARCTG")(atan item))
  41.     ((= functionname "LN")(log item))
  42.     ((= functionname "LOG")(/(log item)(log 10.0)))
  43.     ((= functionname "SQRT")(sqrt item))
  44.     ((= functionname "D")(column item))
  45.     ((= functionname "C")(channel item))
  46.     ((= functionname "L")(AngSteel item))
  47.     ((= functionname "PL")(plank item))
  48.     )
  49. )
  50. (defun plank (item)   ;;钢板
  51.   (* item 7.85)
  52.   )
  53. (defun channel (item / channellist fawn)    ;;;槽钢函数
  54.   (setq fawn nil)
  55.   (setq channellist '(("5" 5.44)("6.3"6.63)("8"8.045)("10"10)("12.6"12.37)
  56.           ("14A"14.53)("14B"16.733)("16A"17.23)("16B"19.74)
  57.           ("18A"20.17)("18B"22.99)("20A"22.63)("20B"25.77)
  58.           ("22A"24.99)("22B"28.45)
  59.           ("25A"27.47)("25B"31.39)("25C"35.32)
  60.           ("28A"31.42)("28B"35.81)("28C"40.21)
  61.           ("32A"38.22)("32B"43.25)("32C"48.28)
  62.           ("36A"47.8)("36B"53.45)("36C"50.1)
  63.           ("40A"58.91)("40B"65.19)("40C"71.47)
  64.           )
  65.   )
  66.   (setq fawn (assoc item channellist))
  67.   (if (/= fawn nil)(setq fawn (cadr fawn))
  68.     (progn
  69.       (statmyerror "无此槽钢型号!可输入的槽钢型号有:
  70.                  \n5 6.3 8 10 12.6 14a 14b 16a 16b 18a 18b 20a 20b 22a 22b
  71.            \n25a 25b 25c 28a 28b 28c 32a 32b 32c 36a 36b 36c 40a 40b 40c")
  72.       (setq fawn 0)))
  73.   fawn
  74. )
  75. (defun AngSteel (item / Anglist fawn)     ;;角铁函数
  76.   (setq fawn nil)
  77.   (setq Anglist '(("2*3" 0.889)("2*4" 1.145)
  78.              ("2.5*3" 1.124)("2.5*4" 1.459)
  79.        ("3*3" 1.373) ("3*4"1.786)
  80.        ("3.6*3"1.656)("3.6*4"2.163)("3.6*5"2.654)
  81.        ("4*3"1.852)("4*4"2.422)("4*5"2.976)
  82.        ("4.5*3"2.088)("4.5*4"2.736)("4.5*5"3.369)("4.5*6"3.985)
  83.        ("5"3.770)("5*3"2.332)("5*4"3.059)("5*5"3.770)("5*6"4.465)
  84.        ("5.6*3"2.624)("5.6*4"3.446)("5.6*5"4.251)("5.6*8"6.568)
  85.        ("6.3"5.721)("6.3*4"3.907)("6.3*5"4.822)("6.3*6"5.721)("6.3*8"7.469)("6.3*10"9.151)
  86.        ("7*4"4.372)("7*5"5.397)("7*6"6.406)("7*7"7.398)("7*8"8.373)
  87.        ("7.5"6.905)("7.5*5"5.818)("7.5*6"6.905)("7.5*7"7.976)("7.5*8"9.030)("7.5*10"11.089)
  88.        ("8*5"6.211)("8*6"7.376)("8*7"8.525)("8*8"9.658)("8*10"11.874)
  89.        ("9*6"8.350)("9*7"9.656)("9*8"10.946)("9*10"13.476)("9*12"15.940)
  90.        ("10*6"9.366)("10*7"10.830)("10*8"12.276)("10*10"15.120)("10*12"17.898)("10*14"20.611)("10*16"23.257)
  91.        ("11*7"11.928)("11*8"13.532)("11*10"16.690)("11*12"19.782)("11*14"22.809)
  92.        ("12.5*8"15.504)("12.5*10"19.133)("12.5*12"22.696)("12.5*14"26.193)
  93.        ("14*10"21.488)("14*12"25.522)("14*14"29.490)("14*16"33.393)
  94.        ("16*10"24.729)("16*12"29.391)("16*14"38.987)("16*16"38.518)
  95.        ("18*12"33.159)("18*14"38.383)("18*16"43.542)("18*18"48.634)
  96.        ("20*14"42.894)("20*16"48.680)("20*18"54.401)("20*20"60.056)("20*24"71.168)
  97.        )
  98.   )
  99.   (setq fawn (assoc item Anglist))
  100.   (if (/= fawn nil)(setq fawn (cadr fawn))
  101.     (if #myerror
  102.       (progn(statmyerror "缺少#号")(setq fawn 0))
  103.       (progn(statmyerror "无此角铁型号!可输入的角铁型号有:
  104.       \n2*(3 4) 2.5*(3 4) 3*(3 4) 3.6*(3 4 5) 4*(3 4 5) 4.5*(3 4 5 6) 5*(3 4 5 6)
  105.       \n5.6*(4 5 6 8) 6.3*(4 5 6 8) 7*(4 5 6 7 8) 7.5*(5 6 7 8 10) 8*(5 6 7 8 10)
  106.       \n9*(6 7 8 10 12) 10*(6 7 8 10 12 14) 11*(7 8 10 12 14) 12.5*(8 10 12 14)
  107.       \n14*(10 12 14 16) 16*(10 12 14 16) 18*(12 14 16 18) 20*(14 16 18 20 24)")
  108.       (setq fawn 0))))
  109.   fawn
  110. )
  111.   
  112. (defun column(item / fawn residue abc)             ;;圆钢函数
  113.   (setq fawn(*(expt (/ item 2) 2) pi 7.85 0.001))
  114.   (if (< item 13)(setq abc 1000.0)
  115.                 (setq abc 100.0))
  116.   (setq fawn(* fawn abc))
  117.   (setq residue(rem fawn 1))
  118.   (setq fawn(fix fawn))
  119.   (if(>= residue 0.5)
  120.     (/ (1+ fawn) abc)
  121.     (/ fawn abc))
  122.   )
  123. (defun functions2 (Num func / residue)         ;;后置函数!
  124.   (setq fawn 1.0 lgc 1)
  125.   (setq residue(rem Num 1))
  126.   (if (and(> residue 0)(> Num 0.0))
  127.     (statmyerror "阶层的参数必须为正整数")
  128.     (if (= func "!")
  129.       (progn                   ;;未考虑实数错误问题
  130.         (repeat (1- (fix Num))
  131.           (setq lgc (1+ lgc))
  132.           (setq fawn(* fawn lgc))
  133.         )
  134.         fawn
  135.       )
  136.       (statmyerror "函数名不存在!!")  ;;过程监控
  137.     )
  138.   )
  139. )
  140. (defun DBMS (datalist / leng N search celllist Lindex Rindex)    ;;提取区间
  141.   (setq leng(length datalist))
  142.   (setq N 0 Lindex nil Rindex nil)
  143.   (setq search T)
  144.   (while (and search (<= N leng))
  145.     (setq celllist (nth N datalist))        ;;单元子列表
  146.     (setq datatype (car celllist))
  147.     (cond ((= datatype "Lbracket")(setq Lindex (1+ N)))
  148.     ((= datatype "Rbracket")(setq Rindex (1+ N) search nil)))
  149.     (setq N (1+ N))
  150.   )
  151.   (setq frontlist nil backlist nil)
  152.   (if (/= Rindex nil)
  153.     (progn
  154.       (repeat (1- Lindex)
  155.         (if(= frontlist nil)
  156.           (setq frontlist (list(car datalist))datalist (cdr datalist))
  157.           (setq frontlist(append frontlist (list(car datalist)))
  158.           datalist (cdr datalist))
  159.         )
  160.       )
  161.       (setq backlist (cdr datalist)CPleng (- Rindex Lindex 1))
  162.     )
  163.     (setq backlist datalist CPleng leng)
  164.   )
  165. )

  166. (defun listword(datalist M N)   ;;提取list M项的N项
  167.   (if (= N 1)
  168.     (car(nth (1- M) datalist))
  169.     (cadr(nth (1- M) datalist))
  170.   )
  171. )
  172. (defun block ( / signname signname2 a b depot addminus)     ;;区间计算
  173.   (setq addminus nil depot nil)
  174.   (setq a(compute))
  175.   (while (and(/= CPleng 0)(= myerror ""))
  176.     (setq signname (listword backlist 1 2))
  177.     (setq backlist (cdr backlist) CPleng (1- CPleng))
  178.     (if (or(= signname "+")(= signname "-"))(setq addminus T)(setq addminus nil))
  179.     (setq b(compute))
  180.     (if (and (/= depot nil)addminus)
  181.       (progn(setq a (arithmetic depotsign depot a))(setq depot nil)))
  182.     (if (or(/= addminus T)(= CPleng 0))
  183.       (setq a (arithmetic signname a b))  ;;如果是乘除
  184.       (progn
  185.   (setq signname2 (listword backlist 1 2))   ;;下一个符号
  186.   (if (or(= signname2 "+")(= signname2 "-"))
  187.     (setq a (arithmetic signname a b))
  188.     (setq depot a a b depotsign signname)  ;;置换数据
  189.   )
  190.       )
  191.     )
  192.   )
  193.   (if (/= depot nil)
  194.       (setq a (arithmetic depotsign depot a))(setq depot nil))
  195.   (if (/= backlist nil)(setq backlist (cdr backlist)))  ;;去闭括号
  196.   a
  197. )
  198. (defun compute (/ sign datatype1 datatype2 datatype3 datatype4
  199.     data1 data2 data3 data4 fawn)     ;;单元计算
  200.   (setq N 0)
  201.   (setq data1 nil data2 nil data3 nil data4 nil)
  202.   (setq sign nil)
  203.   (while (and(< N CPleng)(< N 4)(/= sign "sign"))
  204.     (setq N (1+ n))
  205.     (cond ((= N 1)(setq sign(listword backlist 1 1)      ;;提取单元
  206.       datatype1 sign data1(listword backlist 1 2)))
  207.     ((= N 2)(setq sign(listword backlist 2 1)
  208.       datatype2 sign data2(listword backlist 2 2)))
  209.     ((= N 3)(setq sign(listword backlist 3 1)
  210.       datatype3 sign data3(listword backlist 3 2)))
  211.     ((= N 4)(setq sign(listword backlist 4 1)
  212.       datatype4 sign data4(listword backlist 4 2)))
  213.     )
  214.   )
  215.   (if (/= N CPleng)(setq N (1- N)))          ;;;计算单元
  216.   (setq CPleng (- CPleng N))                 ;;未计算长度
  217.   (repeat N
  218.     (setq backlist (cdr backlist))
  219.   )                    ;;;未计算数据
  220.   ;;(if (/= N 0)(setq result nil))     ;;不进行累计清空上次结果
  221.   (cond ((= N 0)(if (= result nil) 0.0 (progn(setq fawn result result T)fawn)))     ;;累计计算
  222.         ((= N 1)(if (= datatype1 "Num") data1(statmyerror "函数无参数")))
  223.   ((= N 2)(cond((= datatype2 "Num")(functions data1 data2))
  224.          ((= datatype1 "Num")(functions2 data1 data2))
  225.          (T(statmyerror "函数无参数吗"))))  ;;此情况不可能发生
  226.   ((= N 3)(cond((= datatype2 "Num")(functions data1(functions2 data2 data3)))
  227.          ((= data2 "^" )(expt data1 data3))))
  228.   (T (functions data1 (expt data2 data4)))
  229.   )
  230. )
  231. (defun statmyerror (item)      ;;错误统计
  232.   (setq myerrorNum (1+ myerrorNum))
  233.   (setq myerror(strcat myerror " "(itoa myerrorNum) "." item))
  234. )   
  235.   
  236. (defun inspect (datalist / leng N celllist datatype
  237.     signNum bracketNum bracket )   ;;数据库错误检验

  238.   (setq funclist'(("SIN")("COS")("TG")("CTG")("ARCTG")("LN")("LOG")
  239.       ("SQRT")("!")("^")("D")("C")("L")("PL")))
  240.   (setq bracketNum 0 signNum -1)
  241.   (setq bracket nil)
  242.   (setq leng(length datalist))
  243.   (setq N 0)
  244.   (repeat leng
  245.     (setq celllist (nth N datalist))        ;;单元子列表
  246.     (setq N (1+ N))
  247.     (setq datatype (car celllist))
  248.     (setq data (cadr celllist))
  249.     (cond ((= datatype "Lbracket")(setq bracketNum (1+ bracketNum) bracket T))
  250.     ((= datatype "Rbracket")(setq bracketNum (1- bracketNum))
  251.      (if bracket (progn
  252.        (statmyerror"重叠的无用括号")
  253.        (setq bracket nil))))
  254.     (T (setq bracket nil)))
  255.     (if(and(< bracketNum 0)(/= N leng))(statmyerror "错位的右括号"))
  256.     (cond ((= datatype "sign")(setq signNum (1+ signNum)))
  257.     ((= datatype "Lbracket")(setq signNum 0))
  258.     (T (if (> signNum 0)
  259.          (statmyerror (strcat(itoa signNum) "个多余运算符"))
  260.        )
  261.      (setq signNum -1)))
  262.     (cond ((= datatype "function")
  263.      (setq abc (assoc data funclist))
  264.      (if(= (assoc data funclist)nil)
  265.             (statmyerror (strcat"未知函数"data))))
  266.           ((= data ".")(statmyerror "多余的小数点"))
  267.     ((and (= datatype "Num")(or(= data "-")(= data "-.")))(statmyerror "多余的减号"))
  268.     ((and(= N leng)(= datatype "sign"))(statmyerror (strcat(itoa (1+ signNum)) "个多余运算符")))
  269.   )
  270.   )
  271.   (cond ((< bracketNum 0)(statmyerror "多余右括号"))
  272.   ((> bracketNum 0)(statmyerror "多余左括号")))
  273. )

  274. (defun consDB (datalist datatype data / lgc) ;;向数据库添加元素的函数
  275.   (if(= datalist "")
  276.     (list(list  datatype data))
  277.     (progn
  278.       (setq lgc (list(list datatype data)))
  279.       (append datalist lgc)
  280.     )
  281.   )
  282. )
  283. (defun letter  (item / fawn)              ;;检测一字符的函数
  284.   (setq fawn (ascii item))
  285.   (cond ((and(>= fawn 48)(<= fawn 57))"Num")   ;;数
  286.   ((= fawn 46)"point")                   ;;小数点
  287.   ((or(= fawn 42)(= fawn 43)(= fawn 47))"sign")         ;;+*/号
  288.   ((= fawn 45)"minus")                                  ;;负号
  289.         ((= fawn 40) "Lbracket")       ;;左括号
  290.   ((= fawn 41) "Rbracket")       ;;右括号
  291.   (T"function")
  292.   )
  293. )
  294. (defun DBS (fawn / N item datatype data mydata lettertype
  295.       oldtype olddata addbracket Noatof unite Angunite #sign
  296.       savefawn savedatalist savelong point)        ;;建立数据库
  297.   (defun correction ()
  298.     (if (= data "PI")(setq datatype "Num" data pi Noatof nil))
  299.     (cond ((and(= unite nil)(or (= data "A")(= data "B")(= data "C")))  ;;提取槽钢型号
  300.       (setq unite T datatype "Num" data(strcat olddata data)
  301.       datalist(reverse datalist)datalist (cdr datalist)
  302.       datalist(reverse datalist)))
  303.     ((and(= Angunite nil)(/= data "#"))
  304.       (setq Noatof nil datatype "Num" data(strcat olddata data)
  305.       datalist(reverse datalist)datalist (cdr datalist)
  306.       datalist(reverse datalist)#sign T))
  307.     ((= data "#")(if Noatof(statmyerror "缺少型钢符号"))
  308.       (setq Angunite T datatype "Num" #sign nil Noatof nil))
  309.     ((and  (= oldtype "Lbracket")(= data "-"))
  310.       (setq datatype "sign"))             ;;处理负号
  311.           ((and  (or (= oldtype "Num") (= olddata "!"))     ;;左括号、函数前,智能纠错
  312.     (or(= datatype "function")(= datatype "Lbracket")(= datatype "Num"))
  313.     (/= data "!") (/= data "^"))
  314.       (setq datalist (consDB datalist "sign" "*")))
  315.     ((and (= oldtype "Rbracket")(/= datatype "Rbracket")(/= datatype "sign")
  316.     (/= data "!") (/= data "^"))  ;;右括号智能纠错
  317.       (setq datalist (consDB datalist "sign" "*")))
  318.     ((and(= oldtype "function")(/= olddata "!")(= datatype "function");;加左括号
  319.          (/= data "!")(/= data "^"))
  320.       (setq datalist (consDB datalist "Lbracket" "(")
  321.       addbracket (1+ addbracket)))
  322.     ((and (/= addbracket 0)
  323.     (or (= datatype "Rbracket")(= datatype "sign"))) ;;加闭括号
  324.      (repeat addbracket
  325.        (setq datalist (consDB datalist "Rbracket" ")" ))
  326.      )
  327.      (setq addbracket 0))
  328.     )                                                     ;;纠错完毕
  329.     (if (= unite nil)(setq unite T))
  330.     (cond ((and(= oldtype "function")(/= olddata "!")         ;;;sin等函数
  331.          (or(= datatype "sign")(= data "!") (= data "^")))
  332.       (statmyerror "函数无参数"))
  333.     ((and(= oldtype "Lbracket")(or(= data "!") (= data "^"))) ;;;! \等函数
  334.       (statmyerror "函数无参数"))
  335.     ((and(= oldtype "sign")(= datatype "Rbracket"))(statmyerror "多余运算符"))
  336.     ((and(= oldtype "Lbracket")(or(= data "*")(= data "/")))(statmyerror "多余运算符"))
  337.     )
  338.     (if(and (= olddata "C")(= datatype "Num"))   ;;槽钢
  339.       (setq Noatof nil unite nil))
  340.     (if(and (= olddata "L")(= datatype "Num"))   ;;角铁
  341.       (setq Noatof nil Angunite nil
  342.       savefawn fawn savedatalist datalist savelong long))  ;;没有#号下将使用
  343.     (setq oldtype datatype olddata data)
  344.   )      ;;结束
  345.   (setq funclist'(("SIN")("COS")("TG")("CTG")("ARCTG")("LN")("LOG")
  346.       ("SQRT")("!")("^")("D")("PL")("Pi")))
  347.   (setq addbracket 0)
  348.   (setq Noatof T unite T Angunite T)
  349.   (setq #sign nil #myerror nil)
  350.   (setq fawn (strcase fawn))
  351.   (setq long (strlen fawn))         ;;数据长度.必须的
  352.   (setq datatype "Num")               ;;单元类型
  353.   (while (/= fawn "")
  354.     (setq N 0 mydata nil)                       ;;当前字符
  355.     (setq point T)
  356.     (setq lettertype datatype)        ;;当前字符类型
  357.     (while (and (= lettertype datatype) (<= N long)(= mydata nil))   ;;类型不同退出
  358.       (setq long (strlen fawn))      ;;计算当前长度
  359.       (setq N (1+ N))
  360.       (setq item (substr fawn N 1))       ;;提取第N个字符
  361.       (setq lettertype(letter item))                     ;;检测第N个字符
  362.       (if (and point(= datatype "Num")(= lettertype "point")) ;;小数点是数数字
  363.   (setq lettertype "Num" point nil)
  364.       )
  365.       (if (= lettertype "minus")   ;;处理负号
  366.   (if (or(= datatype "sign")(= datatype "function")
  367.          (= datatype "Lbracket")) ;;前一单元类型是算术符号等
  368.     (setq lettertype "Num")       ;;当前字符类型是数字
  369.     (setq lettertype "sign")      ;;否则字符类型是算术符号
  370.   )
  371.       )
  372.       (if (= N 1)(setq datatype lettertype))  ;;提取第1个字符类型作为单元类型
  373.       (setq data (substr fawn 1 (1- n)))      ;;不可缺少!
  374.       (setq mydata (assoc data funclist))
  375.     )
  376.     (if (or(= datatype "sign")(= datatype "Rbracket")
  377.      (= datatype "Lbracket"))
  378.       (setq N 2))   ;;将运算符限定为一个
  379.     (setq data (substr fawn 1 (1- n)))
  380.     (if (or(= data "!")(= data "^"))(setq N 2 data (substr fawn 1 1)))
  381.     (correction)             ;;;智能纠错
  382.     (if (and (= datatype "Num")(/= data "-")(/= data "-.")Noatof)
  383.       (setq data (atof data)));;字符转数字
  384.     (if (and unite Angunite)(= (setq Noatof T)))
  385.     (if (/= data "#")(setq datalist (consDB datalist datatype data)))
  386.                    ;;函数  数据库   数据类型  数据
  387.     (if (<= N long)                     ;;提取剩余的数据
  388.       (setq fawn (substr fawn   N))
  389.       (setq fawn "")                  ;;字符已提完
  390.     )
  391.     (if (and #sign (= fawn ""))       ;;没有#号下将使用
  392.       (setq #sign nil #myerror T Angunite T fawn savefawn oldtype ""  
  393.       datalist savedatalist long savelong datatype "function" data "C"))
  394.   )
  395.   datalist
  396. )
  397. ;;;主程序
  398.   ;;(ai_undo_push);;(ai_undo_pop)
  399.   (setq result nil)   ;;初始化结果
  400.   (setq run T)    ;;继续执行
  401.   (while run
  402.     (setq oldresult result)  ;;保存旧结果
  403.     (setq myerror "")
  404.     (setq datalist "")
  405.     (setq fawn "")
  406.     (setq myerrorNum 0 signNum -1)
  407.     (setq fawn (getstring T "\n输入式子:"))
  408.     (if (/= fawn "")
  409.       (progn
  410.         (setq datalist (DBS fawn))  ;;(princ datalist)
  411.         (inspect datalist)          ;;检验数据库
  412.         (if (= myerror "")
  413.     (while(/= datalist nil)
  414.       (DBMS datalist)        ;;;提取区间
  415.       (setq y (block))         ;;;计算区间
  416.       (if(or(/= frontlist nil)(/= backlist nil))   ;;合并
  417.         (setq datalist(append frontlist (list(list "Num" y)) backlist))
  418.         (setq datalist nil))   
  419.     )
  420.         )
  421.         (if (/= result T)
  422.     (princ "结果:")
  423.     (progn
  424.       (princ "计算:(")
  425.       (princ oldresult)
  426.       (princ(strcat ")" fawn "\n累计结果:"))))
  427.   (setq result y)
  428.         (if (/= myerror "")
  429.     (progn
  430.       (princ (strcat"错误" myerror "。"))
  431.       (setq result nil)   ;;结果清空

  432.     )
  433.     (princ result)
  434.   )
  435.       )
  436.       (setq run nil)
  437.     )
  438.   )
  439.   ;;(ai_undo_pop)
  440.   (if(not fawnload)(setq fawnload(princ"\"计算器\"命令 小鹿软件*版权所有")))
  441.   (princ)
  442. )



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
    共1人打赏
发表于 2011-12-5 21:46 | 显示全部楼层
呵呵,有同感哦,不过解铃还须系铃人,也许只能靠自已了哦
发表于 2011-12-5 22:03 | 显示全部楼层
本帖最后由 xshrimp 于 2011-12-5 22:05 编辑

不知道楼主的作用是什么,想要的结果是什么,
如果仅仅修复输入2..7得到2.7?这个?很容易.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2011-12-6 09:27 | 显示全部楼层
本帖最后由 fawn_lgc 于 2011-12-6 10:10 编辑
xshrimp 发表于 2011-12-5 22:03
不知道楼主的作用是什么,想要的结果是什么,
如果仅仅修复输入2..7得到2.7?这个?很容易.


非常感谢你的热心.
我希望输入:  2. .4而应提示输入了多余小数点,不应该有结果.
输入2..4*3也应该没有结果

输入2sin45应该有结果
输入2.sin45应该有结果
输入(.5+2)*3应该有结果
输入3.*(.5+2)应该有结果

也就是说2.识别为2.0 ; 而.5识别为0.5 ; 2(5+3)识别为2*(5+3) ; 2sin45识别为2*sin(45°)
而2..5应提示输入了多余小数点,不应该有结果.

这些问题没能解决.





您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-28 13:30 , Processed in 0.223614 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表