• 締切済み

プログラムの割り算と掛け算

以下のプログラムを修正して、割り算と掛け算を実現するにはどうしたらいいんでしょうか?? 教えてもらえるとありがたいです。 1:read M[1] 2:read M[2] 3:M[1] :=M[1]-M[2] 4if M[1]>=0 then goto3 5: M[1] :=M[1]+M[2] 6:write M[1] 7:halt

みんなの回答

  • process9
  • ベストアンサー率29% (81/271)
回答No.3

質問の内容は、剰余演算みたいですね。(余りの算出) 低水準言語というか最低限の命令セットしかない機械語 なんですね? てことは、ビット演算があるかどうか分からないので、 一番単純な方法(アルゴリズムだと) 商演算(割り算の商のみ求める) 記憶領域にM3が取れるとして、 1:read M[1] 2:read M[2] 3:M[3] := 0 4:M[1] :=M[1]-M[2] 5:M[3] := M[3] + 1 6:if M[1]>=0 then goto4 7: M[3] :=M[3] - 1 8:write M[3] 9:halt (要は、割られる数から割る数を引く回数をカウントする。 10/3 10-3-3-3 >= 0 で 割る数を3回引くので 商は3 ) 正乗演算(掛け算)(負数は、2進の取り方によるので割愛) 1:read M[1] 2:read M[2] 3:if M[1] = 0 then goto10 4:if M[2] = 0 then goto10 5:M[1] :=M[1] + M[1] 6:M[2] := M[2] - 1 7:if M[2] > 0 then goto5 8:M[1] :=M[1] - M[1] 9:write M[1] 10:halt 11:write 0 12:halt (要は、掛けられる数に掛ける数分繰り返し和をとる 2*3= 2+2+2(2を3回足す)=8 ) でしょうか。 命令セットや記憶領域の取得方法により もっとよい(高速)アルゴリズムが あります。 ちなみにロジック(コード)は、未検証なので 試してみてくださいね。

club06
質問者

お礼

どうもありがとうございました。参考になりました。 教えていただいて感謝しています☆

すると、全ての回答が全文表示されます。
  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.2

>RAMの命令セット・・・ RAM (Random Access Memory)? 命令セットだとすると、チップは何? 割り算は「/」、掛け算は「*」で通らない前提だと・・・ 参考例で考えてください。 割り算 1:read M[1] 2:read M[2] 3:M[3] :=0 4:M[1] :=M[1]-M[2] 5:M[3] :=M[3]+1 6:if M[1]>=0 then goto4 7:M[1] :=M[1]+M[2] 8:M[3] :=M[3]-1 9:write M[3] 10:halt 掛け算 1:read M[1] 2:read M[2] 3:M[3] :=0 4:M[3] :=M[3]+M[1] 5:M[2] :=M[2]-1 6:if M[2]>0 then goto4 7:write M[3] 8:halt で出来上がりかな? M[3]が使える前提ですけどね。 普通命令セットで、割り算、掛け算が使用できない場合割り算、掛け算を実現するには足し算、引き算のループではなく、ビットずらしで2進数上で割り算、掛け算を実施します。 ループ回数が固定され、レスポンスが一定になるメリットがあるからね。

club06
質問者

補足

RAMは(Random Access Machine)です。 説明不足でスイマセン・・・

すると、全ての回答が全文表示されます。
  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.1

言語は何でしょう? 割り算は「/」、掛け算は「*」で通らないという事でしょうか? そもそも、何のプログラムなんでしょう? >1:read M[1] M[1]を読み込む >2:read M[2] M[2]を読み込む >3:M[1] :=M[1]-M[2] M[1]-M[2]を実施し、M[1]に代入する >4if M[1]>=0 then goto3 M[1]が0以上なら3:に飛ぶ >5:M[1] :=M[1]+M[2] M[1]+M[2]をM[1]に代入する >6:write M[1] M[1]を書き込む >7:halt プログラム終了 と、いう感じのものです。 余りを出すためのプログラムですか?

club06
質問者

お礼

わざわざ教えていただきどうもありがとうございました。 感謝です(*^_^*)

club06
質問者

補足

RAMの命令セットなんですけれども、どうすればいいのでしょうか??

すると、全ての回答が全文表示されます。

関連するQ&A