找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 758|回复: 10

[求助] [求助]:跳出循环

[复制链接]
发表于 2005-10-26 21:17:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
我编的这个程序就是跳不出循环,,我的目的是当条件满足
(>= pm pnx)时
运行(setq yy (Polar  pn (/ pi 2) (* pnz zz)))
(command yy "")后跳出循环.
请那位大侠帮忙具体指点一下,最好能完整地写出来.再一次谢了.


(defun c:lkj (/ pp pm yy h0 hh dd)
       (setvar"OSMODE" 33)        
   (setvar"cmdecho" 0)        
  (setq        p0  (getpoint "\n请确定起点:")
        pn  (getpoint "\n请确定终点:")
        pnx (car pn)
        p0z (getreal "\n请输入起点高程:")
        pnz (getreal "\n请输入终点高程:")
        p1z (getreal "\n请输入第一条等高线高程:")
        zz  (getreal "\n请输入放大倍数:")
        dd  (* p1z zz)
  )
  (command "pline")                       
  (setq yy (Polar p0 (/ pi 2) (* p0z zz)))
  (setvar"OSMODE" 0)                       ;
  (command yy)                               
  (setvar"OSMODE" 33)
  (setq        p1 (getpoint "\n请确定第一点:")
        yy (Polar p1 (/ pi 2) (* p1z zz))
  )                                          (setvar"OSMODE" 0)
  (command yy)               
  (setvar"OSMODE" 33)
  (setq h0 0
        hh h0                        
  )                ;开始进入循环
  (while (setq pp (getpoint "\n请确定下一点:"))
    (setq pm (car pp))                    
    (cond       
      ((>= pm pnx)            ;如果pm大于或等于pnx就终止画线,跳出循环
       (setq yy (Polar pn (/ pi 2) (* pnz zz)))
        (setvar"OSMODE" 0)(command yy "" "") (setvar"OSMODE" 33)
      )                                        ;如果pm小于pnx就继续下面的程序
      ((< pm pnx)
       (setq h0 (/ hh zz))
       (princ "\n请输入与前一点高差<") (princ h0) (princ ">:")
       (setq h0 (getreal ))
       (if (= h0 nil) (setq h0 hh))
       (setq hh h0)
       (setq h0 (* h0 zz))
       (setq dd (+ dd h0))
       (setq yy (Polar pp (/ pi 2) dd))
       (setvar"OSMODE" 0) (command yy) (setvar"OSMODE" 33) (setq hh h0)
      )
    )
  )
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-26 22:25:26 | 显示全部楼层
(while (setq pp (getpoint "\n请确定下一点:"))
呵呵,你把你的条件写入while阿
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-27 08:54:07 | 显示全部楼层
狂刀大侠,我是刚学的,还不到十天,我也试了好多次,就是不成功,跳出循环的条件是:当pp点输入超出界限(pm>=pnx)时,要执行完以下动作后跳出循环.
setq yy (Polar pn (/ pi 2) (* pnz zz)))
        (setvar"OSMODE" 0)(command yy "" "") (setvar"OSMODE" 4)
为了这个循环,把我的脑细胞都循环的错位了,跳出循环的条件上面说了,写入while怎么写出?写在哪个位置望大侠指点具体些,你不能把我当中学生来教,而要当小学一年级的学生来教.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-27 09:03:21 | 显示全部楼层
对用途不清楚,不知是否可行?
  1. [FONT=courier new](defun c:lkj (/ pp pm yy h0 hh dd)
  2.   (setvar "OSMODE" 33)
  3.   (setvar "cmdecho" 0)
  4.   (setq        p0  (getpoint "\n请确定起点:")
  5.         pn  (getpoint p0 "\n请确定终点:")
  6.         pnx (car pn)
  7.         p0z (UREAL 1 "" "\n请输入起点高程:" p0z)
  8.         pnz (UREAL 1 "" "\n请输入终点高程:" pnz)
  9.         p1z (UREAL 1 "" "\n请输入第一条等高线高程:" p1z)
  10.         zz  (UREAL 1 "" "\n请输入放大倍数:" zz)
  11.         dd  (* p1z zz)
  12.         yy (Polar p0 (/ pi 2) (* p0z zz))
  13.   )
  14.   (setvar "OSMODE" 0)
  15.   (command "pline" yy)
  16.   (setvar "OSMODE" 33)
  17.   (setq        p1 (getpoint p0 "\n请确定第一点:")
  18.         yy (Polar p1 (/ pi 2) (* p1z zz))
  19.   )
  20.   (setvar "OSMODE" 0)
  21.   (command yy)
  22.   (setvar "OSMODE" 33)
  23.   (setq        h0 0
  24.         hh h0
  25.   )                                        ;开始进入循环
  26.   (while (setq pp (getpoint yy "\n请确定下一点:"))
  27.     (setq pm (car pp))
  28.     (cond
  29.       ((>= pm pnx)                        ;如果pm大于或等于pnx就终止画线,跳出循环
  30.        (setq yy (Polar pn (/ pi 2) (* pnz zz)))
  31.        (setvar "OSMODE" 0)
  32.        (command yy "")
  33.        (setvar "OSMODE" 33)
  34.        (exit);强制跳出循环
  35.       )                                        ;如果pm小于pnx就继续下面的程序
  36.       ((< pm pnx)
  37.        (setq h0 (/ hh zz))
  38.        (if (= h0 nil)
  39.          (setq h0 hh)
  40.        )
  41.        (setq h0        (UREAL 1 "" "\n请输入与前一点高差数" h0)
  42.              hh        h0
  43.              h0        (* h0 zz)
  44.              dd        (+ dd h0)
  45.              yy        (Polar pp (/ pi 2) dd)
  46.        )
  47.        (setvar "OSMODE" 0)
  48.        (command yy)
  49.        (setvar "OSMODE" 33)
  50.        (setq hh h0
  51.              yy pp)
  52.       )
  53.     )
  54.   )
  55.   ;(command "")
  56.   (princ)
  57. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-27 19:07:34 | 显示全部楼层
一语点醒梦中人
不过10天就敢写了,挺棒啊。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-27 20:30:35 | 显示全部楼层

  1. (while (and(setq pp (getpoint "\n请确定下一点:"))
  2.                  (setq pm (car pp))
  3.                  (< pm pnx)))
  4.    ......;; do while (<  pm pnx)
  5. )
  6. (if pm   ..... );; do while (>= pm pnx)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-28 07:42:18 | 显示全部楼层
问题的解决不必说了,单从斑主的代码可读性,就可看出水平!共同学习。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-31 14:51:29 | 显示全部楼层
谢谢大家,我确实是刚学着写的,以后还得请大家多帮忙忙!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-31 16:03:12 | 显示全部楼层
变量名取得有些晕哦,不过新手已经算不错了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-1 11:21:41 | 显示全部楼层
唉,跟斑竹的差距不小啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-2 16:40:12 | 显示全部楼层
能得到这么多的网友支持,很高兴,十多年前学过BASIC,全忘光了,现在学LISP全凭兴趣.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 18:37 , Processed in 0.189175 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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