2016-07-04 6 views
-2

番号が偶数の場合は1を、奇数の場合は0を表示することができます。たとえば、入力が99の場合、出力1が表示され、これは奇数を意味します。私が10を表示すると、それは偶数を意味する出力0を表示します。番号を取得するLittle Mans Computer(LMC)コードを作成するにはどうすればいいですか?数字が奇数の場合は1を表示し、数字が偶数の場合は0を表示します


私は申し訳ありませんが、それを起動する方法を知らないので、私は、コードを持っていない:C PLSの助け。私はこの種のものの中でちょうど新しいです。

答えて

0

うわー、その物はANDを持っていませんか?
LMC link 1
LMC wiki

フム、[OK]を、私はANDせず、これはトリッキーで、しばらく考えてみましょう。アルゴリズムレベルでは、入力値を0まで1に減らしてループを繰り返す必要があるように見え、各反復はresult = 1 - resultになります。最後には、結果が1または0(最初の値がresult0または,)、入力番号の奇妙さによって決まります)になります。

これで、LMCのためにこれを書かなければならなくなりました。今はそれをすぐに学ぶつもりはありません。 完全に紛失している場合は、wikiページを読んで、エミュレータを見つけて、いくつかのサンプルコードを実行し、指導で指導を勉強してください。次に、いくつかの例を試して、それらがどのように動作するかを見て、次に私が書いたアルゴリズムに戻って、あなた自身でそれを書き込もうとします。

(まだ失われている場合は、それぞれの点について具体的な質問をする必要があります。回答がはるかに簡単で、一部は非常に適しています。元の質問は少し広すぎて欠けていますあなたはすでに落とされておらず、「保留」しているのだろうか?) (楽しみのために)

編集:
r=r-1はあなたが唯一の減算を持っているとき01の間で反転する方法方法であること。通常、CPUにはxornotの命令があり、ビット単位のアセンブラプログラマという観点からは操作が簡単ですが、私はJavaでr = r-1を使用して、同僚のために読みやすくしています。 xorであり、それらはr^=1で困惑している。

3

繰り返し減算による除算を行うことで、奇数と偶数を区別することができます。
一般に、数値は2で割り切れる場合であっても、2で除算の残りがゼロである場合にはより実用的な意味でです。 によって、我々は単にBからを引くと、bたての更新未満なるまで繰り返すことができBを分割する


我々はループ回数がBに残された値は、リマインダーB modのB/されています。
私たちは後者に興味があるので、反復回数は数えません。

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

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

残念ながら、LMCはが即時命令と比較していません。
b >= 2b - 2 >= 0と書き換えることができますが、これはLMCができることに近いものです。
しかしb - 2数だった場合ループで行わ同じ計算であるので、我々はb = b + 2が原因でループBからの出口で必要とされ、完全に

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

Output 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


通常プログラマは、(2 は、2つの唯一の奇数のパワーである、すなわちこと)ベースの2つのプロパティを活用しかし、それは少なくとも2進数字に抽出するためのAND演算またはSHIFT演算を必要とする。
LMCはどちらも持っていませんし、2進数でもネイティブに動作しません。したがって、私たちは部門をエミュレートする必要があります。

+0

ありがとうございますが、私はまだ正しいコードを探しています。 :c –

+2

@larctinmartdayos私のポイントは明らかです:これはコーディングサービスではなく、あなたは宿題をするときには決してチートをしてはいけません。私の答えは、LMCコードでは、それは通常許容されるさらに多くです。 –

関連する問題