Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 以下代码中的循环不变量是什么_Loops_Conditional Statements_Invariants_Loop Invariant - Fatal编程技术网

Loops 以下代码中的循环不变量是什么

Loops 以下代码中的循环不变量是什么,loops,conditional-statements,invariants,loop-invariant,Loops,Conditional Statements,Invariants,Loop Invariant,此示例代码中的循环不变量是什么。 这是一段用C编程语言实现的摘录代码: //pre-condition m,n >= 0 x=m; y=n; z=0; while(x!=0){ if(x%2==0){ x=x/2; y=2*y; } else{ x=x-1; z=z+y; } }//post-condition z=mn 以下是我的初始答案(循环不变): y>=n x=0 我仍然不确定这一点。谢谢。您的答案确实是不变的,但很少提及循环的条件

此示例代码中的循环不变量是什么。
这是一段用C编程语言实现的摘录代码:

//pre-condition m,n >= 0
x=m;
y=n;
z=0;
while(x!=0){
  if(x%2==0){
    x=x/2;
    y=2*y;
  }
  else{
    x=x-1;
    z=z+y;
  }
}//post-condition z=mn
以下是我的初始答案(循环不变):

  • y>=n
  • x=0

  • 我仍然不确定这一点。谢谢。

    您的答案确实是不变的,但很少提及循环的条件。你总是需要寻找特定的不变量。在这种情况下,这很容易,因为在循环中只有两个(独占)操作

    第一个
    x'=x/2;y'=2*y
    看起来在
    x*y
    下是不变的

    第二个
    x'=x-1;z'=z+y不是:
    x'*y'=x*y-y
    。但如果您再次添加
    z
    ,它将保持不变<代码>z'+x'*y'=z+y+x*y-y=z+x*y

    幸运的是,第一个条件在
    z+x*y
    下是不变的,因此我们找到了循环不变量

    • 先决条件:
      z+x*y=m*n
    • 后置条件:
      x=0
      (循环条件),因此我们可以从不变量推断:
      z=m*n

    在循环之前,您的答案都没有完成。您可以通过选择代码并单击
    {}
    按钮来格式化代码。@Howard先生,我已经修复/更新了我的初始答案。怎么样?谢谢。但是我想问一下你是如何得出z+xy=mn的(作为一个先决条件)?m*n从何而来?@Miciah Amberong不变量是
    z+x*y
    ,而
    x
    y
    z
    的初始值在代码中给出。