AOBA's Information Processing Education
1998/07/21
注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。
注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。
「ブラウザのフォントがゴシック体の方へ」
今週の問題も、明朝体にした方がいいです(X(エックス)と×(掛ける)の区別がつきにくい)
「平成1年第1種 午後 問6」 問6 売買委託手数料計算に関する次の記述を読んで、設問1〜3に答えよ。
売買委託手数料(以下、手数料という。)は、売買金額×手数料率で計算する。手数料率は、売買金額の階層によって表1のように異なる。したがってその計算は、売買金額の階層別に金額,手数料率を適用し、その積算金額が手数料となる。
![]()
<計算例>売買金額350万円の場合の手数料
(100万円×1.20/100)+(200万円×1.00/100)+(50万円×0.90/100)=36,500円この手数料計算サブルーチンを作成するに当たり、
(1)A君は、表2の料率表(10行,2列)を用いて、図1の流れ図によって対応した。
(2)B君は算式を変形し、売買金額に料率を乗算し定数を加える簡便な方法を考え、表3の料率表(9行,3列)を用いて、図2の流れ図によって対応した。
<計算例> 350万円×0.90/100+5,000=36,500円なお、流れ図及び解答群の中の変数AMTは売買金額、FEEは手数料を示し、ともに引数として与えられる。
![]()
![]()
![]()
![]()
設問1 A君の流れ図(図1)について、次の各問に答えよ。
(1) ( ア ),( イ )を図1の記述にならって条件式で埋めよ。
(2) ( ウ ),( エ )は、下の解答群a〜gの中から選び、記号で答えよ。設問2 B君の流れ図(図2)について、次の各問に答えよ。
(1) ( オ ),( カ )を図2の記述にならって条件式で埋めよ。
(2) ( キ )は、下の解答群h〜lの中から選び、記号で答えよ。設問3 B君の料率表(表3)の定数 ( ク ) を数値で示せ。
ウ,エに関する解答群
a FEE+(X(I+1,1)−X(I,1))*X(1,2)/100 b FEE+(X(I,1)+X(I−1,1))*X(1,2) c FEE+(X(I,1)+X(I−1,1))*X(1,2)/100 d FEE+(X(I,1)−X(I−1,1))*X(1,2)/100 e FEE+(AMT+X(I,1))*X(1,2)/100 f FEE+(AMT−X(I−1,1))*X(1,2)/100 g FEE+(AMT−X(I,1))*X(1,2)/100 キに関する解答群
h FEE+Y(I,1)*Y(I,2)/100+Y(I,3) i FEE+AMT*Y(I,2)+Y(I,3) j AMT*Y(I,2)+Y(I,3) k AMT*Y(I,2)/100+Y(I,3) l Y(I,1)*Y(I,2)/100+Y(I,3) (注)本問題は第1種の過去問題です。現在の第2種とは解答の形式が異なりますし、レベルもやや高いのですが、とりあえずそのまま解いてみてください。
解説 かなり昔の第1種の問題です。設問3はちょっと難しいので、ここを正解した方は自信を持ってよいでしょう。
設問1について
A君の流れ図は比較的ノーマルですね。
ここでは、問題文にある350万円を例に取って考えます。
<計算例>売買金額350万円の場合の手数料
(100万円×1.20/100)+(200万円×1.00/100)+(50万円×0.90/100)=36,500円上記の計算例における()内のそれぞれでFEEを計算し、それをすべて加算することによって最終的なFEEを求めています。
A君の流れ図の空欄(ウ)と(エ)でもってFEEを求めていますが、A君の流れ図が<計算例>通りだとすれば、最後の(50万円×0.90/100)は、空欄(エ)の部分で処理を行うはずです(流れ図で(エ)以下に処理がないから)。
とすれば、残りの(100万円×1.20/100)と(200万円×1.00/100)は、空欄(ウ)の部分で処理を行うことになります。
以上はあくまでも推測にすぎませんが、何らかの仮説を立てて処理を考えてみることは、アルゴリズム問題を解く上で必要です。(I=2)ループ1回目の(ウ):FEE + 100万円×1.20/100 → FEE....(1)
(I=3)ループ2回目の(ウ):FEE + 200万円×1.00/100 → FEE....(2)
ここで、ループ脱出
(I=4)(エ):FEE + 50万円×0.90/100 → FEEウについて
(1)における100万と(2)における200万の部分は、表1の手数料率表における「Aを超えB以下の金額の部分」に該当することは明らかです(B−A)。さらに、(1)における"1.20/100"と(2)における"1.00/100"は、それぞれの「手数料率」に該当します。
これらを、A君の料率表Xを用いてどう表現するかを考えます。(I=2)ループ1回目の(ウ):
FEE+(1,000,000-0)×1.20/100=FEE+(X(2,1)-X(1,1))*X(2,2)/100
(I=3)ループ2回目の(ウ):
FEE+(3,000,000-1,000,000)×1.00/100=FEE+(X(3,1)-X(2,1))*X(3,2)/100
Iの値に注意すれば、空欄(ウ)は、
FEE+((X(I,1)-X(I-1,1))*X(I,2)/100
と分かります。エについて
同じく、<計算例>の350万円を例にとって考えます。
先の空欄(ウ)で、100万円と200万円のそれぞれの手数料について計算済みです。すると、これを合計した300万円以下すべての手数料が計算済みですので、350万から差し引いた残りの50万円の部分についての手数料を、空欄(エ)で求めればよいことになります。
以上の点をA君の料率表Xを用いてどう表現するかを考えます。
(I=4)(エ):
FEE+(3,500,000-3,000,000)×0.90/100=FEE+(AMT-X(3,1))*X(4,2)/100
Iの値に注意して空欄(エ)は
FEE+(AMT-X(I-1,1))*X(I,2)/100アとイについて
例えば売買金額が350万円の手数料を計算するのに、500万円を超える売買金額の手数料を計算するのはナンセンスです。だから料率表を前から探索していき、料率表中の売買金額が処理する売買金額(AMT)を超えた場合に、ループを脱出する必要があります。
そこで、"AMT≦料率表中の売買金額"の終了条件が必要です。
ところで、350万円の場合はI=4でループを脱出しますが、料率表の売買金額であるX(4,1)は500万円,同じくX(3,1)は300万円です。
以上を総合して空欄(ア)はAMT≦X(I,1)と分かります(AMT<X(I,1)も正解です...ちょうどの値の時ループを1回多く回りますが、空欄(エ)の部分で調整されます)。もう一つの終了条件である空欄(イ)は、表の終わりまで探索した時ですので、I≧10です。もちろんI=10でも正解です。
なお、I>10ではないことに注意してください。空欄(エ)でX(I,2)を使用しますので、ループを脱出した時のIは表の中を指さなければなりません。設問2について
B君の料率表の3列目が何を意味するか問題ですが、問題文中の<計算例>を見れば設問2は解けます。先に空欄を埋めてしまいましょう(3列目の意味が分かってから、再度考え直しましょう)。キについて
<計算例> 350万円×0.90/100+5,000=36,500円350万円はAMTに該当します。また、B君の料率表を見れば、0.90はY(I,2)に該当し、5,000円はY(I,3)に該当することが分かります(2列目と3列目をよく見ること)。
したがって求める答えは、AMT*Y(I,2)/100+Y(I,3)です。オとカについて
設問1の(ア)と(イ)と同様に考えればいいでしょう。
(オ)はAMT≦Y(I,1) か AMT<Y(I,1).......ちょうどの値で計算すると、等号ありでもなしでも同じ手数料になることが分かります。
(カ)はI≧9 か I=9設問3について
最初に断りを1点。
これから説明の中に「損」という言葉が出てきますが、これはあなたが手数料を受取る側として考えてください。B君の料金表の第3列の謎(マジックナンバー)を解きましょう。
仮に、売買金額150万円の手数料を考えます。<計算例>に従うと、手数料=150万円×1.00/100+α
で計算されますが、このαが第3列の数値です(ここまでは大丈夫ですね)。
つまり、150万円×1.00/100だけの手数料では「損」です。
なぜなら、150万円のうち100万円は1.20%の手数料がもらえるはずなのに、150万円すべて1.00%として計算しているからです(差し引き0.20%足りません)。
でその損分はといえば、100万円×(1.20-1.00)/100=2,000円で、これがY(2,3)つまり、300万円以下の金額における第3列の数値になっています。次に売買金額350万円の手数料を考えます。<計算例>に従うと、
手数料=350万円×0.90/100+α
で計算され、350万円×0.90/100だけの手数料では「損」です。
300万円以下については1.00%の手数料をもらえるのだから、(150万円の時と同じように考えて)少なくても、300万円×(1.00-0.90)/100=3,000円は「損」です。
ところがまだ足りません。
300万円以下の部分には、100万円以下の部分で受取るべき手数料も含まれるはずなのに、それが加味されていません。その金額は、150万円の時に計算した2,000円です。
したがってこれを合計した損分は、300万円×(1.00-0.90)/100+2,000円=5,000円で、これがY(3,3)つまり、500万円以下の金額における第3列の数値になっています。
このように順に考えていくと、空欄(ク)は、
3000万円×(0.60-0.40)/100+27,500円=87,500円
と求めることができます。解説は以上ですが、ちょっと気になった点を一つ。
問題文からはB君の流れ図が良いような印象を受けますが、これはちょっと疑問です。確かにB君の流れ図は処理の効率は良いのですが、A君の流れ図と比べて可読性が悪い上に、保守性にも問題があります(手数料率の変更など)。
A君の流れ図も誉められたものではありませんけど、事務処理的なアプリケーションであれば、(今なら)A君の流れ図の方がまだ良いといえます。
ではまた来週。
解答 設問1
(ア),(イ)順不同
(1) ( ア ) AMT≦X(I,1) AMT<X(I,1)でも正解 ( イ ) I≧10 I=10でも正解 (2) ( ウ ) d ( エ ) f 設問2
(オ),(カ)順不同
(1) ( オ ) AMT≦Y(I,1) AMT<Y(I,1)でも正解 ( カ ) I≧9 I=9でも正解 (2) ( キ ) k 設問3
(ク)87,500