4.3 Raptor 程序设计
Raptor是基于流程图的编程语言和编程环境,能够帮助初学者设计出可视化的算法(也是程序),避免了使用传统的计算机语言设计算法时遇到的大量语法障碍。Raptor程序是以可视化的方式创建的,通过对流程图(即程序)的跟踪,程序的执行也是可视化的。使用Raptor可以轻松地创建正确的算法,快速地培养人们设计算法的能力。
4.3.1 Raptor程序构成
Raptor程序文件的扩展名为rap。一个Raptor程序由主图(main)流程图和可选的子图(Subchart)流程图以及可选的过程(Procedure)流程图组成。程序从主图开始执行,各个流程图之间可以相互调用。
每个流程图都起始于表示起点的开始符号(Start),结束于表示终点的结束符号(End),如图4-2所示。Raptor程序设计的主要工作就是在流程图的开始符号和结束符号之间插入相关的符号。一个空流程图仅包括开始符号和结束符号,可以执行空流程图,当然无任何功能。
4.3.2 Raptor常量与变量
1.常量
程序运行时,其值不允许变化的量被称为常量。常量包括数值常量、字符串常量、字符常量和布尔常量四种。
例如-12、128、0、23.57和-12.36都是数值常量。
字符串,顾名思义,就是一串字符。字符串常量两端用一对双撇号定界,比如"Hello,John!"和"China"都是字符串常量。
字符型数据用于表示一个字符。字符常量两端用一对单撇号定界,比如'A'和'x'都是字符常量。
布尔常量中的真用true或yes表示,假用false或no表示。
2.变量
程序运行时,其值允许变化的量被称为变量。变量包括数值变量、字符串变量、逻辑变量和字符变量四种。
可以使用赋值符号(Assignment)、输入符号(Input)和过程调用符号(Call)给变量赋值。给一个不存在的变量赋值时将自动创建该变量。不允许读取一个不存在的变量的值,否则将出现错误。
比如用赋值符号在变量x中保存一个数值65的方法是:先插入一个赋值符号,如图4-3 所示,双击新加入的赋值符号,输入变量名“x”和数值“65”,完成后的赋值符号如图4-4所示。
3.标识符
变量、子图和过程需要用名字表示,这些名字被称为标识符。组成标识符的规则是:
(1)首字符为字母;
(2)由字母、数字和下划线组成;
(3)字母不区分大小写;
(4)不能使用系统的保留字。
保留字是系统已经使用的名字,包括运算符名(如逻辑与运算符and和算术求余数运算符mod)、函数名(如正弦函数sin和余弦函数cos)和过程名(如设置显示小数位数的过程Set_Precision)等。
比如a、A、A_1都是合法的标识符,并且a和A是同一个标识符。而1a、_a和a$b都是不合法的标识符,程序设计者也不能将sin和mod用作变量名、子图名和过程名,因为sin和mod是系统的保留字。
4.3.3 Raptor的简单输入与输出
可以用输入符号(Input)从键盘输入一个数值或字符串并保存到一个变量中。比如从键盘输入一个姓名,保存到变量nm1中。方法是,添加一个输入符号,如图4-5 所示;双击新加入的输入符号,输入提示信息“”Name:””和变量名“nm1”;完成后如图4-6 所示。
可以用输出符号(Output)在显示器上输出(以后简称输出)字符串、数值或字符。比如输出半径为1.6的圆面积,方法是:添加一个输出符号,如图4-7 所示;双击新加入的符号,输入表达式“pi*1.6^2”;完成后如图4-8 所示。
4.3.4 运算符与表达式
将数据和运算符组成合法的表达式,就可以实现对数据的处理。
1.算术运算符与算术表达式
算术运算符按优先级由高到低排列如表4-1 所示。假设表4-1 中x和y的值分别为14.37和3。默认情况下,Raptor显示实数时保留4位小数。
2.字符串运算符与字符串表达式
Raptor只有一个字符串运算符,即字符串连接运算符+,优先级为4,用法为
字符串1+字符串2
3.字符运算符与字符表达式
Raptor有两个字符运算符+和-,优先级都是第4级。用法为
字符c + 整数n 和 字符c - 整数n
表达式值分别为比字符c的代码大n的字符和比字符c的代码小n的字符。比如'A'+3的值为'D',’'F'-3的值为'C'。
4.关系运算符和关系表达式
在选择结构和循环结构中,简单的条件使用关系表达式表示。将两个数值或两个字符串或两个字符用关系运算符连接构成关系表达式。关系表达式的格式为:
表达式1 关系运算符 表达式2
表达式1和表达式2的类型必须一致。若指定的关系成立,则表达式的结果为真(true),否则结果为假(false)。
5.逻辑运算符和逻辑表达式
在选择结构和循环结构中,复杂的条件使用逻辑表达式表示。将逻辑值和逻辑运算符组成合法的逻辑表达式可以表示复杂的条件。如果逻辑表达式表示的条件成立,则结果为真(true),否则结果为假(false)。判断变量x的取值属于闭区间[2,100]吗?,条件为:x>=2 AND x<=100。表达式的值为真时,表示x的取值属于闭区间[2,100];否则,x的取值不属于闭区间[2,100]。
4.3.5 函数
在程序中可以使用Raptor函数进行一些运算。
1.基本数学函数
Raptor的基本数学函数有11个
2.三角函数
Raptor的三角函数有8个,如表4-4 所示。表4-4 中的x 和y均为算术表达式。
3.转换函数
Raptor的转换函数有2个。
4.变量类型测试函数
在Raptor程序中,有时需要判断变量的类型,以便确定下一步的操作。比如,只有两个数值才可以进行乘法和除法的运算。试图将一个字符串和一个数值进行乘法或除法运算,将出现错误。Raptor提供了5个变量类型测试函数。
4.3.6 选择结构
在Raptor中,选择结构用选择符号实现。
一个选择符号可以实现2个分支的选择结构,在1个选择符号的某个分支中再嵌套一个选择符号即可实现3个分支的选择结构,…,嵌套n个选择符号即可实现n+1个分支的选择结构。
4.3.7 循环结构
在Raptor中,使用循环符号实现循环结构。环结构可以分为当型循环结构、直到型循环结构和一般型循环结构三种。
4.3.8 数组
数组变量是一组有序变量的集合,简称数组。称数组中每个变量为数组元素。Raptor允许使用一维数组和二维数组。数组名配合下标就可以表示数组元素,下标是从1开始的整数。一维数组元素表示形式为
数组名[下标]
二维数组元素表示形式为
数组名[下标1,下标2]
所谓一维是指每个元素有一个下标,二维是指每个元素有两个下标。
4.3.9 过程与子图
在解决一个复杂问题时,需要较长的程序代码。如果用一段程序实现,容易出错,效率低。可以把复杂的程序分解为若干个独立的子问题,每个子问题分别用一段独立的子程序实现。因为每个子问题都比原问题简单,实现容易,正确率高,效率高。
1.过程(Procedure)
过程是一段具有名称的独立子程序。使用主图标签的快捷菜单即可添加一个过程(包括输入过程名和过程的形式参数变量名,确定参数的传递方式)。使用调用符号调用过程。
2.子图(Subchart)
子图是一段命名的程序,通过主图标签的快捷菜单即可添加子图。子图与过程有很大的差异。过程是一段被封装的程序,过程被调用时通过参数与调用程序之间传递数据,过程内部的变量不能被调用程序访问。而子图是一段没有被封装的程序,子图与调用程序共享相同的变量。可以这样理解,调用子图时,相当于在调用位置插入了子图的代码(去掉子图的开始符号和结束符号后的代码)。使用调用符号调用子图。
如果主图或某个过程偏长,可以划出几段程序分别用子图实现,提高正确率和效率。如果某段程序在多个位置出现,也可以将其用子图实现,同样可以提高正确率和效率。