令和4年度96テクノロジ系

ITパスポート 令和4年度 問96:アルゴリズム・プログラミングに関する問題

関数calcXと関数calcYは、引数inDataを用いて計算を行い、その結果を戻り値とする。関数calcXをcalcX(1)として呼び出すと、関数calcXの変数numの値が、1→3→7→13と変化し、戻り値は13となった。関数calcYをcalcY(1)として呼び出すと、関数calcYの変数numの値が、1→5→13→25と変化し、戻り値は25となった。プログラム中のa、bに入れる字句の適切な組合せはどれか。 [プログラム1] ○整数型:calcX(整数型:inData) 整数型:num、i num ← inData for (i を 1 から 3 まで 1 ずつ増やす) num ← [a] endfor return num [プログラム2] ○整数型:calcY(整数型:inData) 整数型:num、i num ← inData for ([b]) num ← [a] endfor return num

  • aa:2 × num + i b:i を 1 から 7 まで 3 ずつ増やす
  • ba:2 × num + i b:i を 2 から 6 まで 2 ずつ増やす
  • ca:num + 2 × i b:i を 1 から 7 まで 3 ずつ増やす
  • da:num + 2 × i b:i を 2 から 6 まで 2 ずつ増やす正答
正答:Da:num + 2 × i b:i を 2 から 6 まで 2 ずつ増やす

AI解説(初心者・標準・上級)

理解度に合わせて3レベルの解説を無料で読めます。

初心者向けまずはここから。やさしく要点を解説

答えは d です。

この問題は「計算の式」と「くり返す回数」を当てるパズルです。むずかしそうですが、実際に1から計算してみるのが一番たしかです。

calcXは数が 1→3→7→13 とふえます。よく見ると、1のつぎは+2、そのつぎは+4、そのつぎは+6…と、足す数が増えています。これは「今の数 + 2×(何回目か)」で説明できます。だから式aは num + 2×i

calcYは 1→5→13→25。こちらは+4、+8、+12と足され、iが2・4・6と動いています。だからbは iを2から6まで2ずつ

👉 覚え方:自信がないときは「実際に手で1から計算」。それが一番速くて正確。

(※選択肢aやcの式・回数で計算すると、途中で数がズレてしまいます。)

標準試験対策の基準レベル

なぜこれが正解か

正解は d(a:num + 2×i、b:i を 2 から 6 まで 2 ずつ増やす)。トレース(実際に値を追う)で確定する。

calcX(1) は num=1 開始、i=1,2,3。

  • a=`num + 2×i`:1→(1+2)=3→(3+4)=7→(7+6)=13 ✓ 期待値どおり。
  • もし `2×num + i` なら 1→3→8→19 となり 7 に届かず不一致。よって a は `num + 2×i`。

calcY(1) は 1→5→13→25。a に `num + 2×i` を使い、i の動きで合わせる。

  • b=`i を 2 から 6 まで 2 ずつ`(i=2,4,6):1→(1+4)=5→(5+8)=13→(13+12)=25 ✓。
  • `i を 1 から 7 まで 3 ずつ`(i=1,4,7)なら 1→3→11→25 となり途中の値(5・13)が合わない。

覚え方・ひっかけ注意

擬似言語トレースは「変数の値を1ステップずつ表に書き出す」のが鉄則。a と b を別々に決めず、先に a を確定→次に b を確定する手順で解くと迷わない。差分(+2,+4,+6)が等差で増える=係数が i に掛かっている合図。

上級誤答論破・背景理論まで深掘り

理論的背景

本問は「共通の式aを先に確定し、forループの制御条件bを後から決める」という二段階推論を問う擬似言語トレース問題だ。calcXのトレースで1→3→7→13の数列を分析すると、増分が2・4・6と等差級数をなしており、ループ変数iが1・2・3と動く際に増分が2×iに対応していることが分かる。これにより `num ← num + 2×i` が式aと確定する。確認:i=1で1+2=3、i=2で3+4=7、i=3で7+6=13 ✓。次にcalcY(1)→1→5→13→25で増分4・8・12を確認すると、式aを `num + 2×i` に固定したとき、i=2・4・6と2刻みで動けば増分が4・8・12となる。forループ `i を 2 から 6 まで 2 ずつ増やす` で確認:1+4=5、5+8=13、13+12=25 ✓。一方で選択肢aの `2×num + i`(exp が num 自体に係る式)で検算すると、calcX(1)は1→3→8→19となり期待値列「7」に届かず即棄却できる。この「式がnumにかかるか、ループ変数iにかかるか」の差異が設問の核心だ。

実務での使われ方

このような数列生成ロジックは実務でも頻繁に現れる。例えばスケジューリングアルゴリズム(タスクの遅延時間を累積計算する処理)、積算計算(毎月の支払い額の計算で月数×単価が変化するケース)、動的プログラミングの部分和計算などが代表例だ。ループ変数が等差的に増える場合、総和はΣ2i=2・Σi=2・n(n+1)/2として一般式で計算できる。calcXのn=3なら2×(1+2+3)=12、初期値1を足して13という検算が即できる。この「ループをΣに読み替える」発想はアルゴリズム設計と計算量解析の基礎であり、O(n²)の2重ループをO(n)の数式に最適化する場面で直接活きる。

試験での位置づけ

ITパスポートでは2022年以降、IPA公式の擬似言語記法を使ったトレース問題が安定して1〜2問出題されており、本問はその典型形式だ。for文の制御パラメータ(始点・終点・刻み幅)が1以外の値をとる設定と、更新式の係数をどの変数に掛けるかが主な引っかけポイントとして機能している。解法のベストプラクティスは「変数値を1ステップずつ表に書き出す手トレース」で、計算ミスより読み違いの方が失点リスクが高い。基本情報技術者の科目B(アルゴリズム・疑似言語)では、ネストしたループ・配列の添字操作・再帰呼び出しまで扱い、トレース表の書き出しが解法の中核技術となる。合格者は平均的にアルゴリズム・疑似言語分野に最も多く時間を投資している。

選択肢の発展補足

選択肢a(a:2×num+i、b:i を 1 から 7 まで 3 ずつ):まず式を `2×num+i` と仮定してcalcX検算をすると1→(2×1+1)=3→(2×3+2)=8→(2×8+3)=19となり、期待値列の7・13に一致しない。式がnumに対して指数的(前の値の約2倍)に増えるため値が大きくなりすぎる。選択肢b(a:2×num+i、b:i を 2 から 6 まで 2 ずつ):式が同様に誤りのため同じく棄却。選択肢c(a:num+2×i、b:i を 1 から 7 まで 3 ずつ):式aは正解と同じだが、calcY(1)で `i を 1 から 7 まで 3 ずつ`(i=1,4,7)を試すと1→(1+2)=3→(3+8)=11→(11+14)=25となり、途中の5・13に不一致。3刻みはcalcYの途中値と合わない。このように正解の判定は「最終値だけでなく途中の値がすべて一致するか」を確認することが重要で、選択肢cはcalcYの最終値25は合うが途中値で落ちる巧妙な罠となっている。

出典・引用について

出典:IPA(情報処理推進機構)公式 ITパスポート試験 令和4年度96/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。

テクノロジ系の他の過去問

55
security
56
database
57
database
58
technology_element
59
network

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビならITパスポートの過去問を解きながら学べます。