例5.4
设有数组X (X1,…,X10) 和Y (Y1,…,Y10) ,编程计算数组Z (Z1,…,Z10) ,其中:
Z1 = X1 + Y1
Z2 = X2 + Y2
Z3 = X3 - Y3
Z4 = X4 - Y4
Z5 = X5 - Y5
Z6 = X6 + Y6
Z7 = X7 - Y7
Z8 = X8 - Y8
Z9 = X9 + Y9
Z10 = X10 + Y10
对于这种问题,也可用循环程序结构来完成。已知循环计数值为10,每次循环的操作数是可以顺序取出的,但所作的操作却有所不同,这里有两种操作:加法和减法。为了区别每次应该做哪一种操作,可以设立标志位,如标志位为0做加法;为1则做减法。这样,进入循环后只要判别标志位就可确定应该做的操作了。显然,这里要做10次操作就应该设立10个标志位,我们把它放在一个存储单元LOGIC_RULE中,这种存储单元一般称为逻辑尺,本例设定的逻辑尺为:
0000000011011100
从低位开始所设的标志位反映了每次要做的操作顺序,最高的6位没有意义,把它们设为0。可以程序框图如动画所示。
这种设置逻辑尺的方法是很常用的。
例如,在矩阵运算中,为了跳过操作数为0的计算,经常采用这种方法。又如,把一组数据存入存储器时,如果其中数值为0的元素很多,也可用这种方法设立一个每位表示一个下标的逻辑尺(这样的逻辑尺可能占有几个字,由数组的长度确定。),0元素就可不占有存储单元了。在例5.5中,每个标志只占一位,如果要表示的特征数更多,则每个标志可占有几位,而在处理方法上是完全相同的。
设立标志位的方法除了如逻辑尺那样可静态地预置外,还可以在程序中动态地修改标志位的值,以达到控制的目的,下例将说明这种方法。
|