こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

以下のプログラムを修正して、割り算と掛け算を実現するにはどうしたらいいんでしょうか??
教えてもらえるとありがたいです。

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

投稿日時 - 2006-07-21 11:19:56

QNo.2289579

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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

でしょうか。
命令セットや記憶領域の取得方法により
もっとよい(高速)アルゴリズムが
あります。

ちなみにロジック(コード)は、未検証なので
試してみてくださいね。

投稿日時 - 2006-07-21 15:12:51

お礼

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

投稿日時 - 2006-07-21 21:32:43

ANo.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進数上で割り算、掛け算を実施します。
ループ回数が固定され、レスポンスが一定になるメリットがあるからね。

投稿日時 - 2006-07-21 15:11:05

補足

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

投稿日時 - 2006-07-21 17:23:11

ANo.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
プログラム終了
と、いう感じのものです。
余りを出すためのプログラムですか?

投稿日時 - 2006-07-21 12:21:49

補足

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

投稿日時 - 2006-07-21 14:16:45

お礼

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

投稿日時 - 2006-07-21 21:34:34

あなたにオススメの質問