ITパスポート試験 - 令和4年 - 問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
答え
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › アルゴリズムとプログラミング
解説
擬似言語(プログラムに似た書き方)を読み解く問題です。テーマは「チェックデジット」で,番号の入力ミスなどを検出するために付け加える1桁の検査用数字を計算します。

プログラムの流れはこうです。まずfor文で配列 originalDigit の9つの値をすべて足し合わせ,変数jに合計を入れます。次にwhile文で「jが9より大きい間,繰り返す」処理を行い,jが1桁の数になるまで各桁の数字を足し直します。

空欄ではjに何を代入するかを問うています。その直前は「k ← j ÷ 10の商」で,jの十の位の数字を求めています。たとえばjが23なら,k=2です。ここから「各桁の数字を合計する」を実現するには,十の位の数字kと,一の位の数字を足す必要があります。一の位の数字は,jから十の位の分(10×k)を引くことで求められるので,「j−10×k」と表せます。

つまり,求める式は「k(十の位)+(j−10×k)(一の位)」となり,これがそのままjに再代入されます。この式に一致するのは選択肢「イ」の「j ← k +(j - 10 × k)」です。
ホーム画面への追加方法
1.ブラウザの 共有ボタンのアイコン 共有ボタンをタップ
2.メニューの「ホーム画面に追加」をタップ
閉じる