分類テクノロジ系 » アルゴリズムとプログラミング » アルゴリズムとプログラミング新しい試験範囲外(2027年度からの新しい試験には出ない分野)年度令和4年度の100問の一覧
関数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-10×k は1の位の数字だけです。10の位の k を足していないので、19 は 9 になり、各桁の合計(10)になりません。
イ○ 正解 k は10の位の数字、j-10×k は1の位の数字です。足すと各桁の数字の合計になり、19 → 10 → 1 と手順どおりに進みます。
ウ× (j-10)×k は1の位の数字になりません。たとえば j=45 では 4+35×4=144 となり、各桁の合計の 9 とは違う値になります。
エ× k+j は j より必ず大きくなるので、19 → 20 → 22 → … と増え続け、j が9以下になって繰返しを抜けることがありません。
解説
プログラムは、前半の for で9個の数字を合計して j に入れ、後半の while で「j が9より大きいあいだ、j をその各桁の数字の合計に置き換える」を繰り返します。注釈にあるとおり j は2桁までなので、各桁は10の位と1の位の2つだけです。直前の行の k ← j ÷ 10 の商 で、k には10の位の数字が入っています。
1の位の数字は、j から10の位のぶん(10×k)を引いた残り、つまり j-10×k です。空欄には「10の位 k と 1の位 j-10×k を足して、新しい j にする」式が入ります。合計が19の場合でたどると、手順どおり 1+9=10、1+0=1 となって止まります。
合計 j=19 のとき 1回目:k=19÷10の商=1 j=1+(19-10×1)=1+9=10 2回目:k=10÷10の商=1 j=1+(10-10×1)=1+0=1 j=1 は9以下なので繰返しを抜け、1を返す
教科書 g37この問題の知識
アルゴリズムは問題を解くための手順で、順次・選択・繰返しの3つで組み立てます。流れ図と擬似言語の読み方、変数の値を書き出すトレース、空欄の埋め方、線形探索と2分探索、選択ソート・バブルソート・クイックソートと併合までを、公開問題を解ける形でまとめます。
Udemy の ITパスポート講座を、受講者数・★評価・口コミで比べたページです(広告を含みます)。
過去問教科書の一覧(現行の試験の順)教科書の一覧(新しい試験の順)
出典:IPA「ITパスポート試験 公開問題」令和4年度 問78。問題文と選択肢は改変せずに引用しています(表・図は文字に書き起こしたもの)。正解は IPA 公表の解答例によります。

