乐筑天下

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

[编程交流] 我的解决方案是偶数。

[复制链接]

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 08:52:53 | 显示全部楼层 |阅读模式
我有一个lisp例程,它会循环并将长度放在一行上,但我希望它总是用偶数。这可能吗?
 
  1. (defun c:rl ()
  2. (prompt "enter roof slope rise for rafter")
  3.        (setq raf1 (getstring "\n INPUT: 2,3,4,5,6,7,8,9,10,12,14,15,16"))
  4.          (if   (= raf1 "2") (setq raf2 1.014))
  5.          (if   (= raf1 "3") (setq raf2 1.031))
  6.          (if   (= raf1 "4") (setq raf2 1.054))
  7.          (if (= raf1 "5") (setq raf2 1.083))
  8.          (if   (= raf1 "6") (setq raf2 1.118))
  9.          (if   (= raf1 "7") (setq raf2 1.158))
  10.          (if   (= raf1 "8") (setq raf2 1.202))
  11.          (if   (= raf1 "9") (setq raf2 1.250))
  12.          (if   (= raf1 "10") (setq raf2 1.302))
  13.          (if   (= raf1 "11") (setq raf2 1.357))
  14.          (if   (= raf1 "12") (setq raf2 1.414))
  15.          (if   (= raf1 "13") (setq raf2 1.475))
  16.          (if   (= raf1 "14") (setq raf2 1.537))
  17. (and (setq ss (ssget "_:L" '((0 . "LINE"))))
  18.     (while (setq en (ssname ss 0))
  19.            (setq ed (entget en))
  20.            (setq p10 (cdr (assoc 10 ed)))
  21.            (setq p11 (cdr (assoc 11 ed)))
  22.            (setq mpt (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11))
  23.            (setq d2d (distance (cdr (reverse p10)) (cdr (reverse p11))))
  24.            (setq d1d (/ d2d 12.))
  25.            (setq d3d (* d1d raf2))
  26.            (if (<= d3d 8.0)
  27.         (setq d4d (fix (+ d3d 1))))                 
  28.            (if (>= d3d 9.0)
  29.         (setq d4d (fix (* (+ (/ d3d 2.0) 0.5)2.0))))            
  30.        (setq lan (angle p10 p11))
  31.            (setq dir (if (< (* pi 0.5) lan (* pi 1.5)) - +))
  32.            (setq tan (if (> (* pi 1.5) lan (* pi 0.5)) (+ lan pi) lan))
  33.            (entmake (list (cons 0 "TEXT")
  34.                           (cons 8 (getvar "CLAYER"))
  35.                           (cons 7 (getvar "TEXTSTYLE"))
  36.                           (cons 40 (getvar "TEXTSIZE"))
  37.                           (cons 72 4)
  38.             (setq fg(cons 10 (polar mpt (dir (angle p10 p11) (* pi 0.5))
  39.                                    (getvar "TEXTSIZE"))))
  40.                           (setq hg(cons 11 (polar mpt (dir (angle p10 p11) (* pi 0.5))
  41.                                    (getvar "TEXTSIZE"))))
  42.                           (cons 50 tan)
  43.                           (setq rb1 (cons 1 (strcat (itoa d4d) "'")))))
  44.                   (ssdel en ss)))
  45.   (prin1))
回复

使用道具 举报

62

主题

466

帖子

404

银币

后起之秀

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

铜币
310
发表于 2022-7-6 09:05:11 | 显示全部楼层
  1.   (setq dist (getdist "\nSpecify distance: "))
  2. (setq disttostring (rtos dist 2 0))
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 09:17:04 | 显示全部楼层
如果奇数d4d=>d4d=第一个更高的数字乘以1
 
  1. (defun c:rl ()
  2. (prompt "enter roof slope rise for rafter")
  3.        (setq raf1 (getstring "\n INPUT: 2,3,4,5,6,7,8,9,10,12,14,15,16"))
  4.          (if   (= raf1 "2") (setq raf2 1.014))
  5.          (if   (= raf1 "3") (setq raf2 1.031))
  6.          (if   (= raf1 "4") (setq raf2 1.054))
  7.          (if (= raf1 "5") (setq raf2 1.083))
  8.          (if   (= raf1 "6") (setq raf2 1.118))
  9.          (if   (= raf1 "7") (setq raf2 1.158))
  10.          (if   (= raf1 "8") (setq raf2 1.202))
  11.          (if   (= raf1 "9") (setq raf2 1.250))
  12.          (if   (= raf1 "10") (setq raf2 1.302))
  13.          (if   (= raf1 "11") (setq raf2 1.357))
  14.          (if   (= raf1 "12") (setq raf2 1.414))
  15.          (if   (= raf1 "13") (setq raf2 1.475))
  16.          (if   (= raf1 "14") (setq raf2 1.537))
  17. (and (setq ss (ssget "_:L" '((0 . "LINE"))))
  18.     (while (setq en (ssname ss 0))
  19.            (setq ed (entget en))
  20.            (setq p10 (cdr (assoc 10 ed)))
  21.            (setq p11 (cdr (assoc 11 ed)))
  22.            (setq mpt (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11))
  23.            (setq d2d (distance (cdr (reverse p10)) (cdr (reverse p11))))
  24.            (setq d1d (/ d2d 12.))
  25.            (setq d3d (* d1d raf2))
  26.            (if (<= d3d 8.0)
  27.         (setq d4d (fix (+ d3d 1))))                 
  28.            (if (>= d3d 9.0)
  29.         (setq d4d (fix (* (+ (/ d3d 2.0) 0.5)2.0))))
  30.    [highlight](if (/= (/ (float d4d) 2) (fix (/ (float d4d) 2))) (setq d4d (+ d4d 1)) )[/highlight]           
  31.        (setq lan (angle p10 p11))
  32.            (setq dir (if (< (* pi 0.5) lan (* pi 1.5)) - +))
  33.            (setq tan (if (> (* pi 1.5) lan (* pi 0.5)) (+ lan pi) lan))
  34.            (entmake (list (cons 0 "TEXT")
  35.                           (cons 8 (getvar "CLAYER"))
  36.                           (cons 7 (getvar "TEXTSTYLE"))
  37.                           (cons 40 (getvar "TEXTSIZE"))
  38.                           (cons 72 4)
  39.             (setq fg(cons 10 (polar mpt (dir (angle p10 p11) (* pi 0.5))
  40.                                    (getvar "TEXTSIZE"))))
  41.                           (setq hg(cons 11 (polar mpt (dir (angle p10 p11) (* pi 0.5))
  42.                                    (getvar "TEXTSIZE"))))
  43.                           (cons 50 tan)
  44.                           (setq rb1 (cons 1 (strcat (itoa d4d) "'")))))
  45.                   (ssdel en ss)))
  46.   (prin1))
M.R。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:40:16 | 显示全部楼层
对整数进行四舍五入的偶数测试:
  1. (defun even (n)
  2. (if (zerop (rem n 2)) n (1+ n)))

 
我不太懂这个程序,但前端可以压缩:
 
  1. [b][color=BLACK]([/color][/b]initget 7[b][color=BLACK])[/color][/b]
  2. [b][color=BLACK]([/color][/b]setq rise [b][color=FUCHSIA]([/color][/b]getint [color=#2f4f4f]"\nSlope Rise in 12:   "[/color][b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
  3. [b][color=BLACK]([/color][/b]setq mp [b][color=FUCHSIA]([/color][/b]/ 1. [b][color=NAVY]([/color][/b]sin [b][color=MAROON]([/color][/b]angle '[b][color=GREEN]([/color][/b]0 0[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]list rise 12[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
-大卫
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-6 09:46:59 | 显示全部楼层
谢谢大家。你的大卫做得很好。我知道我可以做的顶部较小,但我变得懒惰,不想查它的数学。
再次感谢你
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:03:09 | 显示全部楼层
Marko j_spawn_h,除其他外,考虑使用COND代替重复的IF语句。 
此外,在继续执行例行程序之前,请考虑测试有效的用户输入:
 
伪代码:
 
[code](defun c:RL(/;|别忘了定位变量|;)(if(and(princ“enter roof slope rise for rafter”)(setq raf1(getstring“\n输入:2,3,4,5,6,7,8,9,10,12,14,15,16”)(cond;|选项在此|;;)(progn;;
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 05:59 , Processed in 1.498522 second(s), 64 queries .

© 2020-2025 乐筑天下

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