●問題
第6問 (選択問題) (配点 20)
正の整数a1 , a2 , c が与えられたときに、s1=a1とし
によって得られる数の列 a3 , a4 , ... , anを表示させるために、 次のようなプログラムを作ってみた。
以下のプログラムをにおいてINT(X)はXを超えない最大の整数を与える関数である。
(1) このプログラムを実行し、a1,a2,c=? に対して1,1,1 を入力し、 n=? に対して 6 を入力すると
が表示される。また、a( 6 ) が表示される直前の S の値は[オカ]である。
(2) 次に、定義の式(1)、(2)に従って計算してみる。
a1=1 , a2=1 , c=1 とすると
a3=[キ] , a4=[ク] , a5=[ケ] , a6=[コサ] , ...
となる。
(3) (1),(2)よりプログラムのどこかに誤りがあることが分かった。このプログラムの160行、 170行を修正して、はじめに意図したように動かしたい。
(4) (3)のように修正したプログラムを実行し、a1,a2,c=?に対して 1,1,2を、 n=?に対して 6 を入力するとき、a( 6 )が表示される直前のBの値は[セ]である。
si=si-1+ai | * * * (1) | |
ai+2=ai+1+ ( si / c の整数部分 ) | * * * (2) |
によって得られる数の列 a3 , a4 , ... , anを表示させるために、 次のようなプログラムを作ってみた。
以下のプログラムをにおいてINT(X)はXを超えない最大の整数を与える関数である。
100 INPUT "a1,a2,c=";A,B,C 110 INPUT "n=";N 120 S=A 130 FOR J=3 TO N 140 A=B+INT(S/C) 150 PRINT "a(";J;")=";A 160 B=A 170 S=S+A 180 NEXT J 190 ENDこのプログラムが意図どおり動作するか確かめてみる。
(1) このプログラムを実行し、a1,a2,c=? に対して1,1,1 を入力し、 n=? に対して 6 を入力すると
a( 3 )= [ア] | |
a( 4 )= [イ] | |
a( 5 )= [ウエ] | |
a( 6 )= 34 |
が表示される。また、a( 6 ) が表示される直前の S の値は[オカ]である。
(2) 次に、定義の式(1)、(2)に従って計算してみる。
a1=1 , a2=1 , c=1 とすると
a3=[キ] , a4=[ク] , a5=[ケ] , a6=[コサ] , ...
となる。
(3) (1),(2)よりプログラムのどこかに誤りがあることが分かった。このプログラムの160行、 170行を修正して、はじめに意図したように動かしたい。
130 FOR J=3 TO N 140 A=B+INT(S/C) 150 PRINT "a(";J;")=";A 160 [シ] 170 [ス] 180 NEXT Jの[シ]、[ス]に当てはまるものを、次の(0)から(9)のうちから一つずつ選べ。
(0) A=B | (1) B=A | (2) A=A+1 | (3) B=B+1 |
(4) S=S+A | (5) S=S+B | (6) S=A | (7) S=A+B |
(8) S=S+1 | (9) S=B+1 |
(4) (3)のように修正したプログラムを実行し、a1,a2,c=?に対して 1,1,2を、 n=?に対して 6 を入力するとき、a( 6 )が表示される直前のBの値は[セ]である。
●問題の急所
「**を入力すると、---が表示される」タイプは実験あるのみ
このように、何回か繰り返す場合、実験すると効果的です。 ここでは、変数A,B,Sの値をトレース(追跡)します。 なお、Cの値は変化しないので省略。
状態 | J | A | B | S |
---|---|---|---|---|
初期値 | - | 1 | 1 | 1 |
1回目 | 3 | 2 | 2 | 3 |
2回目 | 4 | 5 | 5 | 8 |
3回目 | 5 | 13 | 13 | 21 |
4回目 | 6 | 34 | 34 | 55 |
上の表から、a(3)=2,a(4)=5,a(5)=13となります。 また、a(6)が表示される直前のSの値( S(5)の値 )は、21と分かります。 なぜなら、140行でA(J)への代入をし、150行でA(J)の値を表示しているからです。(以上[ア]-[オカ]の解答)
中には単なる計算問題もある
[キ]-[コサ]までは、「定義に従って計算せよ」と指示されているので、指示通り計算すればよいです。すると、[キ]=2,[ク]=4,[ケ]=8,[コサ]=16と求まります。
変数の役割を理解せよ
与えられた変数がどんな役割をするのか、確認してみましょう。 問題文の定義の式(1),(2)とプログラム中の変数の対応を考えると、 Aはai+2,Bはai+1,SはSiのことと分かります。 これを考慮してプログラムを読んでみましょう。 まず、120行ですが、これはs1=a1を意味しています。 140行は、定義の式(2)にあたります。
再びトレースしてみよう
(3)の答を出すために、定義に従った場合を考えよう。Aはai、Bはai+1、SはΣAi(i=1->J)を表します。ここでのポイントは、それぞれの変数が何のことを示しているか、です。
上の表から、160行の和についての操作を考えると、S=S+Bが適切。たとえば、J=3のときを考えればわかります。
次に、B=A(つまり、いままでのai+2をai+1と改めること)は正しいことがわかります。
状態 | J | A | B | S |
---|---|---|---|---|
初期値 | - | 1(=a1) | 1(=a2) | 1(=S1) |
----- | 2 | 1 | 2 | 2 |
1回目 | 3 | 2 | 4 | 4 |
2回目 | 4 | 4 | 8 | 8 |
3回目 | 5 | 8 | 16 | 16 |
4回目 | 6 | 16 | 32 | 32 |
●解答
20点満点です。
空所の記号 | 解答 | 配点 |
ア | 2 | 2 |
イ | 5 | 2 |
ウエ | 13 | 2 |
オカ | 21 | 2 |
キ | 2 | 1 |
ク | 4 | 1 |
ケ | 8 | 1 |
コサ | 16 | 1 |
シ | 5 | 3 |
ス | 1 | 3 |
セ | 3 | 2 |
Copyright© 2002-2003 Home , All rights reserved.