顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。WITNESS系统中的大多数命令都可以作为顺序结构中的语句。
分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。
分支结构有单向分支和多向分支语法结构,分别如下:
(1) 单向分支,也叫简单分支结构
IF <条件表达式>
<命令行序列>
ENDIF
该语句首先计算<条件表达式>的值,当<条件表达式>的值为真(T)时,执行<命令行序列>;否则,则执行ENDIF后面的命令。
(2) 多向分支,也叫复杂分支结构
IF <条件表达式1>
<命令行序列1>
ELSE
<命令行序列2>
ENDIF
该语句首先计算〈条件表达式1〉的值,当〈条件表达式1〉的值为真时,执行〈命令行序列1〉中的命令;否则,执行〈命令行序列2〉中的命令;执行完〈命令行序列1〉或〈命令行序列2〉后都将执行ENDIF后面的第一条命令。
(3)使用分支语句应注意的几点:
l IF… … ENDIF必须配对使用;
l 〈条件表达式〉可以是各种表达式或函数的组合,其值必须是逻辑值;
l 〈命令行序列〉可以由一个或多个命令组成,也可以是条件控制语句组成的嵌套结构。
(4)示例
IF (water_level >= 0) AND (water_level <= 5)
PRINT "The level in the water tank is low"
ELSEIF (water_level > 5) AND (water_level <= 10)
PRINT "The level in the water tank is normal"
ELSE
PRINT "The level in the water tank is high"
ENDIF
这段程序是用来检测容器中的水位的。变量water_level记录容器的水位,当水位在[0,5]之间时,在交互窗口(interact box window)中打印出“The level in the water tank is low”语句,提醒水位较低;如果第一个条件不满足,判断第二个条件表达式,看水位是否在(5,10]之间,若表达式为真,在交互窗口中打印出“The level in the water tank is normal”语句,提醒水位正常;当条件二也不满足时,唯一的一种情况就是水位高于10了,此时在交互窗口中打印出“The level in the water tank is high”语句,提醒水位超高了。
允许有限次重复执行某一特定的程序。
(1)计数型循环
基本语法如下:
FOR〈循环变量〉=〈循环变量初值〉TO〈循环变量终值〉 [STEP〈循环变量步长〉]
〈命令行序列〉
NEXT
参数说明:
循环变量:一般情况下为整型变量,并且其数量为一,即不是数组;
循环变量初值、循环变量终值:数值型常量、变量或表达式;
循环变量步长:每次步进的长度,可以为整数,也可以为负数;缺省时为1。
语句功能:
该语句用〈循环变量〉来控制〈命令行序列〉的执行次数。执行语句时,首先将〈循环变量初值〉赋给〈循环变量〉,然后判断〈循环变量〉是否大于或小于〈循环变量终值〉,若结果为“真”,则结束循环,执行ENDFOR 后面的第一条命令;否则,执行〈命令行序列〉,〈循环变量〉自动按〈循环变量步长〉增加或减少,再重新判断〈循环变量〉当前的值是否大于或小于〈循环变量终值〉,直到其结果为真。
示例
NUMBER_FOUND = 0
FOR BUFFER_INDEX = 1 to NPARTS(STORE(1))
IF STORE(1) at BUFFER_INDEX:color=red
NUMBER_FOUND = NUMBER_FOUND + 1
ENDIF
NEXT
这段程序用来统计缓冲区store(1)中,颜色为红色的部件的数量。变量NUMBER_FOUND用来统计红色部件的数量,开始时被置零;BUFFER_INDEX是循环变量;NPARTS(STORE(1))函数计算出缓冲区STORE(1)中的部件数量;IF分支用来判断STORE(1)中排于第BUFFER_INDEX位置的部件的属性color是否等于“red”,如果为真,统计变量NUMBER_FOUND自动加1,如果为假,则执行ENDIF后面的语句;执行完成一次IF……ENDIF语句后,则循环变量自动增加1,然后判断循环变量是否大于循环变量终值,如果为假,再执行IF语句,如果为真,结束循环,执行NEXT后面的程序,循环结束。
(2)“当”型循环
语法结构:
WHILE <条件表达式>
<命令行序列>
ENDWHILE
注:ENDWHILE可以缩写为END。
语句功能:
当<条件表达式>为真时,一直执行<命令行序列>,直到<条件表达式>为假时,循环结束。
示例:
WHILE NPARTS(STOCK) > 90
PRINT "Warning! The STOCK buffer is nearly full."
ENDWHILE
该段程序实现当缓冲区STOCK中的部件数量大于90时,在交互窗口发出提醒信息“Warning! The STOCK buffer is nearly full.”。
(3)使用循环语句时应注意的几点
l WHILE和ENDWHILE、FOR和NEXT必须配对使用。
l 〈命令行序列〉可以是任何WITNESS的命令或语句,也可以是循环语句,即可以嵌套为多重循环。