基本情報の午後試験はプログラム問題です.
このプログラム問題はちゃんと処理内容を読み解く必要があります.
今回は科目Bサンプル問題 問2を解説します.
プログラムを元にPythonで書き直しました.
自分で動かしてみるとより理解が深まるでしょう.
科目Bサンプル問題 問2 配列の要素を逆順にするプログラム
問題文は以下のとおりです.
配列の要素を逆に並び替える問題ですね.
Pythonでプログラムを書く
プログラムをPythonで書き換えました.
プログラムとPythonでは一部仕様が異なります.
プログラムは配列の要素番号が1で始まりますが,Pythonは0で始まります.
そのため試験問題のコードと一部表記が違いますが,処理結果は一緒になるため問題はありません.
# 整数型の配列arrayの要素数を逆順にする
array = [1, 2, 3, 4, 5] # 配列の初期値
fin = len(array) // 2 # 要素数を2で割った商を取得する
# leftを1から(arrayの要素数%2の商)まで1ずつ増やす
for left in range(0, fin): # Pythonでは要素番号は0から始まる
right = len(array) - (left + 1) # 配列の右にある数値を取得するため,インデックス数を求める
tmp = array[right] # 配列の右に位置する数値をtmpに代入する
array[right] = array[left] # 配列の左にある数値を右の数値に更新する
array[left] = tmp # 配列の右にあった数値を左の数値に更新する
print(array) # 並び替えた配列を出力する
細かな処理内容はコードのコメントに残しました.
以下はポイントになった部分をまとめます.
1. ループの終了条件
ループの終了条件を確認します.
for (leftを1から (arrayの要素数 % 2 の商) まで1ずつ増やす
ループの終了条件は配列の要素数を2で割ったときの商の値です.
例えば要素数5を例にすると,5 % 2 = 2 となり終了条件は2になります.
1から始まり2で終わるので2回しかループしていないことが分かりましたね.
値の入れ替えはループ回数が少なくても実現できます.
この程度のループ処理であればトレースして処理内容を把握することもできるでしょう.
2. tmpの役割
right ← a
tmp ← array[right]
array[right] ← array[left]
tmpの次の処理を見ると,配列の要素を更新しているのが分かります.
更新すると要素は消えてしまいます.
しかし前の処理でtmp変数に array[right]の要素を代入しておくことで後で使うことができます.
これによって配列の左右の要素を入れ替えることができます.
まとめ
今回は科目Bプログラム問題の問2「配列の要素を逆順にするプログラム」の解説を紹介しました.
プログラム問題難しいですね.
わたしも初めて見たときはちょっと悩みました.
プログラム問題では初めに処理の全体像を理解すると良いでしょう.
この問題では配列の要素の並び替えでした.
「右にあった数値を左に移動させる」ように処理すれば良いわけです.
このことから right には配列の右の数値が入り,tmpの代入先は配列の左だと分かりますね.