加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

家用车入库_MSWLogo-FMSLOgo解

(2022-12-19 16:11:05)
标签:

林老师

pclogo

mswlogo

fmslogo

c

分类: WinXP~7~8~10运行Logo语言
家用车入库_MSWLogo-FMSLOgo解
家用车入库_MSWLogo-FMSLOgo解
      这是个有趣的LOGO复赛编程题,也可以说是LOGO竞赛复赛题中的翘楚,既漂亮又有一定的编程难度。这个题目用FMSLogo-MSWLogo或是PCLogo都能实现编程,今天先来讲讲FMSLogo-MSWLogo的编程答案。原始题目是这样的:
复赛上机题 家用车入库
      现在私家车已经十分普及,家用车不使用时都要进入车库。请编写程序jycru.lgo模拟家用车入库。编程具体要求如下。
      1. 整个图形尺寸不超过670×370。图形屏幕居中。其他尺寸自定。
      2. 车库安排在图形的左上方。车库共3个,从左向右的编号为1-2-3。单个车库内部尺寸100×150。车库壁间隔5。
      3. 为画图简便起见,小车用尺寸50×100的矩形表示,海龟位于“车”的正中。小车前进、后退时从海龟可以看见车的运动状态。
      4. 小车的出发点规定在图形的右下方。小车入库时先沿着半径100的90度弧左转,在向图形的左方前进适当的距离后,再沿着半径100的90度弧左转,然后倒退入库。小车的运动用动画显示。在整个运动入库的过程中,小车不得“走错号”、不得出界、或与车库碰撞。小车入库后要求居中停放。
      5. jycru程序带有一个数据表,数据表指定了小车入库的顺序。例如:
      jycru [ 2  3]
表示依次入库的车库号是 2-1-3 。这个数据表不得为“空表”、表里面的数据可以是 1~3个。表里面的数据可以是1、2、3,顺序任意,但数据不得重复。
      编制好的动画程序如上图所示。

      这个命题看起来玄妙无比,但仔细分析,任何一辆车的入库动作都由4个动作部分组成(参见下图)。
家用车入库_MSWLogo-FMSLOgo解
      第一个动作:A段  这是一个90度的圆弧。
      第二个动作:B段  这是一段直线。但是这段直线的长度大有讲究。进哪个车库全靠这段直线的长度来决定。车库号是从左向右计数的,每个车库占位宽度107。那个47是编程时的补偿数据,它的大小与入口的发车起点的坐标位置直接相关:入口靠右一些,这个数值就大一些,反之就小一些。为了形成动画,就每向左移动一次移动10个点,所以就除以10。这样计算出来的“直线”动画的动作段数就是:
      MAKE "ZX INT(((4-:N)*107+47)/10)
      第三个动作:C段  这也是一段90度的弧线。
      第四个动作:D段  车子倒退进入车库的一段直线。
上面的4个动作构成了各个车库车子进库的完整动作。
      FMSLogo-MSWLogo的源程序如下。

TO JYCRK :C ;主程序 :C是[2 1 3]这样的进库车号表数据
  CS PD    ;清屏落笔
  CK       ;画车库
  RKCL :C  ;三辆车入库的递归
END

TO RKCL :C  ;多辆车入库的递归
  IF EMPTY? :C[STOP] ;所有车都入库了就终止程序
  MAKE "N FIRST :C   ;读当前车的车库号
  RK :N       ;执行入库
  RKCL BF :C  ;去掉数据中已经入库的车号
END

TO RK :N  ;第:N辆车入库
  ;REPEAT 60[FD 100*PI/30 LT 6] 100*PI/30=10.47 解释10.47来源
  SETH 0 PU SETXY 300 -150 PD
  CHE 0 WAIT 100               ;画未起步的车
  REPEAT 15[                   ;画A段圆弧
    PD CHE 0 WAIT 20 PU CHE 7
    LT 3 FD 10.47 LT 3 ]
  MAKE "ZX INT(((4-:N)*107+47)/10)  ;计算B段的长度
  REPEAT :ZX[PD CHE 0 WAIT 20 PU CHE 7 FD 10] ;画B段直线
  REPEAT 15[                    ;画C段圆弧
    PD CHE 0 WAIT 20 PU CHE 7
    LT 3 FD 10.47 LT 3 ] 
  REPEAT 22[PD CHE 0 WAIT 20 PU CHE 7 BK 10] ;画D段倒退入库
  CHE 0 WAIT 100  ;画泊好车的图形
END

TO CHE :K  ;画单个车子的过程 :K=0画黑色 :K=7画白色擦除图形
  SETPC :K
  PU BK 50 LT 90 FD 25 RT 90 PD
  REPEAT 2[FD 100 RT 90 FD 50 RT 90]
  PU FD 50 RT 90 FD 25 LT 90 PD
END

TO CK   ;画车库
  PU SETXY -315 150 PD
  BK 155 RT 90 FD 5 LT 90
  REPEAT 3[FD 150 RT 90 FD 100 RT 90 FD 150 LT 90 FD 5 LT 90] 
  FD 155 SETX -315 PU
END

      如果你对更多的小学LOGO语言竞赛复赛题感兴趣,应找到《复赛详解》来看看:
家用车入库_MSWLogo-FMSLOgo解
家用车入库_MSWLogo-FMSLOgo解

家用车入库_MSWLogo-FMSLOgo解

家用车入库_MSWLogo-FMSLOgo解

家用车入库_MSWLogo-FMSLOgo解

家用车入库_MSWLogo-FMSLOgo解


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有