【例 1】设有如下的数据结构
我们可根据所给定的数据结构,画出 Jackson 图
可写出 Jackson 伪代码:
名册 seq
open 名册表
表头 seq
打印 表名
打印 表栏名
表头 end
表
头
教职工名册
姓 名 类 别 津 贴
表
体
表体 iter until 文件结束
表行 seq
打印 姓名
打印 类别
津贴 select 教师类别
打印 教师津贴
or 职工类别
打印 职工类别
津贴 end
表行 end
表体 end
close 名册表
名册 end
【例 2】 一个正文文件由若干个记录组成,每个记录是一个字符串。要求统计每个记录中
空格字符的个数,以及文件中空格字符的总个数。要求的输出数据格式是,每复制一行输
入字符串之后,另起一行印出这个字符串中的空格数,最后印出文件中空格的总个数。
对于这个简单例子而言,
输入和输出数据的结构很容易
确 定 。 图 中 是 用 Jackson 图
描绘的输入/输出数据结构。
确定了输入/输出数据结
构之后,下一步是分析确定在
输入数据结构和输出数据结构
中有对应关系的数据单元。在
这个例子中哪些数据单元有对
应关系呢?输出数据总是通过
对输入数据的处理而得到的,
因此在输入/输出数据结构最高层次的两个单元(在这个例子中是“正文文件”和“输出表
格”)总是有对应关系的。这一对单元将和程序结构图中最顶层的方框(代表程序)相对应,
也就是说经过程序的处理由正文文件得到输出表 格。下面还有哪些有对应关系的单元呢?
因为每处理输入数据中一个“字符串”之后,就可以得到输出数据中一个“串信息”,它们都是
重复出现的数据单元,而且出现次序和重复次数都完全相同,因此,“字符串”和“串信息”也
是一对有对应关系的单元。
Jackson 程序设计方法的第三步是从数据结构图导:出程序结构图。按照前面已经讲
述过的规则,这个步骤的大致过程是:
首先,在描绘程序结构的 Jackson 图的最顶层画一个处理框“统计空格”,它与“正文文
件”和“输出表格”这对最顶层的数据单元相对应。但是接下来还不能立即画与另一对数据单
元(“字符串”和“串信息”)相对应的处理框,因为在输出数据结构中“串信息”的上层还有“表
格体”和“空格总数”两个数据单元,在程序结构图的第二层应该有与这两个单元对应的处理
框——“程序体”和“印总数”。因此,在程序结构图的第三层才是与“字符串”和“串信息”相对
应的处理框——“处理字符串”。在程序结构图的第四层似乎应该是和“字符串”、“字符”及“空
格数”等数据单元对应的处理框“印字符串”、“分析字符”及“印空格数”,这三个处理是顺序执
行的。但是,“字符”是重复出现的数据单元,因此“分析字符”也应该是重复执行的处理。改
进的 Jackson 图规定顺序执行的处理中不允许混有重复执行或选择执行的处理,所以在“分
析字符”这个处理框上面又增加了一个处理框“分析字符串”。最后得到的程序结构图为下图
所示。
Jackson 程序设计方法的第四步是列出所有操作和条件,并且把它们分配到程序结构
图的适当位置。首先,列出统计空格个数需要的全部操作和条件如下:
⑴ 停止 ⑵打开文件
⑶ 关闭文件 ⑷印出字符串
⑸ 印出空格数目 ⑹印出空格总数
sum:=sum+1 totalsum:⑺ ⑻ =totalsum+sum
⑼ 读入字符串 ⑽ sum:=O
totalsum:⑾ =0 pointer:⑿ =l
pointer:⒀ =pointer+1 I⑴ 文件结束
I⑵ 字符串结束 S⑶ 字符是空格
在上面的操作表中,sum 是保存空格个数的变量,totalsum 是保存空格总数的变量,
而 pointer 是用来指示当前分析的字符在字符串中的位置的变量。