ITパスポート試験 - 令和4年 - 問78
関数checkDigitは,10進9桁の整数の各桁の数字が上位の桁から順に格納された整数型の配列originalDigitを引数として,次の手順で計算したチェックデジットを戻り値とする。プログラム中の a に入れる字句として,適切なものはどれか。ここで,配列の要素番号は1から始まる。
〔手順〕
(1) 配列originalDigitの要素番号1〜9の要素の値を合計する。
(2) 合計した値が9より大きい場合は,合計した値を10進の整数で表現したときの各桁の数字を合計する。この操作を,合計した値が9以下になるまで繰り返す。
(3) (2)で得られた値をチェックデジットとする。
〔プログラム〕
〔手順〕
(1) 配列originalDigitの要素番号1〜9の要素の値を合計する。
(2) 合計した値が9より大きい場合は,合計した値を10進の整数で表現したときの各桁の数字を合計する。この操作を,合計した値が9以下になるまで繰り返す。
(3) (2)で得られた値をチェックデジットとする。
〔プログラム〕
| ア | 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桁の検査用数字を計算します。
プログラムの流れはこうです。まず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)」です。