新しく発言する EXIT インデックスへ
第1回センター模試

  第1回センター模試 まめた 2003/05/13 21:48:41 
  お答えします。 大久保 2003/05/15 01:41:21 
   ├親切に教えていただきありがとうございまし... まめた 2003/05/15 10:57:46 
   └なにぁ にならりのま 2003/10/03 20:34:21 

  第1回センター模試 まめた 2003/05/13 21:48:41  ツリーへ

第1回センター模試 返事を書く
まめた 2003/05/13 21:48:41
11日にあったセンター模試の第5問のプログラムの問題について質問があります。
回答を見ても良くわからないので誰かわかる人がいたらよかったら教えてください。
以下が問題です。

 次のプログラムは3つの自然数A,B,C入力したとき、この3数の最大公約数Gを出力するものである。
 ただしINT(X)はXをこえない最大の整数を与える関数である。

100 INPUT "A,B,C=";A,B,C
110 FOR I=1 TO A
120 IF INT(A/I)*I<>A THEN GOTO [アイウ]
130 IF INT(B/I)*I<>B THEN GOTO [エオカ]
140 IF INT(C/I)*I<>C THEN GOTO [キクケ]
150 G=I
160 NEXT I
170 PRINT "G=";G
180 END

(1)[アイウ]〜[キクケ]に適当な行番号を入れてプログラムを完成せよ。
(2)このプログラムを完成し、A,B,C=? に対応して6,21,120を入力すると、G=[コ]が表示される。
このとき、120行は[サ]回実行され、120行のGOTO[アイウ]で[アイウ]行へは[シ]回移る。
次に、130行は[ス]回実行され、130行のGOTO[エオカ]で[エオカ]行へは、[セ]回移る。
さらに140行は[ソ]回実行される。

質問
1.自分はわからなかったので3つの最大公約数を数字を見て決めました。これで別にいいんですよね?
2.GOTOの[アイウ]〜[キクケ]をどうやって決めたらいいのかがわかりません。

誰か教えてやってください。    

  お答えします。 大久保 2003/05/15 01:41:21  ツリーへ

Re: 第1回センター模試 返事を書く
大久保 2003/05/15 01:41:21
お答えします。
まず質問1ですが、答えしか求められていないのならいいと思います。
次に質問2ですが、A,B,Cに適当な数を代入すると考えやすくなります。ここではA=6,B=12,C=18として考えます。
まず 120 IF INT(A/I)*I<>A THEN.... ですが、これは「AがIで割り切れるかどうか」を調べるものです。例えばI=2のとき、
(6÷2の整数部分)×2=3×2=6
と、もとの6に戻ります。でもI=4のときは
(6÷4の整数部分)×2=1×2=2
と、もとの6には戻りません。これは、6÷4の答えが整数ではない(=割り切れない)からです。割り切れないという事は、Iの値を変えてみなければなりません。そのためには NEXT I を実行しなければならないので、[アイウ]=[160]になります。
同様に、IF INT(B/I)*I<>B THEN ....もBがIで割り切れない場合はNEXT I を実行しなければなりません。よって、[エオカ]=[160]となります。140 IF INT(C/I)*I<>C THEN...も同様に[キクケ]=[160]。
さて、A=6,B=12,C=18なので、I=2,3,6のとき(160行にとばされない=全ての数の約数)に 150 G=I が実行されます。Gにはそのつど3つの数の公約数が、大きくなるように代入されていきますから、結果的にG=最大公約数になるわけです。

(まちがっていたらごめんなさい)

   ├親切に教えていただきありがとうございまし... まめた 2003/05/15 10:57:46  ツリーへ

Re: お答えします。 返事を書く
まめた 2003/05/15 10:57:46
親切に教えていただきありがとうございました。
いまいちINTのところがわからなかったんですよ。
でも大久保さんの説明を見てると解けるようになりました。
本当にありがとうございました。

   └なにぁ にならりのま 2003/10/03 20:34:21  ツリーへ

Re: お答えします。 返事を書く
にならりのま 2003/10/03 20:34:21
なにぁ


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。