raptor程序设计案例教程-ch4

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
同样,由于子图具有名称,可以作为一种功能的 抽象,分级实现的子图,可以将较大的程序编写 的容易令人理解
子图的定义与调用基本上与子程序类似,但无需 定义和传递任何参数
例4-2中的output子图
子图和子程序的命名
与变量不同的是,变量是一种被操作的对象,保 存一种具体的计算结果或中间量,所以变量名称 以名词(或代号)为多见;
而子程序承担某种功能或动作,所以需要使用一 些动词或动词与名词的搭配来命名
在RAPTOR中,一般无需在一个子程序中设计过多 的功能,所以命名以简单、具体为要。例如,例 4-2中,使用count_for()作为统计子程序的名字、 output作为子图的名称就比较容易理解
模块化程序设计的设计过程
1.自顶向下:即先考虑总体,后考虑细节; 先考虑全局目标,后考虑局部目标。这种 程序结构按功能划分为若干个基本模块, 这些模块形成一个树状结构。
数单词子程序
start符号中的( in:a,in:char,out:co unt)被称为子程 序接口参数,也 被称为子程序形 式参数(形参)
子程序接口定义
RAPTOR任何参数都 可以是单个的变量 或数组,都可以定 义为(in)、(in,out) 、(out)三种形式中 的任何一种输入、 输出属性
2.模块化:模块化是把程序要解决的总目标 分解为分目标,再进一步分解为具体的小 目标,把每个小目标称为一个模块;
3.逐步求精:对复杂问题,应该设计一些子 目标做过渡,逐步细化
子图Biblioteka Baidu子程序的相互关系
在编制RAPTOR程序时,子图和子程序是两种 不同的模块形式
一般情况下,main子图与所有的子图共享 变量;而子程序的变量在子程序结束时, 除去out的参数传给调用它的模块之外,其 他变量将全部释放
子程序特点
子程序运行中的所有变量都“自成系统” ,与调用它的程序没有关系。调用它的程 序,只是通过调用子程序接口参数与它交 接“原材料(初始数据)”(定义为Input 的变量)和“产成品(计算结果)”(定 义为Output的变量)
子程序的所有变量在子程序运行过程中存 在,运行结束后,除了传递回调用程序的 参数,所有其它变量立即删除
但是,如果子程序调用子图,它们之间的 变量生命周期又该如何处理呢?
子图与子程序之间的相互调用与 变量关系
子程序与变量
Main子图其实也可以看成一个子程序。 子程序是相互独立的,级别平等的,所以
调用关系并不会在程序上构成级别关系 每个子程序有各自的变量:
main函数的变量是在程序体中声明的, 子程序中的函数变量在程序头和子程序体中都
RAPTOR的设计者在权衡利弊之后,放弃了 全局变量的设置,而是使用存取子程序来 代替全局数据,用全局数据能作的一切
矩阵乘法
矩阵乘法是线性代数的基本算法之一 熟悉和编制矩阵乘法对深入了解线性代数
和计算方法有重要意义
案例问题
矩阵乘法要求第一个矩阵的列数(column)和 第二个矩阵的行数(row)相同,若A为m×n 矩阵,B为n×p矩阵,则他们的乘积AB会是 一个m×p矩阵。其乘积矩阵的元素可由下 式得出:
为了解决复杂的问题,必须能够研究问题 的“主要方面(big issues)”
模块化的主要作用
程序设计中,通过组合一系列相关指令, 组成分立和离散的过程,就可以抽象所有 的细节
模块化的主要作用包括:
降低复杂性 避免代码段重复 改进性能
英文单词统计
例4-1:请设 计一个程序, 计算一个英文 文章中,使用 了“a”开头 的单词的次数
RAPTOR为何不设全局变量
全局变量会带来的问题
对全局数据的疏忽改变 伴随全局变量的奇怪的别名问题。 全局数据妨碍重新使用的代码。 全局变量会损害模块性和可管理性
RAPTOR为何不设全局变量
全局变量的好处
保存全局数值,有时候需要在整个程序中都要 用到某些数据。
代替命名常量。 方便常用数据的使用。 消除“穿梭”数据
英文单词统计(续)
例4-2 请设计一个程序,在例4-1的问题 求解基础上,统计使用了“a~z”所有 字母开头的单词的次数,并输出统计结 果
分析:
解这个问题程序似乎只要把例4-1的部分程序 再复制、粘贴25次,做一点修改就可以解决 问题。但是,可以将例4-1中的程序改造成一 个子程序,或者是一种抽象,以便“复用”
可以声明
子图与变量
子图其实可以看做在一头一尾有一个 turn_to语句的代码块
调用子图时“turn to”到子图,子图执行完 成后再“return”到原来的位置
如果是main子图调用了这个子图,它所使 用的变量就是main子图的
如果是子程序调用了它,它的变量就是这 个子程序的,变量的生命周期随子程序结 束而结束
矩阵乘法的原理
根据矩阵相乘公式可以推出
(AB)11=a11b11+a12b21+a13b31+a14b41 (i=1,j=1) (AB)12=a11b12+a12b22+a13b32+a14b42 (i=1,j=2) (AB)21=a21b11+a22b21+a23b31+a24b41 (i=2,j=1) (AB)22=a21b12+a22b22+a23b32+a24b42 (i=2,j=2) (AB)31=a31b11+a32b21+a33b31+a34b41 (i=3,j=1) (AB)32=a31b12+a32b22+a33b32+a34b42 (i=3,j=2)
第4章 子图与子程序的应用
《RAPTOR程序设计案例教程》
学习目标
程序设计中为什么要模块化? 子图与子程序有何不同? 子图与子程序如何应用? 子程序与递归
问题与抽象
在计算机科学中,将实际问题抽象化是解 决问题的关键要素之一。2008发表在美国 Proceedings of the National Academy of Sciences杂志上的一项研究成果表明,人类 的大脑平均只能同时积极关注约4件事情, 大大少于以往研究所得的7件事情的结论
子程序调用
调用count_for() 子程序的main 子图
重要计算过程 通过子程序 count_for的调 用并赋予实际 参数(实参) 来完成
有关RAPTOR子图
RAPTOR的子图是将main子图进行扩展或折叠的一 种方法,所有子图与main子图共享所有变量
在main子图中可以反复调用某个子图,以节省相 同功能语句段的重复出现
相关文档
最新文档