マヌケな問題

2003年度の大学入試共通テストの数学2・Bにつぎのような問題がある。問題を読まずに答えがわかってしまうという「マヌケな問題」である。

資料
座標平面上に3つの点P(2,0), Q(9,7), R(8,a) がある。
点S(x,y)の座標とaを入力し、P,Q,Rのうちで、Sに最も近い点とその点までの距離の2乗を出力するプログラムを以下のように作った。
ただし、x,y,aは整数を入力するものとする。

100 INPUT "x,y=";X,Y
110 INPUT "a=";A
120 P=(X-2)*(X-2)+Y*Y
130 Q=(X-9)*(X-9)+(Y-7)*(Y-7)
140 R=(X-8)*(X-8)+(Y-A)*(Y-A)
150 D=P
160 E=Q
170 F=R
180 IF D<E THEN [    (ア)     ]
190 IF E<F THEN [    (イ)     ]
200 PRINT "距離の2乗は";[    (ウ)     ]
210 PRINT "その点は"
220 IF [    (ウ)    ]=P THEN PRINT "点P"
230 IF [    (ウ)    ]=Q THEN PRINT "点Q"
240 IF [    (ウ)    ]=R THEN PRINT "点R"
250 END


この問題は、問(1)と問(2)で(ア)(イ)(ウ)に入れるものを選択させるものだが、実は、問(1)に次のような導入部がついている。

『(ア),(イ)は、それぞれ「DとEの値を入れかえる」と「EとFの値を入れかえる」ということを意味する』

「D<E」ならば「DとEの値を入れかえる」からEの値が小さい方の値になり、「E<F」ならば「EとFの値を入れかえる」からFの値が小さい方の値になることがわかる。
結局は、D,E,Fの中ではFが最小になる。

気のきいたパソコン小僧なら問題やプログラムなど読まなくても、数値の交換の超基本パターンであるから、この部分の記述だけで(ア)(イ)(ウ)の答えがすぐにわかってしまうという間抜けなシロモノである。


蛇足的コメント

100行と110行から変数x,y,aの値が入力されたときは、P,Q,Rの値が決まる。
  1. Pは直線SPの2乗である。
  2. Qは直線SQの2乗である。
  3. Rは直線SRの2乗である。
「Sに最も近い点」を探すのであるから、P,Q,Rの3数の中で最小のものを探し出せばよいことになる。

さて、3つの数の中から最も小さいものを探すのはどうすればよいか。
ちょっと気の利いた幼稚園の入園テストを思い出せばよい。これは、次のようになる。
  1. 3つのうちどれでもいいから2つ取り出して比較し、小さい方を探す。
  2. これと、残った1つと比較する。そのうちの小さい方が、3つの中で最小のものである。
比較は2回で済んでしまう。180行と190行で2回大小を比較しているのはこのことである。
これが終わった段階で最小のものが見つかることになる。

180行
D(=P)とE(=Q)を比較している。そして190行ではE(=P)とF(=R)を比較しているから、Eの方が小さいことがわかる
D < E と比較したときに、小さい方であるDの値をどこかに保存(他の変数)しておく必要がある。
最終的には小さい方がEにならなければならないからである。すなわち、DとEを交換することになる。
  1. Eの方が大きい(Dの方が小さい)場合はその値を交換することになる。
    ここは、別の変数 G を持ち出して、「G=D : D=E : E=G」とすれば D と E が入れ替えられる。
    交換の結果Eの方が小さいことになる。
  2. Eの方が小さい場合はこの交換は起こらない。Eの方が小さいままである。
結局、この段階が終了した後は E の方が小さい値になる。

190行
同様にして、E(=P)とF(=R)を比較する。
  1. Fの方が大きい場合(Eの方が小さい)はその値を交換することになる。
    「G=E : E=F : F=G」として交換し、その結果Fの方が小さいことになる。
  2. Fの方が小さい場合はこの交換は起こらない。Fの方が小さいままである。
結局 F の方が小さいことになる。以上のことから、Fは3つの中で最小になる。

なお、古代BASIC言語では変数は無宣言でいくつでも使えること、コロン(:)を使ってマルチステートメントが書けることを思い出すと、 (ア)(イ)(ウ)は次のようになる。


(ア) G=D : D=E : E=G
(イ) G=E : E=F : F=G
(ウ) F

- 2003/01/20 -