電子書籍の厳選無料作品が豊富!

「CASL2のプログラムを作成せよ」とのことで、次の問題が出されました。

問1.GR1の中身の値(正の整数)とGR2の中身の値(正の整数)の最大公約数をGR3 に入れて返すようなサブルーチンGCDを作れ。再帰を利用すること。
  (ヒント)
  最大公約数を求めるには、ユークリッドの互除法というアルゴリズムがある。C 言語で記述すると、再帰を使って以下のように書ける。

 int gcd (int x,int y){
if (y==0)return x;
return gcd(y,x%y);
}


問2.IN命令により入力された10進数の数値を、16進数に変換して、OUT命令により 表示するプログラムをかけ。

以上の二つです。
手前勝手な事情ですが、明日8/9の午後4時までに、解答の方をよろしくお願いします。

A 回答 (1件)

レポートのようですので、ヒントだけにします。


(1)ユークリッドの互除法は2つの数を割り算して余りと除数を取り出します。
  この2つで、更に割り算し・・・を繰り返し、余りが0になった時、除数が
  最大公約数になっているというものです。
  同じ計算を繰り返すので再帰処理が使えます。

  C言語のヒントを見ると、そのようになっています。注意すべきは、最初に
  x>yとしておくと判りがいい事です。

  CASL2でやる注意点は次の通りです。
   ・演算は全てレジスター演算でやる事。
   ・定数以外はメモリーに取らない事。
   ・関数の代わりに再帰のCALL文を使用。

(2)IN命令で入力されると文字列です。これを桁ごとに数値化して、
  桁の重みをかけながら10進数(2進数)になおします。
  その後、4ビットずつ切り出して(2進数の形をした16進数)それぞれを
  16進(文字)に変換して出力エリアに入れます。
  最後にOUT命令で出力します。

この回答への補足

せっかくのヒントなのですが、さっぱりわかりません。
なんとか解答の方をお願いできないものでしょうか?
ちなみにレポートです。これが提出できないと、単位をくれないようで・・・。

補足日時:2002/08/09 13:55
    • good
    • 0
この回答へのお礼

タイムオーバーとなってしまいました。
とりあえず、なんとか形にはなったので、大丈夫でしょう。
ヒント、ありがとうございました。
では

お礼日時:2002/08/09 20:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!