给出以下代码片段,其中x是数字。
{ y >= 0 }
z = 0
n = y
while (n > 0) begin
z = z + x
n = n – 1
end
它的计算方法是什么?证明它,显示你如何得出循环不变量。
我该怎么办呢?
答案 0 :(得分:2)
这个例子被称为最正确的程序,因为它在每个软件验证过程中都得到了证明。以下是每个步骤中包含不变量的程序列表:
{ y >= 0 }
z = 0 // invariant: z = 0
n = y // invariant: n = y and z = 0
while (n > 0) begin // loop invariant: y * x - n * x = z
z = z + x
n = n – 1
end
// Final invariant: n = 0 and y * x = z
此示例的所有理论详细信息均在my paper page 118中提供。
答案 1 :(得分:0)
对于给定的X
和Y
,它会计算X * Y
。
在开始时,Z
的值为零,N = Y
(循环的变量将在循环中倒计时)。
循环执行Y
次,并且在每次执行时,它会将X
累积到Z
。
最后,当N
达到0时,循环将终止,那么Z
的值应为X * Y
。