SkillStack
テクノロジ系78 / 100問

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には、最初のfor文によって9個の数字の合計が格納されます。while文では、jが2桁の場合に十の位と一の位を足す必要があります。kは「j÷10の商」なので十の位を表し、「j-10×k」は一の位を表します。したがって、両者を加える「j←k+(j-10×k)」が適切です。

具体例として、最初の合計がj=79だった場合をトレースします。1回目はk=79÷10の商=7、一の位は79-10×7=9なので、新しいjは7+9=16です。まだ9より大きいため、2回目はk=16÷10の商=1、一の位は16-10×1=6となり、j=1+6=7です。7は9以下なので繰返しを終了し、7を返します。

アは誤りです。「j-10×k」は一の位だけを取り出す式であり、十の位を加えていません。j=79なら9となります。

ウは誤りです。十の位と一の位を求める式ではありません。j=79、k=7なら、7+(79-10)×7=490となります。

エは誤りです。元のjに商kを加えているため、桁の合計になりません。j=79なら7+79=86です。

【ポイント】 10で割った商は十の位、元の数から「商×10」を引いた値は一の位です。 この処理を1桁になるまで繰り返して得られる値は、各桁を反復して合計した値です。

【参考】擬似言語の記述形式(ITパスポート試験用)

アルゴリズムを表現するための擬似的なプログラム言語(擬似言語)を使用した問題では、各問題文中に注記がない限り、次の記述形式が適用されているものとする。

〔記述形式〕 ・○手続名又は関数名  手続又は関数を宣言する。 ・型名: 変数名  変数を宣言する。 ・/* 注釈 */ 、 // 注釈  注釈を記述する。 ・変数名 ← 式  変数に式の値を代入する。 ・手続名又は関数名(引数, …)  手続又は関数を呼び出し、引数を受け渡す。

・if (条件式1)   処理1  elseif (条件式2)   処理2  elseif (条件式n)   処理n  else   処理n + 1  endif  選択処理を示す。条件式を上から評価し、最初に真になった条件式に対応する処理を実行する。以降の条件式は評価せず、対応する処理も実行しない。どの条件式も真にならないときは、処理n + 1を実行する。各処理は、0以上の文の集まりである。elseifと処理の組みは、複数記述することがあり、省略することもある。elseと処理n + 1の組みは一つだけ記述し、省略することもある。

・while (条件式)   処理  endwhile  前判定繰返し処理を示す。条件式が真の間、処理を繰返し実行する。処理は、0以上の文の集まりである。

・do   処理  while (条件式)  後判定繰返し処理を示す。処理を実行し、条件式が真の間、処理を繰返し実行する。処理は、0以上の文の集まりである。

・for (制御記述)   処理  endfor  繰返し処理を示す。制御記述の内容に基づいて、処理を繰返し実行する。処理は、0以上の文の集まりである。

〔演算子と優先順位〕(上ほど優先度が高い) ・式:() ・単項演算子:not + - ・二項演算子(乗除):mod × ÷ ・二項演算子(加減):+ - ・二項演算子(関係):≠ ≦ ≧ < = > ・二項演算子(論理積):and ・二項演算子(論理和):or 注記 演算子 mod は、剰余算を表す。

〔論理型の定数〕 true, false

〔配列〕 一次元配列において"{"は配列の内容の始まりを、"}"は配列の内容の終わりを表し、配列の要素は、"["と"]"の間にアクセス対象要素の要素番号を指定することでアクセスする。 例 要素番号が1から始まる配列exampleArrayの要素が{11, 12, 13, 14, 15}のとき、要素番号4の要素の値(14)はexampleArray[4]でアクセスできる。 二次元配列において、内側の"{"と"}"に囲まれた部分は、1行分の内容を表し、要素番号は、行番号、列番号の順に","で区切って指定する。 例 要素番号が1から始まる二次元配列exampleArrayの要素が{{11, 12, 13, 14, 15}, {21, 22, 23, 24, 25}}のとき、2行目5列目の要素の値(25)は、exampleArray[2, 5]でアクセスできる。

出典:令和4年度 ITパスポート試験 公開問題 問78
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の100問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める