過去問解きまくり研究所 ホーム

アルゴリズムとプログラミング|令和4年度 ITパスポート試験 問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
```

解説

各桁を足すので、十の位であるkと一の位との和を入れます。

この関数は、配列に入った9桁ぶんの数字を全部足し、その合計が9より大きいあいだ、各桁の数字を足す操作をくり返して、9以下になった値をチェックデジットとして返します。合計は最大でも9が9個で81ですから、二桁を超えることはありません。プログラムの中でjを10で割った商をkとしているので、kはjの十の位そのものです。すると一の位は、jから10かけるkを引いた値になります。この二つを足したものが、桁を足し合わせた新しいjですから、空欄にはkとその差の和を入れることになります。式にすると、kにjから10かけるkを引いた値を足す形です。くり返しの条件はjが9より大きいあいだですが、この問では一度回れば必ず9以下になります。よって当てはまるのは、kにjと10かけるkの差を足す式です。

ほかの選択肢はなぜ違うのか

この問題に関係する言葉

出典:令和4年度 ITパスポート試験 問78(改変:原典の図表をテキストに書き起こした)

この問題を演習で解く

同じ単元をまとめて解くならアルゴリズムとプログラミングへ。

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)