0

をシミュレートすることになっているLOOPの次のプログラム(元のドイツ語の記事も読むことができます)を理解するのに、どういうわけか苦労していIF x=0 THEN A ENDます。

y:=1;
LOOP x DO y:=0 END;
LOOP y DO A END;

IFこれはステートメントをどの程度正確にシミュレートしますか?なぜ私はこれを行うことができないのですか?

x:=0;
LOOP x DO A END;
4

1 に答える 1

1

この言語が何であるかはわかりませんが、ゼロより大きい限りLOOP cntr DO stmt END;実行される(そして各反復後にデクリメントされる)と仮定すると、これは次のように機能します。stmtcntr

1に割り当てられyます。xがゼロより大きい場合、がy割り当てられ0ます。xがゼロの場合、の値は残りyます1。次のループでは、前のステートメントが実行されなかった場合、つまりがに等しい場合にのみ、がA1回実行されます。この構成の主な利点は、1回だけ実行され、ゼロより大きい場合の値ほど多くは実行されないことです。y1LOOPx0AxLOOP x DO A END;

ロジックをもう一度、ステップバイステップで示します。

  • yに設定されています1
  • yゼロx回に設定されます。これは同等ですIF x <> 0 THEN y:=0 END
  • A実行y回数(ゼロの場合は1x回、ゼロ以外の場合はゼロ回x

これらの3つのステップは、次のように変換されます。がゼロの場合は1回実行し、それ以外の場合xAゼロA回実行します(つまり実行しない)。

于 2012-07-27T07:37:42.833 に答える