先上效果图

由于课程设置,选修了一门非常非常小众的REBOL语言的程序设计概论,就自己观点来看,这门语言小众,语法晦涩,教材也不太好,书中作者试图一直把我们以门外汉这样灌输知识给我们,我觉得这点作者做的不是特别好,比如说流行语言中的变量,用书中作者的话就变成了单字。。。赋值就是设字。。。这看来非常的不专业,而且某种程度上貌似在拐弯,这是我对这本教材不能接受的地方。当然,对于初学者来说,这无可厚非。欸,怪我怪我,来了这么渣的专业,全机电学大物3,就我们班学大物2(2比3难),你说一堆搞机器人的学的比一堆学影视动画广告特技的还简单,这课程设置真是呵呵哒。 好了,吐槽完了,说正事吧。这个日历是课程大作业,占总成绩30分。由于本系不是每个人都喜欢程序设计,就像我讨厌画画一样,欸,所以,在家靠父母,出门靠朋友,能帮的尽量帮咯。作业要求是本程序中的第二种输出,我多做了几个功能,源码也贴上吧。看到博客的相信你们都有需求,能改的尽量改咯,全抄的后果是啥我没试过。。。欸,也考考你们的动手能力啦

REBOL
[title: "Calendar"version: 1.0.0author:wizChen
]
;判断数据是否合法
validata: func["判断数据是否合法"year [integer!]month [integer!]day [integer!]
]
[if( (year < 1) or (year > 9999) or (month < 1) or (month > 12))[return FALSE]if( day < 0)[return FALSE]if(day == 29)[return ( (month == 2) and (isLeapYear year) or (month != 2))]if(day == 30)[return ((month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12))]if(day > 31)[return FALSE]return TRUE
]
;如果输入某年某月某日,进行'1'操作处理
setDays: func["如果输入某年某月某日,进行'1'操作处理"]
[weekDay: 0year: str2int ask { please input the year:}month: str2int ask { please input the month:}day: str2int ask { please input the day:}while[ ! validata year month day ][year: str2int ask { please input the year:}month: str2int ask { please input the month:}day: str2int ask { please input the day:}]weekDay: remainder ( getAllDays year month day ) 7switch/default weekDay[0[print [ year"/"month"/"day"/" "today is Sunday" ]outThreeLines]1[print [ year"/"month"/"day"/" "today is Monday" ]outThreeLines]2[print [ year"/"month"/"day"/" "today is Tuesday" ] outThreeLines]3[print [ year"/"month"/"day"/" "today is Wednesday" ]outThreeLines]4[print [ year"/"month"/"day"/" "today is Thursday" ]outThreeLines]5[print [ year"/"month"/"day"/" "today is Friday" ]outThreeLines]6[print [ year"/"month"/"day"/" "today is Saturday" ]outThreeLines]][print "data is illegal!"]
]
;如果选输入某年某月,进行'2'操作处理
setMonth: func["如果选输入某年某月,进行'2'操作处理"]
[weekDay: 0year: str2int ask { please input the year:}month: str2int ask { please input the month:}day: 1while[ ! validata year month day ][year: str2int ask { please input the year:}month: str2int ask { please input the month:}]weekDay: ( remainder ( getAllDays year month day ) 7 + 1 )outPrint year month
]
;如果输入某年,进行'3'操作处理
setYear: func["如果输入某年,进行'3'操作处理"]
[m: 1year: str2int ask { please input the year:}month: 1day: 1while[ ! validata year month day ][year: str2int ask { please input the year:}]while[ m <= 12 ][outPrint year mm: m + 1]]
;函数功能:提示用户输入,进行操作选择
inputData: func ["提示用户输入,进行操作选择"]
[flag: TRUEwhile[flag][print "Welcome to my Calendar,please input the selections below"print ""print "1:input the year,month and day,showing what day is it today"print ""print "2:input the year and month,showing the month calendar"print ""print "3:input the year,showing the year calendar"print ""print "4:exit"print ""choose: str2int ask { please input a number: }switch/default choose[1 [ setDays ]2 [ setMonth ]3 [ setYear ]4 [ quit ]][print "wrong input,please input again!"inputData]]
]
;得到这一天距离公元1年1月1日多少天
getAllDays: func ["得到这一天距离公元1年1月1日多少天"year [integer!]month [integer!]day [integer!]
]
[i: 1j: 1monthDays: 0yearDays: 0sumDays: 0mEveryMonth: [ 31 28 31 30 31 30 31 31 30 31 30 31 ];while循环自加计算年数对天数的影响while[ i < year ][either isLeapYear i[yearDays: yearDays + 366][yearDays: yearDays + 365]i: i + 1];while循环自加计算月数对天数的影响while[ j < month][monthDays: monthDays + ( pick mEveryMonth j)if(isLeapYear year )[monthDays: monthDays + 1]j: j + 1]sumDays: yearDays + monthDays + dayreturn sumDays
]
;判断是否为闰年
isLeapYear: func["判断是否为闰年"year [integer!]
]
[;取余运算符 remainder arg1 arg2return ((( remainder year 4 ) == 0) and (( remainder year 100 ) != 0) or (( remainder year 400 ) == 0 ))
]
;string类型转integer类型
str2int: func["string类型转integer类型"str [string!]
]
[return ( to-integer str )
]
;月份翻译转换
monthTrans: func["月份翻译转换"month [integer!]
]
[switch/default month[1 [return "January"]2 [return "February"]3 [return "March"]4 [return "April"]5 [return "May"]6 [return "June"]7 [return "July"]8 [return "August"]9 [return "September"]10 [return "October"]11 [return "November"]12 [return "December"]][print "data is illegal!"]
]
;格式化输出
outPrint: func["格式化输出"year [integer!]month [integer!]]
[weekDay: 0day :1n: 1isFisrtLine: TRUEprint ["            "year"A.D"(monthTrans month)]print "      SUN      MON      TUE      WES      THU      FRI      SAT"weekDay: (remainder (getAllDays year month day) 7)switch/default weekDay[0 [prin ""]1 [prin "              "]2 [prin "                       "]3 [prin "                                "]4 [prin "                                         "]5 [prin "                                                  "]6 [prin "                                                           "]][print "data is illegal!"]mEveryMonth: [ 31 28 31 30 31 30 31 31 30 31 30 31 ]while[ n <= (pick mEveryMonth month) ][weekDay: remainder weekDay 7either weekDay == 0[either isFisrtLine[prin ""][print ""]isFisrtLine: FALSEprin "     "outChar n][either isFisrtLine[prin ""][prin "     "]isFisrtLine: FALSEoutChar n]weekDay: weekDay + 1n: n + 1]outThreeLines
]
;格式化输出字符串
outChar: func["格式化输出字符串"dayNum[integer!]
]
[either dayNum < 10[prin ["  "dayNum]][prin[" "dayNum]]
]
;输出三行空字符
outThreeLines: func["输出三行空字符"]
[i: 0while[i <= 2][print ""i: i + 1]
]
;执行脚本
inputData

这个同样功能的日历用C++写的时候200多行,用这门语言写用了300行。欸,C++已经够繁重了,这们脚本语言看起来真不咋地,比他强的一抓一大把,个人觉得学python都比学这好。至少人家用的python人数比rebol多多少。。。欸,吐槽归吐槽,然后又有什么卵用呢。

最后几个内建REBOL函数解释一下吧,免得看的云里雾里(也可以自己去官方文档查看用法,或者直接在REBOL输入? FunctionName即可查看函数的功能,这儿FunctionName指的是函数的名字,比如说你要查exit函数的功能,输入? exit,它便会返回此函数的功能): 1.remainder函数功能:取余 2.pick函数功能:简单讲就是从一个block中取出对应下标的数据 好像其他的也没什么好讲了,就这样吧

版权声明:本文为博主原创文章,未经博主允许不得转载。

原博发布在CSDN,地址:http://blog.csdn.net/wiz_Chen/article/details/46780533

转载于:https://my.oschina.net/wizChen/blog/475420

用一门非常小众的语言REBOL写日历(万年历)打印的程序相关推荐

  1. 【c】C语言编程写的一个http下载程序

    来自: 百度空间-软件工程师 大家都很熟悉HTTP协议的应用,因为每天都在网络上浏览着不少东西,也都知道是HTTP协议是相当简单的.每次用到FlashGet之类的下载软件下载网页,当用到那个" ...

  2. 用 C语言的写出几个小程序

    系列文章目录 前言 1.第一章:求出一个整型数组中的最大值 2.第二章:打印出100~999之间所有的水仙花数 3.第三章:输入一个数,打印出n行杨辉三角 4.第四章:小只因跳楼梯问题 5.第五章:创 ...

  3. Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持

    Java面试题 22 牛客 Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(          ) A Java反射主要涉及的类如C ...

  4. Rust —— 一门没有GC的语言

    Rust语言教程(1) - 一门没有GC的语言 来自:Jtag特工 原文:https://www.jianshu.com/p/67c94459997a 缘起 本来这一系列文章并不在计划中.昨天跟一些同 ...

  5. Rust语言教程(1) - 一门没有GC的语言

    缘起 本来这一系列文章并不在计划中.昨天跟赵磊和七哥讨论没有GC管理内存的问题. 讨论到没有GC情况下管理内存的学习曲线,七哥认为学习曲线不陡而是使用曲线陡.诚然,如果只有malloc和free,确实 ...

  6. python将字符串逆序_为什么说Python是一门伟大的入门语言?(附免费教程)

    Python 是一门伟大的入门语言.作为一门伟大的编程语言,一定要具备一些特征,其中有五项特征是非常重要的: 非常棒的首次体验:就像书的开始,首先一定要能够"沉迷",学习新知识一定 ...

  7. Java真的是一门编译型的语言吗——即时编译器JIT

    Java真的是一门编译型的语言吗--即时编译器JIT 如有错误请大佬指正 JIT是什么 JIT(Just-in-Time,实时编译)一直是Java语言的灵魂特性之一. 让我们回忆一下Java程序是如何 ...

  8. CoffeeScript不是一门值得学习的语言

    译注:看到这篇文章时发现不论在国内还是国外的网站上都有很多人在争论,很有意思.不过令人汗颜的是有些同学似乎只看了标题就开始吵了起来,完全没理解作者的真正意图.如果有兴趣,请耐心看完. ======= ...

  9. python是一门什么课程-为什么说Python是一门伟大的入门语言?丨课程推荐

    原标题:为什么说Python是一门伟大的入门语言?丨课程推荐 作者:Elliott Hauser 本文节选部分:Elliott Hauser 的文章 Why Python is a Great Fir ...

最新文章

  1. 02-dispatch_barrier
  2. 动态引入/添加js脚本
  3. Python程序开发——第四章 字典与集合
  4. 用Groovy读取本地文件的代码
  5. Win11系统如何恢复隐藏文件
  6. mysql limit 越大越慢_mysql 优化之14:php mysql limit 分页优化,页面值越大查询越慢...
  7. 包括循环和分支的C语言程序,《C语言程序设计》分支和循环的C程序设计.ppt
  8. 16. 页框回收 2010-02-28 22:56 591人阅读 评论(0) 收藏...
  9. 电信吉比特光纤猫虚拟服务器设置,吉比特光纤猫内置wifi怎样设置上网
  10. GREAT-UPD 开源软件使用笔记
  11. 怎么样绘制简易地图,如何制作一个电子地图?
  12. 【零售知识】供应商结算
  13. “创客天下·杭向未来”2020杭州海外高层次人才创新创业大赛
  14. HDMI线、DP线、DVI线、VGA线
  15. 水仙花数有哪些?要100到1000之间所有的水仙花数
  16. wnmp环境 php7,WNMP 开发环境搭建
  17. JGG | 河北大学杜会龙组综述植物泛基因组学研究
  18. modis 通道简介
  19. 讨论:报表的未来在哪里?
  20. 韩国美女黑客是怎样的一种存在?

热门文章

  1. 降低 Spark 计算成本 50.18 %,使用 Kyligence 湖仓引擎构建云原生大数据底座,为计算提速 2x
  2. R语言问题【已解决】读取CSV稳健出错:invalid multibyte string
  3. js 比较两个日期的大小
  4. 解决磁盘空间不足的问题
  5. 面向智能制造的数字仓储系统解决方案
  6. 如何对ChatGPT进行Prompt逆向工程, Prompt engineering生成Prompt的核心是给出例子,反推生成例子的通用Prompt模板mjourney,给出图片生成该图的Prompt
  7. Jungo WinDriver
  8. AI时代,数据挖掘过时了吗?—企业数据挖掘成功之道(理论篇)
  9. 揭笔记本维修黑幕 浅谈我们该如何应对
  10. 操作系统学习笔记——北京大学陈向群老师课后及习题答案(6)