乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 42|回复: 9

[编程交流] 正数和负数pro

[复制链接]

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 08:42:36 | 显示全部楼层 |阅读模式
我从来没有在任何其他Lisp程序的问题。如果“c”比“b”大,它会给我一个负数。不管我选哪个顺序。有人能回答为什么吗?更奇怪的是,“e”是我需要的正确数字,但它没有打印出答案。当我运行另一个类似于此的例程时,效果很好。我正在使用2011 Cad
 
a=20
b=40’-5.25”
c=45’-10”
d=1852
e=37040
但它给了我-28496,并把它放在屏幕上,而不是37040,这是我正在寻找的。
 
  1. (defun c:sr ()
  2. (setq a (getstring "16/20 for wind: "))
  3. (setq b (getdist "\nClick on 2 points to specify mean roof height: "))
  4. (setq c (getdist "\nClick on 2 points to specify building length: "))
  5. (setq d (fix (* (cvunit c "INCHES" "FEET") (cvunit b "INCHES" "FEET"))))
  6.     (if (= a "20")   
  7.     (progn   
  8.      (setq e (* 20 d))
  9.       (command "text" pause "6" "0" e)
  10.      (princ)))
  11.      (if (= a "16")   
  12.     (progn   
  13.      (setq e (* 16 d))
  14.        (command "text" pause "6" "0" e)
  15.      (princ))))
回复

使用道具 举报

7

主题

143

帖子

136

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 08:53:29 | 显示全部楼层
读了这篇文章后,我想到的第一件事是:
您希望将答案列为文本,因此可能需要使用函数itos(整数到字符串)将变量e更改为文本。
 
目前没有AutoCAD访问权限测试它。。。
回复

使用道具 举报

7

主题

143

帖子

136

银币

初来乍到

Rank: 1

铜币
36
发表于 2022-7-6 09:00:46 | 显示全部楼层
例如:
  1. (command "text" pause "6" "0" [color=red][b](itos[/b][/color] e[color=red][b])[/b][/color])
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 09:02:41 | 显示全部楼层
不,它仍然给我负数。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 09:13:57 | 显示全部楼层
本地化变量,并可能查看abs函数。
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 09:22:20 | 显示全部楼层
alanjt公司
好的,这里有一个新问题。为什么我需要本地化我的变量?我正在研究和尝试腹肌。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 09:29:00 | 显示全部楼层
非局部变量可能对例程产生不利影响(同一个例程第二次运行,或者不同的例程具有相同的定义变量)。
 
如。
  1. (defun c:TEst (/)
  2. (if (setq n (getint "\nSpecify value to append to list: "))
  3.    (print (setq l (cons n l)))
  4. )
  5. (princ)
  6. )
  7. (defun c:TEst2 (/ n l)
  8. (if (setq n (getint "\nSpecify value to append to list: "))
  9.    (print (setq l (cons n l)))
  10. )
  11. (princ)
  12. )

 
 
  1. Command: test
  2. Specify value to append to list: 5
  3. (5)
  4. Command:
  5. Command:
  6. TEST
  7. Specify value to append to list: 25
  8. (25 5)
  9. Command:
  10. Command: test2
  11. Specify value to append to list: 4
  12. (4)
  13. Command:
  14. Command:
  15. TEST2
  16. Specify value to append to list: 56
  17. (56)

 
注意,当我执行第一个例程测试时,当我键入第一个值时,它会将其附加到列表中,但下次我运行例程并将值附加到列表中时,它也有我在第一次运行时键入的第一个值。然而,对于第二个例程Test2,它每次都给出了我想要的值。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:35:38 | 显示全部楼层
另一种解释。
回复

使用道具 举报

0

主题

61

帖子

62

银币

限制会员

铜币
-1
发表于 2022-7-6 09:37:51 | 显示全部楼层
您是否尝试过此处给出的值以外的值(即b=40 c=35’)?它们如何影响结果?
 
我怀疑在解释你在b和c的距离值时有些问题。单位转换后的数据看起来如何?作为一个测试例程,我可能会尝试以下内容:
  1. (defun c:sr2 ( / A B C D E Z Y X W)
  2. (SETQ
  3.   a "20";(GETSTRING "16/20 for wind: ")
  4.   b 485.25;(GETDIST "\nClick on 2 points to specify mean roof height: ")
  5.   c 550;(GETDIST "\nClick on 2 points to specify building length: ")
  6.   z (CVUNIT c "INCHES" "FEET")
  7.   y (CVUNIT b "INCHES" "FEET")
  8. );SETQ
  9. (PRINC "\nMean Roof Height:    ")
  10. (PRINC y)
  11. (PRINC "\NBuilding Length:    ")
  12. (PRINC z)
  13. (SETQ x (* z y))
  14. (PRINC "\nfirst multiplication:     ")
  15. (PRINC x)
  16. (SETQ d (FIX x))
  17. (PRINC "\nAfter rounding: ")
  18. (PRINC d)
  19.     (if (= a "20")   
  20.     (progn   
  21.      (setq e (* 20 d))
  22.       (command "text" pause "6" "0" e)
  23.      (princ)))
  24.      (if (= a "16")   
  25.     (progn   
  26.      (setq e (* 16 d))
  27.        (command "text" pause "6" "0" e)
  28.      (princ)
  29.      );PROGN
  30.      );IF
  31. );DEFUN

 
注意,我已经本地化了我的变量,正如本线程中其他地方提到的那样,以至少避免这种可能性。
 
有趣的是,这给了我37060的结果,而不是你预测的37040。
 
希望这些能有所帮助,
 
dJE
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 09:43:40 | 显示全部楼层
谢谢alanjt,
我以为这就是你的意思。
 
谢谢李,
我确实在你的网站上读过。标记您的站点。
 
danellis,
它在另一个图形中运行良好,因此我想知道图形中是否有更改的设置。我确实去本地化了我的变量,我将从现在开始做。
 
谢谢
乔伊
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-8 00:19 , Processed in 1.050469 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表