找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1946|回复: 16

[求助] 这个是用循环吗?该怎么判断

[复制链接]

已领礼包: 685个

财富等级: 财运亨通

发表于 2013-6-16 20:04:44 | 显示全部楼层 |阅读模式

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

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

×


  1. (initget 6)
  2. (setq h1 (getreal "\n请输入唧嘴总高度")
  3.       h2 (getreal "\n请输入唧嘴底部车空深度"))

  4.   (IF (>= 0 (- h1 h2));判断    H1是否大于或等于H2
  5. (alert "车空深度不可能大于总高度吧!!是不是输入错了?")
  6.   )

  7. ;如H1大于或等于H2   如何让程序返回到第二行(setq h1 (getreal)重新输入H1

  8. 的值?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2013-6-16 20:07:28 | 显示全部楼层
这个简单,我知道。
  1. (SETQ LOOP T)
  2. (WHILE LOOP
  3. (setq h1 (getreal "\n请输入唧嘴总高度")
  4.       h2 (getreal "\n请输入唧嘴底部车空深度"))

  5.   (IF (>= 0 (- h1 h2));判断    H1是否大于或等于H2
  6. (alert "车空深度不可能大于总高度吧!!是不是输入错了?")
  7.    (SETQ LOOP NIL)
  8.   )
  9. )

点评

为面为什么要设LOOP为空呢?是为了跳出循环吗??  详情 回复 发表于 2013-6-16 20:09
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-6-16 20:07:56 | 显示全部楼层
(while (>= h1 h2)
   (princ "车空深度不可能大于总高度吧!!是不是输入错了?")
(initget 6)
  (setq h1 (getreal "\n请输入唧嘴总高度"))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-6-16 20:09:32 | 显示全部楼层
wowan1314 发表于 2013-6-16 20:07
这个简单,我知道。


后面为什么要设LOOP为空呢?是为了跳出循环吗??

点评

对呀! 人家都输入正确了,你还不让人跳出循环吗?  详情 回复 发表于 2013-6-16 20:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-16 20:14:32 | 显示全部楼层
本帖最后由 wowan1314 于 2013-6-16 20:15 编辑
ysq101 发表于 2013-6-16 20:09
后面为什么要设LOOP为空呢?是为了跳出循环吗??

对呀! 人家都输入正确了,你还不让人跳出循环吗?你太坏了{:soso_e151:}

点评

你测试过了吗??还是不行啊  详情 回复 发表于 2013-6-16 20:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-6-16 20:23:41 | 显示全部楼层
wowan1314 发表于 2013-6-16 20:14
对呀! 人家都输入正确了,你还不让人跳出循环吗?你太坏了

你测试过了吗??还是不行啊

点评

你先吧你的H1、H2的关系搞明白! (>= h1 h2)还是 (<= h1 h2)..  发表于 2013-6-16 20:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-16 20:52:38 | 显示全部楼层
本帖最后由 laibinwu 于 2013-6-16 21:00 编辑

G版的代码最简单
  1. (initget 6)
  2. (setq h1 (getreal "\n请输入唧嘴总高度")
  3.       h2 (getreal "\n请输入唧嘴底部车空深度")
  4. )
  5. (while (>= h2 h1)
  6.   (alert "车空深度不可能大于总高度吧!!是不是输入错了?")
  7.   (setq h2 (getreal "\n请输入唧嘴底部车空深度"))
  8. )

点评

看起来简单...新手表示看不到是如何跳出循环的......  详情 回复 发表于 2013-6-16 22:53
看清题目! ;如H1大于或等于H2 如何让程序返回到第二行(setq h1 (getreal)重新输入H1。  发表于 2013-6-16 21:04
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-6-16 22:52:35 | 显示全部楼层
也怪我没说明白,其实如果H1大于H2的话,证明输入错了..H1和H2都需要重新输入的...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-6-16 22:53:54 | 显示全部楼层
laibinwu 发表于 2013-6-16 20:52
G版的代码最简单

看起来简单...新手表示看不到是如何跳出循环的......

点评

紧跟while 后的括号内的东西为nil就退出循环。  发表于 2013-6-17 09:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-6-17 15:30:39 | 显示全部楼层
这类问题一般有两种方法循环:
1.直接条件循环。设定循环条件,满足条件(这里是不满足输入要求)则循环,否则退出循环继续。

  1. (setq h1 0.0 h2 1.0)        ;预设while循环条件
  2. (while (< (- h1 h2) 0.0)          ;如果h1<h2,循环
  3.   (initget 7)
  4.   (setq h1 (getdist "\n请输入唧嘴总高度: ")              ;输入高度距离等一般用getdist,可以键盘输入,也可以鼠标输入
  5.         h2 (getdist "\n请输入唧嘴底部车空深度: ")
  6.   )
  7.   (if (< (- h1 h2) 0.0)
  8.     (princ "\n车空深度不可能大于总高度吧!!是不是输入错了?")        ;这是无关紧要的,只是提示
  9.   )
  10. )


2.自身调用完成循环。将循环体做成函数,需要时自身调用,达到循环目的。
需要说明的是,这种循环是利用了递归机制,如果每次调用都可能消耗一部分堆栈空间,如果循环体的有不良结构,可能会造成程序的堆栈溢出,使用时要慎重。
本例的循环体没有需要保存的内容,故基本不占用堆栈空间。

  1. (defun inp()                        ;定义一个输入函数
  2.   (initget 7)
  3.   (setq h1 (getdist "\n请输入唧嘴总高度: ")
  4.         h2 (getdist "\n请输入唧嘴底部车空深度: ")
  5.   )
  6.   (if (< (- h1 h2) 0.0)
  7.     (progn
  8.       (princ "\n车空深度不可能大于总高度吧!!是不是输入错了?")
  9.       (inp)                       ;不满足条件时调用本身
  10.     )
  11.   )
  12. )

点评

先汗一个先 解释也超级详细。。。 感觉还是第一种方试通用。。。更适合初学者..... 关于GETDIST方面。。。我这个LISP作为一个计算器使用。所以getreal就足够了 感谢你的热心回答了!!如果我没记错你的ID的话  详情 回复 发表于 2013-6-17 18:35

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-6-17 18:35:04 | 显示全部楼层
ll_j 发表于 2013-6-17 15:30
这类问题一般有两种方法循环:
1.直接条件循环。设定循环条件,满足条件(这里是不满足输入要求)则循环, ...

先汗一个先:L   解释也超级详细。。。
感觉还是第一种方试通用。。。更适合初学者.....
关于GETDIST方面。。。我这个LISP作为一个计算器使用。所以getreal就足够了
感谢你的热心回答了!!如果我没记错你的ID的话。。。你应该就是别人所称的  长老  是吧?
想不到我这新手也能等到你这大神回答,万分感谢。。。当然上面几位也算是高手中的高手了。。感谢了~~
我的问题解决了~~~~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 12:21 , Processed in 0.389406 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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