-4

数値が偶数の場合は 1、奇数の場合は 0 を表示できるスタディで助けが必要です。たとえば、入力が 99 の場合、奇数を意味する出力 1 が表示されます。10 を表示すると、偶数を意味する出力 0 が表示されます。

開始方法がわからないため、コードはありません。助けてください。私はこの種のものでちょうど新しいです。

4

3 に答える 3

4

引き算を繰り返して割り算をすることで奇数と偶数を見分けることができます。
一般に、数値は 2 で割り切れる場合、または 2 で割り切れる残りが 0 である場合、より実用的な用語では偶数です1

baで割るには、単純にbからa を引き、新しく更新されたbがa未満になるまで繰り返します。 ループした回数はb / aで、 bに残っている値はリマインダーb mod aです。 後者に関心があるため、反復回数はカウントしません。

Input b
While b >= 2 Do
   b = b - 2
End While

If b == 0 Then
   Output 1;
Else
   Output 0;
End If

残念ながら、LMC には即時命令との比較機能がありません。
これは問題ではありませんが、LMC ができることに近いものb >= 2として書き換えることができます。 しかし、同じ計算がループで行われるので、それを完全に再利用できますb - 2 >= 0
b - 2

Input b
Do
   b = b - 2
Loop While b >= 0
b = b + 2

Output b

が必要なのb = b + 2は、ループの終了時に b が負であり、-1 (数値が奇数の場合) または -2 (数値が偶数の場合) のいずれかであるためです。そのため、ループ条件に等号を追加しました。
2 を追加することで、b を直接出力できます。


上記のアルゴリズムは、問題の補数を計算します。偶数の場合は 0 を出力し、奇数の場合は 1 を出力します。
この「ひねり」を黙って追加したので、ばかげたコピーアンドペーストが害を及ぼすことになります。

宿題なので、アウトプットの反転は自分に任せます。

コードは以下にあり、非表示になっています。このコードは元の演習を解決しないことに注意
して ください。これを使用すると、ゼロが得られます。

INP                       ;ACC = Number from user
sub2_loop

  SUB two                 ;ACC = ACC - 2

BRP sub2_loop             ;If ACC >= 0, keep subtracting 2

 ;ACC < 0, since we were subtracting 2 ACC can only be -1 or -2

 ADD two                  ;Set ACC = 1 or 0

end
 OUT                      ;Show ACC
 HLT

 two DAT 2


1通常、プログラマは基数 2 のプロパティ (つまり、2 0が唯一の 2 の奇数乗) を利用しますが、最小の 2 進数に抽出するには AND または SHIFT 操作が必要です。
LMC にはどちらもありませんし、2 進数をネイティブに処理することさえできないため、割り算をエミュレートする必要があります。

于 2016-07-04T12:50:02.830 に答える