PR

ITパスポート 令和6年度 公開問題(過去問) 問62 解説

ITパスポート 令和6年度 公開問題(過去問) 問62について解説します。

問題

問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” を追加する
  end if
end for
return stringOutput

ア:{0, 0, 1, 2, 1}
イ:{0, 1, 2, 1, 1}
ウ:{1, 0, 1, 2, 0}
エ:{1, 1, 2, 1, 0}

解説・解答

このプログラムは、大きく分けて以下の3つのブロックで構成されています。
① 初期化処理
② 繰り返し処理(ループ)
③ 結果の返却

① 初期化処理
——————–
文字列型:stringOutput ← ””
整数型:i
——————–
処理を始める前に、必要な変数を準備します。stringOutput は、最終的に返す文字列(AやBをつなげたもの)を入れるための変数です。最初は空っぽ(””)です。i は、配列の中身を順番に見るためのカウンタ(番号)です。

② 繰り返し処理(ループ)
——————–
for (i = 1 から arrayInput の要素数 まで 1 ずつ増やす)
    if (arrayInput[i] が 1 と等しい)
        stringOutput の末尾 に “A” を追加する
    else
        stringOutput の末尾 に “B” を追加する
end for
——————–
配列の中身を1つずつ見て、条件に応じて文字列を作っていきます。for 文で、配列の1番目から最後まで順番に処理します。if 文で、今見ている値が「1」かどうかを判定します。1なら「A」を追加し、それ以外なら「B」を追加します。これをすべての要素に対して繰り返します。

③ 結果の返却
——————–
return stringOutput
——————–
作成した文字列を関数の結果(戻り値)として返します。

よって、プログラムのルールは下記のようになります。
————————————
配列の各要素を左から順に見ていく。
 - 要素が「1」なら → “A” を追加
 - それ以外なら → “B” を追加
————————————
例えば、配列 [1, 0, 1, 2, 0] を渡すと、
 1 → A
 0 → B
 1 → A
 2 → B
 0 → B
となり、結果は”ABABB”になります。

上記を踏まえて、それぞれの選択肢について確認します。

ア:{0, 0, 1, 2, 1}
→ B, B, A, B, A → “BBABA” ❌

イ:{0, 1, 2, 1, 1}
→ B, A, B, A, A → “BABAA” ❌

ウ:{1, 0, 1, 2, 0}
→ A, B, A, B, B → “ABABB” ❌

エ:{1, 1, 2, 1, 0}
→ A, A, B, A, B → “AABAB” これが正解

以上により、この問題の解答は「エ」になります。