明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2017|回复: 13

循环问题

  [复制链接]
发表于 2005-2-24 11:42:00 | 显示全部楼层 |阅读模式
我公司的电脑名称是按KH001~KH999取名,以下是一个循环1~999当循环<10时K1取KH001~KH009,>=10 and <100时K1取KH010~KH099,>=100 and <1000时K1取KH100~KH999.当K1与电脑名称一样时输出K1,以下程式有点问题靖各位帮忙分析一下。谢谢! (defun c:kh()
(setvar "cmdecho" 0)
(setq khname (getenv "computername"))
(setq i 0)
(repeat 999
(progn
(if (< 10 i)
(setq k1 (strcat "KH00" (rtos i 2 0)))
(if (= khname k1)
(princ k1)
)
)
(if (and (>= 10 i) (< 100 i))
(setq k1 (strcat "KH0" (rtos i 2 0)))
(if (= khname k1)
(princ k1)
)
)
(if (and (>= 100 i) (< 1000 i))
(setq k1 (strcat "KH" (rtos i 2 0)))
(if (= khname k1)
(princ k1)
)
)
)
(setq i (1+ i))
)
(princ)
)
发表于 2005-2-24 11:49:00 | 显示全部楼层
defun c:kh()
(setvar "cmdecho" 0)
(setq khname (getenv "computername"))
(setq i 0)
(repeat 999
(progn
(if (< i 10)
(setq k1 (strcat "KH00" (rtos i 2 0)))
(if (= khname k1)
(princ k1)
)
)
(if (and (>= i 10) (< i 100))
(setq k1 (strcat "KH0" (rtos i 2 0)))
(if (= khname k1)
(princ k1)
)
)
(if (and (>= i 100) (< i 1000))
(setq k1 (strcat "KH" (rtos i 2 0)))
(if (= khname k1)
(princ k1)
)
)
)
(setq i (1+ i))
)
(princ)
)
发表于 2005-2-24 12:29:00 | 显示全部楼层
为甚么要循环?你的目的是甚么?
发表于 2005-2-24 12:36:00 | 显示全部楼层
我有点不明白,楼主的目的是不是求出当前电脑是属于哪一段;比如说属于KH001~KH009、KH010~KH100等,如果是这样的意思,那以上两段程序好象都不对,(princ k1) 其中K1指得是当前电脑的计算机名,而不是KH001~KH009、KH010~KH100,我作了修改,不知道是不是楼主的本意 (defun c:kh ()
(setvar "cmdecho" 0)
(setq khname (getenv "computername"))
(setq i 0)
(setq L (strlen KHName))
(setq name (substr khname 3 4))
(setq name (atoi name))
(cond ((and (> name 0) (< name 10))
(print "此电脑属于KH001~KH009段")
)
((and (>= name 10) (< name 99))
(print "此电脑属于KH010~KH099段")
)
((and (>= name 100) (< name 1000))
(print "此电脑属于KH100~KH999段")
)
(T
(print (strcat "此电脑名为: " khname))
)
) (princ)
)
 楼主| 发表于 2005-2-24 13:08:00 | 显示全部楼层
公司有一套模具设计软件,有人拷贝出去了。为防止这一类事情的发生,此软件只对这一类型名称的电脑有效。
 楼主| 发表于 2005-2-24 13:09:00 | 显示全部楼层
谢谢各位楼主的答复!
发表于 2005-2-24 16:55:00 | 显示全部楼层
回复zhongys::您的程序错误如下: 1、条件语句中的判断用反了; 2、IF语法用错,在条件语句后面如果有多个语句要用PROGN函数括起来; 3、写的太繁复了。 更改后的程序如下: (defun c:kh()
(setvar "cmdecho" 0)
(setq khname (getenv "computername"))
(setq i 0)
(repeat 999
(setq k1 (strcat "KH" (if (< i 10) "00" (if (< i 100) "0" "")) (rtos i 2 0)))
(if (= khname k1) (princ k1))
(setq i (1+ i))
)
(princ)
)
 楼主| 发表于 2005-2-26 10:48:00 | 显示全部楼层
此位兄台的程式比我的简单明了,真是学无止境呀。
发表于 2005-3-1 08:04:00 | 显示全部楼层
;;不必循环,要是10位数,难道循环1,000,000,000次
(defun C:TT (/ KH LST)
;;(setq KH (getenv "computername"))
(setq KH "KH010")
(setq LST '("0" "1" "2" "3" "4" "5" "6" "7" "8" "9"))
(if (and (= (strlen KH) 5)
(= (substr KH 1 2) "KH")
(member (substr KH 3 1) LST)
(member (substr KH 4 1) LST)
(member (substr KH 5 1) LST)
)
(princ KH)
)
(princ)
)
发表于 2005-3-1 21:19:00 | 显示全部楼层
本帖最后由 作者 于 2005-3-2 23:26:37 编辑

我来也,要精简程序怎么不叫上我啊,要知道我是最懒的,不会写长的代码:) (defun C:TT (/ KH LST)
(setq KH (getenv "computername"))
(if (wcmatch KH "KH###") KH)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-29 06:31 , Processed in 0.205320 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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