社区活动 技术论坛 PC-DMIS网络大赛八月题
PC-DMIS网络大赛八月题
2007-08-27 07:53 181 0 46
还是老生长谈--以前可能有的人已经做过类似的东西了,现在拿出来作为一个练习我想更贴切点。 题目要求很简单-----在一个面上通过测量得到最高的N个点和最底的N个点.N>1 很多时候因为思路不同每个人会有不同的做法,这就给大家带来了相互交流和学习的机会。。 正巧8月20号的编程班刚刚结束,权且当作一次温习功课好了,呵呵。欢迎大家集思广议。 {/cy}                   [此贴子已经被作者于2007-8-28 8:14:40编辑过]
我要回复

登陆后才能评论

登录
所有回贴(46)
本题要求:对平面采点的高低点进行排序,并告知点的相关位置。 下面简单做一下程序说明,方便大家进行分析研究。 1.该程序现是按从大到小进行排序做的,稍许修改就可变成从小到大的排序程序; 2.数组中的数字可随意增加或删减,并不影响程序运行; 3.该程序分三种逻辑: a.数组中所有的数值都一样; b.数组中有部分相同的数值; c.数组中各数值都不一样. 4. 下面是一个完整的程序段,加在程序中就可运行。 …… 赋值/V0 = ARRAY(-9,0,3,8,5,0,2,8,4,1) 赋值/VV = MAX(V0) 赋值/V2 = MIN(V0) 赋值/V3 = V2-1 IF/VV==V2 注释/报告,*** 所有点都一样 *** 转到/STOP END_IF/ WHILE/MAX(V0)<>MIN(V0) 赋值/VV = MAX(V0) 赋值/I = 1 IF/VV==V0[I] 注释/报告,"点"+I+"="+VV 赋值/V0[I] = V3 END_IF/ ELSE_IF/VV<>V0[I] WHILE/VV<>V0[I] 赋值/I = I+1 IF/VV==V0[I] 注释/报告,"点"+I+"="+VV END_IF/ END_WHILE/ 赋值/V0[I] = V3 END_ELSEIF/ END_WHILE/ STOP =标号/ 程序/终止 ○程序运行结果 点4=8 点8=8 点5=5 点9=4 点3=3 点7=2 点10=1 点2=0 点6=0 点1=-9                   [此贴子已经被作者于2007-9-3 21:14:42编辑过]                   [此贴子已经被作者于2007-9-3 21:17:49编辑过]
2007-09-03 21:14
回复
取消
提交
此程序即为STAR老师所发程序的姊妹篇,采用SORTDOWN()排序函数对平面采点的高低点进行排序,并告知点的相关位置,功能完全相同。下面为一完整程序段,在PC-DMIS4.2版本中运行。 赋值/V1 = ARRAY(-2,9,8,8,1,0,-3,7,2,-10) 赋值/V2 = SORTDOWN(V1) 赋值/V3 = LEN(V1) 赋值/I = 1 WHILE/I<=V3 赋值/J = 1 WHILE/I<=V3 IF/V2[I]==V1[J] 注释/报告,"点"+J+"="+V2[I] 赋值/V1[J] = "A" 赋值/II = I 赋值/I = V2+1 END_IF/ 赋值/J = J+1 END_WHILE/ 赋值/I = II+1 END_WHILE/ ○程序运行结果 点2=9 点3=8 点4=8 点8=7 点9=2 点5=1 点6=0 点1=-2 点7=-3 点10=-10
2007-09-04 20:28
回复
取消
提交
不知道楼上程序运行过没有.赋值/V2 = SORTDOWN(V1) 我相同的格式在3.7,4.1中皆不能得到正确结果. 以赋值/V0 = ARRAY(-9,0,3,8,5,0,2,8,4,1) 排列后的结果为:3,8,5,8,4,2,1,0,0,-9 迷惑了/
2007-09-04 20:58
回复
取消
提交
你说的问题可能存在,估计是函数本身的问题,在4.2版本已纠正了.不妨验证一下.
2007-09-04 21:16
回复
取消
提交
上述两题解应该称得上是姊妹篇.不同的路径走的是同一个目标.类似的语句格式却为的不是一种思考.应该说语句不多,却包含一定的技巧.相信定会有更多的编程爱好者将能对其进行完全解析.
2007-09-04 21:55
回复
取消
提交
呵呵,闲暇之余也做了一个,最近pcmdis的狗领不到,于是就用其他CNC软件做了一个,标准的DMIS4.0 这个程序思路是这样:需要操作者输入任意一个连续点段的首序号和尾序号,然后对这些点排序,并输出到文本文档。 考虑的不是很精巧,程序行也多呵呵,运行起倒没问题 $定义变量和输出设备--C:\123.txt DECL/COMMON, CHAR,255,dafile DECL/COMMON, CHAR,255,fname,Sname DECL/COMMON, CHAR,255,fnameX DECL/COMMON, DOUBLE,kkk DECL/COMMON, DOUBLE,yyy DECL/COMMON, DOUBLE,aaa DECL/COMMON, DOUBLE,bbB DECL/COMMON, DOUBLE,ccc DECL/COMMON, DOUBLE,ddd DECL/COMMON, DOUBLE,danum DECL/COMMON, DOUBLE,ZS[1000] DID(f1)=DEVICE/STOR,'C:\123.txt' OPEN/DID(f1),DIRECT,OUTPUT $$输入信息 dafile=PROMPT/'输入点名称?' fname=ASSIGN/dafile danum=PROMPT/'输入第一个点序号' aaa=ASSIGN/danum danum=PROMPT/'输入最后一个点序号?' bbB=ASSIGN/danum $$把每个点的Z值提取出来,赋到数组变量ZS里面 DO/kkk,aaa,bbb-aaa+1,1 Sname = ASSIGN/STR(KKK) fnameX = ASSIGN/CONCAT(fname,Sname) ZS[KKK]=OBTAIN/FA(@fnameX),5 kkk=ASSIGN/kkk+1 ENDDO ddd=ASSIGN/aaa $$排序 DO/kkk,1,bbb-ddd,1 DO/kkk,1,bbb-ddd,1 IF/(ZS[ddd].GT.ZS[ddd+1]) ccc=ASSIGN/ZS[ddd+1] ZS[ddd+1]=ASSIGN/ZS[ddd] ZS[ddd]=ASSIGN/ccc ENDIF ddd=ASSIGN/ddd+1 ENDDO ddd=ASSIGN/aaa ENDDO $$输出到文本文档C:\123.txt DO/kkk,1,bbb-ddd+1,1 WRITE/DID(f1),zs[kkk] kkk=ASSIGN/kkk+1 ENDDO                   [此贴子已经被作者于2007-9-5 17:19:46编辑过]
2007-09-05 17:18
回复
取消
提交
首先 向大家道歉--从7月30号从青岛学习完,单位网络改造,天天弄的焦头烂额。所以上来的时间比较少。也很遗憾在青岛没有见到STAR(邢)老师,失去了一次难得的学习机会。 经过实验在3。5中没有“SORTDOWN”函数,所以排序变的复杂些。另外在3。7和4。1中“SORTDOWN”排序错误,不知道什么原因,可能如邢老师说的也许是软件BUG 吧。yangzhi06编程非常灵活,程序中用的“LEN”函数非常巧妙。下面是我以前做的一个程序,比较罗嗦,没时间修正了,发上来大家排砖吧,如果要改正 我想在后面应该加上一个构造平面的语句。然后用平面找正,然后再比较比较好,程序求的是最高的5个点。 稍微改动下就可以求N个最高点了,最底点改变下<, > 号应该可以的。 赋值/V1 = 0 赋值/V2 = 0 赋值/V3 = 0 赋值/V4 = 0 赋值/V5 = -5 赋值/U1 = 0 赋值/U2 = 5 FPTR =文件/打开,F:\HH.TXT,写入 DO/ WHILE/V1<50 D1 =自动/矢量点, 显示所有参数=否 理论值/V1,V2,0,0,0,1 实际值/40,40,0,0,0,1 目标值/V1,V2,0,0,0,1 赋值/V1 = V1+10 文件/写入行,FPTR,D1.Z END_WHILE/ 赋值/V1 = 0 赋值/V2 = V2+10 UNTIL/V2==50 文件/关闭,FPTR DO/ DO/ 赋值/V4 = V4+1 赋值/V6 = D1[V4].Z IF/V6>V5 AND V6
2007-09-05 18:18
回复
取消
提交
以题目要求,此题可以采用数组的四个函数即:1.ARRAY(,,,) ;2.SORTDOWN();3.LEN();4.MAXINDICES()完成对所有点的排序和相对应的位置关系。 其程序如下所示: 赋值/I = 1 赋值/V1 = ARRAY(-2,9,8,8,1,0,-3,7,2,-10) 赋值/V2 = SORTDOWN(V1) 赋值/V3 = LEN(V1) 赋值/V4 = MAXINDICES(V1) WHILE/I<=V3 注释/报告,"点"+V4[I]+"="+V2[I] 赋值/I = I+1 END_WHILE/ 此程序是从高到底的位置排序,只要将函数SORTDOWN();MAXINDICES()改为SORTUP();MININDICES()就可以完成从低到高的位置排序。
2007-09-05 22:54
回复
取消
提交
现在我认为yangzhi06发的上贴应该是本题的最终答案了.应该说本月赛题已达到了满意的效果. 唯独还有一点遗憾要说明,该程序目前只能运行在PC-DMIS4.2版本.所以,我们还有上述另外几个答案供低版本的用户参考. 欢迎大家继续踊跃参与论坛讨论.                   [此贴子已经被作者于2007-9-5 23:47:08编辑过]
2007-09-05 23:37
回复
取消
提交
为了弥补上述”最终题解”仅能在4.2版本中运行的问题,现将姊妹篇第1个答案又做了进一步修改.使之,即要简化程序又要使程序能在3.7和4.2版本均能运行.其完整程序和运行结果如下: 赋值/V0 = ARRAY(-2,0,3,8,5,0,2,8,-4,1) 赋值/V1 = MIN(V0)-1 赋值/V2 = LEN(V0) 赋值/I = 1 WHILE/I<=V2 赋值/VV = MAX(V0) 赋值/V3 = MAXINDEX(V0) 注释/报告,"点"+V3+"="+VV 赋值/I = I+1 赋值/V0[V3] = V1 END_WHILE/ 输出结果如下: 点4=8 点8=8 点5=5 点3=3 点7=2 点10=1 点2=0 点6=0 点1=-2 点9=-4
2007-09-06 20:15
回复
取消
提交
关注我们

海克斯康制造智能

电话咨询
400-6580-400

热线电话(工作时间8:30-17:30)

海克斯康制造智能