令和7年度99テクノロジ系

ITパスポート 令和7年度 問99:algorithmに関する問題

関数calculateAmountOfPrizeは,業務改善の効果における改善額と短縮期間を,それぞれimprovement と period で受け取り,賞金額を戻り値とする。改善額が20万円で短縮期間が3日の業務改善と,改善額が5万円で短縮期間が14日の業務改善があった。この二つの賞金額の合計は何円か。ここで,改善額と短縮期間の値はそれぞれ0以上とする。[プログラム] ○整数型: calculateAmountOfPrize(整数型: improvement, 整数型: period) 整数型: prize if (improvement が 100000 より小さい) if (period が 7 より小さい) prize ← 500 else prize ← 1000 endif else if (period が 7 より小さい) prize ← 2000 else prize ← 5000 endif endif return prize

  • a1,000
  • b1,500
  • c3,000正答
  • d5,500
正答:C3,000

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

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

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

答えは c「3,000」 です。

このプログラムは、賞金額を次の表で決めています。

・改善額が10万円以上で短い日数(7日未満)→2000円、長い→5000円

・改善額が10万円未満で短い→500円、長い→1000円

1件目:改善額20万円(10万以上)+3日(7日未満・短い)→ 2000円

2件目:改善額5万円(10万未満)+14日(7日以上・長い)→ 1000円

合計=2000+1000= 3000円

👉 コツ:「改善額が10万円以上か未満か」をまず分けて、次に「7日未満か以上か」で枝分かれを追う。

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

なぜこれが正解か

正解は c(3,000円)。判定は「改善額が10万円(100000)未満か以上か」で大きく分かれ、その中で「期間が7日未満か以上か」で枝分かれする。

1件目(improvement=200000, period=3)

200000は10万円以上→else側。period=3は7未満→2000円

2件目(improvement=50000, period=14)

50000は10万円未満→if側。period=14は7以上→1000円

合計

2000 + 1000 = 3000円

ひっかけ注意

「改善額20万円」=200000と桁を揃えて閾値100000と比較する。境界値(7日・10万円)の"未満/以上"を取り違えると500や5000を選んで誤答する。「より小さい(<)」は等号を含まない点に注意。

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

理論的背景

この問題で問われているのは条件分岐を含む疑似コードのトレース(追跡実行)能力である。関数calculateAmountOfPrizeは入れ子(ネスト)if文で4通りの賞金を返す。分岐条件の組み合わせは「improvement < 100000」×「period < 7」で2×2=4象限となる。ケース1(改善額20万円、短縮期間3日):improvementは200000で「100000より小さい」は偽→外側else分岐へ。periodは3で「7より小さい」は真→prize=2000(円)。ケース2(改善額5万円、短縮期間14日):improvementは50000で「100000より小さい」は真→内側if。periodは14で「7より小さい」は偽→内側else分岐→prize=1000(円)。合計:2000+1000=3000円。このネストif構造は「決定表(デシジョンテーブル)」に変換すると見通しが良くなる。

実務での使われ方

複雑な条件分岐ロジックの整理には決定表(Decision Table)が実務で広く使われる。保険料計算・税率分岐・ポイント還元率など多くの業務ロジックは「複数条件の組み合わせ→アクション」の形で表現できる。決定表はすべての条件組み合わせを列挙するため、カバレッジ(網羅性)の検証に優れており、テスト設計にも活用される。また、関数型プログラミングにおいてはパターンマッチング(Haskell・Scala・Rust等)が多段if-elseを置き換えるモダンな手法として普及している。本問のような業務ロジックは実際のシステム開発では「ビジネスルールエンジン(Drools等)」に外出しして保守性を確保するアーキテクチャも採用される。

試験での位置づけ

ITパスポートにおける疑似コードトレース問題は近年増加傾向にあり、本問のようなネストif構造と複数ケースの合計計算が定番パターンである。典型的な失点パターンは「改善額の単位(万円 vs 円)の混同」で、プログラム中の100000と問題文の「20万円」「5万円」を比較する際に単位換算が必要な点に気づかないケース。20万円=200000>100000(真の対偶→外側else分岐)、5万円=50000<100000(真→内側if)という判断が正確にできるかが問われる。基本情報技術者の科目Bではより複雑な再帰関数・配列操作・反復処理まで出題範囲が広がる。本問は科目Bの前哨戦として、「条件判断を表で整理してから追う」という習慣を身につける好材料である。

選択肢の発展補足

選択肢a「1,000円」はケース1の賞金を2000ではなく1000と誤計算(period < 7を見落とす等)した場合。選択肢b「1,500円」は両ケースで500円と1000円と計算した誤り。選択肢d「5,500円」は片方か両方の分岐を間違えた場合(例:ケース1で5000を選んだ場合)。誤答を防ぐ実践的な手法として、変数の値を逐次書き出す「変数追跡表」の作成を推奨する。カラム:improvement, period, 外側条件(T/F), 内側条件(T/F), prize。この表を埋める作業がそのままデバッグの基礎スキルにもなり、プログラム開発者が実際にIDEのデバッガで行う「変数ウォッチ」操作の手動版に相当する。

出典・引用について

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

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

55
security
56
database
57
database
58
technology_element
59
network

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

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