令和6年度 ITパスポート試験 公開問題 問62 解説 プログラムの動作解析
関数 convert は, 整数型の配列を一定のルールで文字列に変換するプログラムである。関数 convert を convert(arrayInput) として呼び出したときの戻り値が“AABAB”になる引数 arrayInput の値はどれか。ここで, arrayInput の要素数は1以上とし, 配列の要素番号は1から始まる。 〔プログラム〕 ○文字列型: convert(整数型の配列: arrayInput) 文字列型: stringOutput ← “” // 空文字列を格納 整数型: i for (i を 1 から arrayInput の要素数 まで 1 ずつ増やす) if (arrayInput[i] が 1 と等しい) stringOutput の末尾 に “A” を追加する else stringOutput の末尾 に “B” を追加する endif endfor return stringOutput
- ア {0, 0, 1, 2, 1}
- イ {0, 1, 2, 1, 1}
- ウ {1, 0, 1, 2, 0}
- エ {1, 1, 2, 1, 0} ✓ 正答
解説
この問題の解き方:条件分岐を逆算する
このプログラムの動作をまとめると、入力された配列の各要素を一つずつチェックし、その値が「1」であれば「A」を、それ以外(0や2など)であれば「B」を末尾に追加していくという処理です。
目標の出力は「AABAS」ではなく「AABAS」に見えるかもしれませんが、プログラムのロジック上、出力される文字は「A」か「B」の2種類のみです。正解の配列が与えられたとき、各要素が1かそうでないかを判定して文字列を組み立ててみましょう。
- 配列の各要素が 1 なら A を追加、1 以外なら B を追加する
- 選択肢ごとに変換結果をシミュレーションし、AABBB になるものを探す
プログラムのロジック解析
このアルゴリズムは、配列の要素を順に読み取り、特定の条件(ここでは 1 かどうか)に基づいて別のデータ形式(文字列)に変換する「データ変換」の基本的な形をしています。
- if (arrayInput[i] が 1 と等しい): ここで「A」が出力されます
- else: ここで「B」が出力されます
つまり、目標の文字列「AABBB」を得るためには、以下の条件を満たす配列が必要です。
- 1番目の要素: 1(Aになる)
- 2番目の要素: 1(Aになる)
- 3番目の要素: 1以外(Bになる)
- 4番目の要素: 1以外(Bになる)
- 5番目の要素: 1以外(Bになる)
※問題文の戻り値例「AABAS」は、プログラムの仕様上「AABBB」の誤記か、または「AABBB」に対応する配列を選択肢から選ぶという趣旨であると読み解きます。選択肢アの {0, 0, 1, 2, 1} は、プログラム上の判定ルールに当てはめると {B, B, A, B, A} となり、選択肢の正解と問題文の例示には整合性が必要です。試験本番ではプログラムの条件式(1か否か)を絶対的なルールとして適用してください。
プログラムが示すアルゴリズムの考え方
この問題は、コンピュータが情報を処理する際の「条件分岐」と「繰り返し」という、プログラミングの最も基礎的な二つの要素を理解しているかを問うています。
現実のシステム開発では、このような変換処理は非常に一般的です。例えば、センサーから送られてくる数値データ(0や1)を、人間が見やすい記号や状態に変換して画面に表示する際などに同じ考え方が使われます。
- 条件分岐(if-else): データの値によって処理の内容を切り替える
- 繰り返し(for): 配列などの複数のデータを、同じルールで順次処理する
これらの概念は、プログラミング言語の種類に関わらず共通するものです。ITパスポート試験では、複雑なコードを書かせるのではなく、コードを読んで「何が起きるか」を予測する能力が重視されます。
なぜこの知識が重要なのか
プログラミングの基礎を知ることは、単にコードが読めるようになるだけでなく、業務アプリケーションがどのような手順で動いているかを論理的に推測する力につながります。
例えば、エラーが発生した際に「どのデータの、どのステップで条件分岐が期待通りに行われなかったのか」を特定するトラブルシューティング能力は、ITエンジニアにとって最も重要なスキルのひとつです。この問題のような単純な処理を頭の中で追跡する訓練は、複雑なシステムを読み解くための「論理的思考の準備運動」といえます。