令和4年度 ITパスポート試験 公開問題 問78 解説 チェックデジットの計算
問 78 関数 checkDigit は,10 進 9 桁の整数の各桁の数字が上位の桁から順に格納された 整数型の配列 originalDigit を引数として,次の手順で計算したチェックデジット を戻り値とする。プログラム中の a に入れる字句として,適切なものはどれか。こ こで,配列の要素番号は 1 から始まる。 〔手順〕 (1) 配列 originalDigit の要素番号 1〜9 の要素の値を合計する。 (2) 合計した値が 9 より大きい場合は,合計した値を 10 進の整数で表現したと きの各桁の数字を合計する。この操作を,合計した値が 9 以下になるまで繰 り返す。 (3) (2) で得られた値をチェックデジットとする。 〔プログラム〕 ○整数型: checkDigit(整数型の配列: originalDigit) 整数型: i, j, k j ← 0 for (i を 1 から originalDigitの要素数 まで 1 ずつ増やす) j ← j + originalDigit[i] endfor while (j が 9 より大きい) k ← j ÷ 10 の商 /* 10進9桁の数の場合,j が2桁を超えることはない */ a endwhile return j
- ア j ← j - 10 × k
- イ j ← k + (j - 10 × k) ✓ 正答
- ウ j ← k + (j - 10) × k
- エ j ← k + j
解説
この問題は、合計値 が2桁の数になったとき、その10の位と1の位を分解して足し合わせる処理を問うています。
手続きのポイントは、10進数における桁の抽出方法です。ある2桁の整数 があるとき、10の位は を10で割った「商」であり、1の位は を10で割った「余り」になります。
商 は問題文から です。 一方、10で割った余りは と表現できます。 これらを足し合わせる必要があるため、計算式は となり、これが選択肢イに該当します。
アルゴリズムの考え方
プログラミングにおける数値計算の基本は、10進法の仕組みを演算子に落とし込むことです。今回のケースでは以下のルールを利用しています。
(整数演算での除算) (剰余演算)
この組み合わせは「桁を取り出す」ときや「各桁の数字を操作する」ときによく使われる手法です。例えば、大きな数の各桁をすべて足し合わせたい場合や、特定の桁だけを加工したい場合に、ループ処理と組み合わせて記述します。
試験での活用と応用
この種の問題は、擬似言語における数学的な処理能力を問うものです。特に「余り」を求める式( の部分)は、本来であれば という剰余演算子を使うのが一般的ですが、この問題のように算術演算だけで表現させることで、数値の構造を正しく理解しているかを確認してきます。
ITパスポート試験では、複雑なアルゴリズムに見えても、突き詰めれば「10進数の仕組み(位取り記数法)」に帰着する問題が頻出します。桁数が多い場合や、手順が繰り返される場合は、まず数値を具体的に当てはめて(例: なら 、余りは 、合計 になるはずだ、といった検証)選択肢を削るのが確実な解き方です。
https://www.fe.jitec.go.jp/ https://www.ipa.go.jp/shiken/kubun/ip.html https://it-passport.biz/