表計算ソフトを用いて,買い物金額に応じたポイント数を計算する。買い物金額が1,000円以下では買い物金額の1%,買い物金額が1,000円を超え3,000円以下では買い物金額の2%,買い物金額が3,000円を超える場合は買い物金額の3%のポイントを付与する。ワークシートのセルA2に買い物金額が入力されるとき,ポイント数が表示されるセルB2に入る数式はどれか。ここで,ポイント数の小数点以下は切捨てとする。
| A | B | |
|---|---|---|
| 1 | 買い物金額 | ポイント数 |
| 2 | 3,350 | 100 |
この問題の解説と、これまでの解答の記録です。
表計算ソフトを用いて,買い物金額に応じたポイント数を計算する。買い物金額が1,000円以下では買い物金額の1%,買い物金額が1,000円を超え3,000円以下では買い物金額の2%,買い物金額が3,000円を超える場合は買い物金額の3%のポイントを付与する。ワークシートのセルA2に買い物金額が入力されるとき,ポイント数が表示されるセルB2に入る数式はどれか。ここで,ポイント数の小数点以下は切捨てとする。
| A | B | |
|---|---|---|
| 1 | 買い物金額 | ポイント数 |
| 2 | 3,350 | 100 |
判定順が「A2≧3000 →3%」「A2≧1000 →1%」で、まず境界の向きが誤り。仕様では3,000円ちょうどは2%だが、A2≧3000だと3,000円で3%になってしまう。さらに1,000円超~3,000円の帯に1%(整数部(A2/100))を、1,000円以下に2%(整数部(A2*2/100))を割り当てており、1%と2%の対応が入れ替わっている。
先頭の「A2>3000 →3%」は正しいが、続く「A2>1000 →整数部(A2/100)=1%」が誤り。1,000円を超え3,000円以下の帯は2%であるべきなのに1%を返す。最後の帯(A2≦1000)にも2%(整数部(A2*2/100))を割り当てており、1%と2%の付与率が逆になっている。
正解 付与率の境界は「1,000円以下=1%」「1,000円を超え3,000円以下=2%」「3,000円を超える=3%」で、いずれも境界値をどちらの区分に含めるかが決め手になる。ウは IF(A2≦1000, 整数部(A2/100), IF(A2≦3000, 整数部(A2*2/100), 整数部(A2*3/100))) の形で、まず「A2≦1000」を判定して1%を返し、これが偽(=1,000円超)のときに「A2≦3000」を判定して2%を返し、それも偽(=3,000円超)なら3%を返す。1つ目の判定を通過した時点で「1,000円超」が確定しているため、2つ目の「A2≦3000」は自動的に「1,000円を超え3,000円以下」を表し、仕様の区分と正しく一致する。切捨ては整数部(INT)で処理される。A2=3,350 は3,000円超なので 整数部(3350*3/100)=整数部(100.5)=100 となり、表のB2=100 とも合致する。したがって正解はウ。
「A2<1000」「A2<3000」と、以下(≦)で判定すべきところを未満(<)で判定しているため境界値の扱いが仕様とずれる。1,000円ちょうどは1%であるべきだが A2<1000 が偽になり2%扱いになる。同様に3,000円ちょうども2%であるべきだが A2<3000 が偽になり3%扱いになってしまう。