問題
問78
関数checkDigitは、10進9桁の整数の各桁が上位の桁から順に格納された整数型の配列originalDigitを引数として、次の手順で計算したチェックデジットを戻り値とする。プログラム中のaに入れる字句として、適切なものはどれか。ここで、配列の要素番号は1から始まる。

- j ← j – 10 × k
- j ← k + (j – 10 × k)
- j ← k + (j – 10) × k
- j ← k + j
[出典:ITパスポート試験 令和4年度 問78]
スポンサーリンク
正解
正解は「イ」です。
解説
この問題は、「チェックデジット」と呼ばれる仕組みを理解し、それを計算するアルゴリズムに必要なコードを選ぶものです。チェックデジットは、入力データの正確性を検証するための補助的な数字で、例えば、クレジットカードやバーコードの番号で利用されています。
具体的には、次の手順をプログラムで実現するために、適切な計算式を選ぶ問題です:
- 入力データ(配列originalDigit)内の数字を合計します。
- 合計が9以下になるまで、各桁の数字を合計し直します。
- 最終的な値を「チェックデジット」として使用します。
正解のコード「j ← k + (j – 10 × k)」は、特に以下の目的を達成するために使われます:
- jが10以上の場合の桁の合計計算:
- jを10で割った商を「k」とします。
- jから10 × kを引き、残りの値を計算します。
- その結果をkに加えることで、桁の合計を求めることができます。
- 例えば、j = 27の場合:
- k = 27 ÷ 10 = 2(商)
- j – 10 × k = 27 – 20 = 7
- k + (j – 10 × k) = 2 + 7 = 9
- 繰り返し処理で9以下になるまで計算:
- 上記の操作を繰り返すことで、最終的に1桁の数字に収束します。
ア(j ← j – 10 × k):
この選択肢は、jから10×kを引くだけでkを加える操作がないため、計算が不完全となります。
ウ(j ← k + (j – 10) × k):
この選択肢では、(j – 10) × kが誤った計算式であり、チェックデジットの計算に適用できません。
エ(j ← k + j):
この選択肢は、10で割った商を考慮しておらず、計算のロジックが不適切です。
難易度
やや難しい
アルゴリズムの基礎を理解していれば解答できる問題です。IT未経験者にはやや難しいかもしれませんが、演習を重ねれば解けるようになるでしょう。
スポンサーリンク
用語補足
チェックデジット:
チェックデジットは、入力データの誤りを検出するために付加される補助的な数字です。クレジットカードやISBNコードなどのデータの整合性を検証するために広く利用されています。
アルゴリズム:
アルゴリズムは、特定の問題を解決するための手順や計算方法を指します。プログラミングにおいて、効率性や正確性を高めるための基礎となる考え方です。
対策
この問題を解くためには、配列操作や基本的な計算ロジックの理解が重要です。具体的には、ループ処理や商と剰余の関係について演習を行い、類似のアルゴリズム問題に触れることが有効です。