「INTは小数点以下を切り捨てて整数にします」「MODは割り算をした時の余りです」と説明するのは簡単です。割り算をした時の商がINTで、余りがMODです。しかし、小学生の算数を教える先生以外に、大人が余りのある割り算をする機会はめったにないです。
では、実際にどのように使えばよいのでしょうか? ExcelのINTとMODについてはすでに別の記事で基本的な問題を紹介しています。
- 【Excel】INTやMOD関数を用いて数値の一部を取り出す整数問題と関数の過去問(ITパスポート表計算Part3) - わえなび ワード&エクセル問題集
- ExcelのINT関数とMOD関数の使い方で最低限理解しておくべき重要事例【基本情報表計算&Iパス対策】 - わえなび ワード&エクセル問題集
そこで今回は、情報処理試験に出題されるかもしれない(?)レベルの応用問題を出題します。ITパスポートや基本情報技術者試験を受験予定の人はスラスラと回答できるように練習しておきましょう。
目次
0.はじめに
(1)基本情報技術者試験の表計算について
基本情報技術者試験の問題に使用される関数の説明についての著作権はIPA情報処理推進機構にあります(IPA公式サイト:https://www.jitec.ipa.go.jp/)。また、基本情報技術者試験(表計算)の詳細は、市販のテキストをご覧ください。
(2)INTとMODの復習
INTとMODの基本についてはこちらで解説していますのでまずこちらで勉強しましょう。
1.ポイントと料金の違い
(1)区切りの金額を超えたらポイントがもらえる
問題
購入金額700円でくじが1回引けるとき、くじを引く回数を求めなさい。
解説
購入金額700円でくじが1回引けるというのは、700円で1ポイントがもらえるポイント制と同じ考え方です。通常700~1399円は1回で、699円までは0回です。この場合は単純に割り算をすればよいです。
(2)区切りの金額にならなくても料金はかかる
問題
3分で10円かかる電話で、通話時間が1~18分のときの料金をそれぞれ求めなさい。
解説
電話で10円/3分といえば、通常は3分以内であれば10円、6分以内であれば20円・・・となります。3で割ってみます。とりあえず試しに3で割ってみてから考えましょう。
2つずれていることが分かります。だいたい、2つずれているときは、元の数に2を足すか2を引けば解決します(適当)。元の数に2を足すと正しくなります。
10倍すれば完成です。
別解
ずれを直すために1を引いたら、1分~3分が通話料無料になってしまいます。
この場合は1をたします。
*補足*通話時間が小数の時は切り上げ(ROUNDUP or CEILING)のほうがよいです。
2.セット
問題
3つの部品X、Y、Zをそれぞれ1個、4個、16個を使用して、組み立てて作る製品があるとする。現在の在庫数がそれぞれ15個、64個、234個の場合、現時点で作れる製品の個数を求めなさい。
解説
1セットに必要な部品数で割りますが、部品が足りなかったら製品が作れないのですから小数点以下は切り捨てです。
さらに、X、Y、Zが揃わなかったら製品は完成しないので、作れる製品の個数はこれらの最小値です。
3.チェックディジット
問題
ある大学では学生を7桁のコード(学科コード+連番+チェックディジット)で管理している。チェックディジットを次の手順で計算しなさい。
- 学科コードをI2:J6の対応関係に従って数値に変換して、7倍する
- 連番は4桁で、下の桁から順に1,2,3,4を掛ける
- すべての合計を10で割った余りを求め、その計算結果をI9:J18で変換したものをチェックディジットとする。
*補足*MID関数ではなくINTとMODを使ってください。
解説
数値で管理するコードは入力の間違いが良く起こります。特に、人に対してコードを付ける場合、取り違えがあってはいけないので最後にチェック用の桁を用意します。これをチェックディジット(Check Digit)といいます。
まず、上の桁はINTで求めます(参考:ExcelのINT関数とMOD関数の使い方で最低限理解しておくべき重要事例【基本情報表計算&Iパス対策】)。「=INT(B2/10^3)」です。
下の桁はMODで求めます。「=MOD(B2,10)」です。
途中の桁はINTとMODを併用します。「=MOD(INT($B2/10^(D$1-1)),10)」です。
学科コードを数値に変換するにはVLOOKUP(垂直照合)を使います。
- =VLOOKUP(A2,I$2:J$6,2,0)
7倍、4倍、3倍、2倍、1倍します。
- =VLOOKUP(A2,I$2:J$6,2,0)*7+C2*C$1+D2*D$1+E2*E$1+F2*F$1
すべての合計を10で割った余りを求め、I$2:J$6で検索すれば完成です。
- =VLOOKUP(MOD(VLOOKUP(A2,I$2:J$6,2,0)*7+C2*C$1+D2*D$1+E2*E$1+F2*F$1,10),$I$9:$J$18,2,0)
4.JANコード
問題
JANコードは13桁の数値で構成されていますが、右端の桁は、上の12桁の数値を使って計算で求めます。次の計算手順で、13桁目を求めなさい。
- 左側の12桁に1、3、1、3、1、3、・・・を掛ける。
- 合計の下1桁を10から引く。
- 計算した結果が10の場合は0にする。
※なお、JANコードについては別の記事で詳しく解説しています(参考:Excelでバーコード(JANコード)を使うための基礎知識の総まとめ【勉強会資料】)。
解説
JANの問題はITパスポート試験に出題されました。JANコードのチェックディジットの計算方法は世界共通なので知っておいたほうが良いです。上の桁はINTで求めます。「=INT(A2/10^11)」です。
下の桁はMODで求めます。「=MOD(A2,10)」です。
途中の桁はINTとMODを併用します。「=MOD(INT($A2/10^(C$1-1)),10)」です。
1、3、1、3、1、3、・・・と入力して掛けます。
合計を求めます。
下1桁を求めて10から引きます。「10-MOD(SUM(B4:M4),10)」となります。
1から始まる連番で最大値を0にするには、その最大値で割った余りを求めます。したがって、「=MOD(10-MOD(SUM(B4:M4),10),10)」となります。
5.金種計算
問題
(1)セルB2に「10000」と入力した。セル範囲C1:J1に2000円札を除く紙幣と貨幣の種類をすべて求めなさい。
(2)セルA2に「987654」と入力した。1行目の金種の枚数を求めなさい。
解説
金種計算はINTとMODの練習問題の定番です。2で割ります。
5で割ります。これを繰り返します。
10000円札の枚数はINTを使います。
10000円札で支払った後の残りの金額はMODで求められます。
これを5000円で割れば、5000円札の枚数が出ます。
6.曜日(7進数)
問題
2020/1/1が水曜日であることが分かっているとき、2023/12/31は何曜日か。また、2020/1/1~2023/12/31の間に土日は何日あるか。
解説
日付は1900/1/1から始まる連番で管理されているので、7で割ることによって曜日と関連付けることができます。2020/1/1と2023/12/31をそれぞれ7で割って余りを求めます。4と0になります。
4が水曜日であれば、1はその3日前なので日曜日ということになります。
つまり、2023年の年末が最後の土日となります。2020年が水曜日から始まっていることから、日数の差を7で割って1を足せば土日の回数を求めることができます。
209回となります。
土日なので416日となります。
7.光の三原色(16進数)
問題
画面の色はRed・Green・Blueの3色の光を合わせることで表現している。RGBの光の量はそれぞれ16進数の00~FFの256段階で表現する。16進数のカラーコードを10
進数に直しなさい。また、10進数を16進数のカラーコードに直しなさい。
解説
Excelには16進数と10進数を変換する関数としてHEX2DEC・DEC2HEXがありますが、情報処理技術者試験ではもちろん使えないので、MODとINTで計算するしかありません。
16進数のA~Fは、10進数の10~15に対応しています。HLOOKUP(水平照合)が使えます。上の桁*16+下の桁です。
- =HLOOKUP(B3,$B$9:$Q$10,2,0)*16+HLOOKUP(C3,$B$9:$Q$10,2,0)
16進数の場合も上の桁はINTで求めます。「=INT(I6/16)」です。
10進数の12は16進数のCにあたります。これは照合検索(LOOKUP)で求められます。
- =LOOKUP(INT(I6/16),$B10:$Q10,$B9:$Q9)
下の桁はMODで求めます。「=MOD(I6,16)」となります。
- =LOOKUP(MOD(I6,16),$B10:$Q10,$B9:$Q9)
解説は以上です。