●問題
第6問 (選択問題) (配点 20)
次のような操作を行うプログラムを作った。
(1)上の3か所の空欄をうめて、このプログラムを完成せよ。
(2)このプログラムを実行し、a=?に25、b=?に100を入力すると、 画面に[カ]個の行が新たに表示される。そのうち第2行目は
[キ] [クケ] [コサシ]
であり、最終行は[スセソタ]である。
(3)このプログラムを実行し、a=?に256、b=?に35を入力すると、[チツ]個の行が新たに表示される。 そのうち最終行は[テトナニ]である。
(注意 : (2)、(3)において、プログラムの実行終了後に表示されるOk、Readyなどの行は考えない。)
- 正の整数 a , b をそれぞれ変数 X , Y に代入する。
- Xを2で割った商と余りを考え、商をあらためてXとおくとともに、Yを2倍し、 それをあらためてYとおく。この操作をXが0になるまで続ける。
- Xが奇数になるときのYの値の総和を求める。
100 INPUT "a=";A 110 INPUT "b=";B 120 X=A : Y=B : S=0 : K=1 130 IF X<>[ア]*INT(X/[イ]) THEN S=S+Y 140 PRINT K,X,Y 150 K=K+1 : X=INT(X/2) : Y=2*Y 160 IF X>=1 THEN GOTO [ウエオ] 170 PRINT S 180 END
(1)上の3か所の空欄をうめて、このプログラムを完成せよ。
(2)このプログラムを実行し、a=?に25、b=?に100を入力すると、 画面に[カ]個の行が新たに表示される。そのうち第2行目は
[キ] [クケ] [コサシ]
であり、最終行は[スセソタ]である。
(3)このプログラムを実行し、a=?に256、b=?に35を入力すると、[チツ]個の行が新たに表示される。 そのうち最終行は[テトナニ]である。
(注意 : (2)、(3)において、プログラムの実行終了後に表示されるOk、Readyなどの行は考えない。)
●問題の急所
- 変数の役割を理解せよ
- XとY : 題意の変数
- K : 一連の処理を繰り返した回数
- S : 求めたい和
- 「**を入力すると、---が表示される」タイプは実験あるのみ本問の(2)、(3)のタイプはセンター試験では頻出です。ここでは、実際に実験します。
(2)ディスプレイに表示されるK,X,Yと、その時のSの値を書きます。本番でも、余白にメモをすればよいでしょう。
- K=1,X=25,Y=100,S=100
- K=2,X=12,Y=200,S=100
- K=3,X=6,Y=400,S=100
- K=4,X=3,Y=800,S=900
- K=5,X=1,Y=1600,S=2500
(3)(2)と同様に、ディスプレイに表示されるK,X,Yと、その時のSの値を書きます。力ずくで押していくやり方- K=1,X=256,Y=35,S=0
- K=2,X=128,Y=70,S=0
- K=3,X=64,Y=140,S=0
- K=4,X=32,Y=280,S=0
- K=5,X=16,Y=560,S=0
- K=6,X=8,Y=1120,S=0
- K=7,X=4,Y=2240,S=0
- K=8,X=2,Y=4480,S=0
- K=9,X=1,Y=8960,S=8960
気づくと楽なやり方 - 指数に着目しようK=9(=8+1)まで繰り返されることはすぐに分かります。なぜなら、 256=28なので、2で8回割り切れるからです。 また、Xの値が1になるまでは、Xの値は偶数です。 したがって、8回目まではSの値は0のままです。 最後、Y=8960(=35*28)なので、Sは8960となります。
●解答
20点満点。
(注) 完答のみ点を与える。
空所の記号 | 解答 | 配点 |
ア | 2 | 3 (*注) |
イ | 2 | |
ウエオ | 130 | 3 |
カ | 6 | 2 |
キ,クケ,コサシ | 2,12,200 | 4 (*注) |
スセソタ | 2500 | 3 |
チツ | 10 | 3 |
テトナニ | 8960 | 2 |
(注) 完答のみ点を与える。