令和4年度 問78
チェックデジットの計算
出典: 令和4年度 ITパスポート試験 公開問題 問78 (IPA)
関数 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
正解と解説を見る
正解: イ
- ア: これは、一の位だけを残す式です。十の位が足されていません。
- イ: 十の位と一の位を足す式なので、正しい答えです。
- ウ: (j - 10) × k は、各桁の合計になりません。
- エ: k + j は、桁を足す式にならず、元の数に十の位を足すだけで誤りです。
ポイント
j が 2 桁の数のとき、各桁の数字の合計を求めます。
- k = j ÷ 10 の商 = 十の位の数字
- j - 10 × k = 一の位の数字
- 各桁の合計は k + (j - 10 × k) です。
例: j = 47 のとき、k = 4、j - 10 × k = 7 で、合計は 11 です。繰り返しで 9 以下になるまで続けます。
広告
「アルゴリズムとプログラミング」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)
広告