第1問 次の関数 transformArray は、整数型の配列 inputArray を引数に取り、特定の条件に従っ て配列の要素を加工し、新たな配列を返します。配列の要素番号は 1 から始まります。ここ で、inputArray が {4, 9, -1, 3, 12, 8, -3, 5} で与えられた場合、関数 transformArray によ って返される新しい配列の内容を選択肢の中から選びなさい。 〇整数型の配列:transformArray(整数型の配列: inputArray) 整数型の配列: resultArray ← {} 整数型: i, newValue for (i を 1 から inputArray の要素数まで 1 ずつ増やす) if (inputArray[i] mod 2 = 0) newValue ← inputArray[i] - 5 else newValue ← inputArray[i] * 2 endif if (newValue ≥ 0) resultArray の末尾に newValue を追加する endif endfor return resultArray 解答群 ア. {18, 6, 24, 10} イ. {-1, 18, -2, 6, 7, 3, -6, 10} ウ. {1, 6, 7, 10} エ. {0, 18, 0, 6, 7, 3, 0, 10} オ. {18, 6, 7, 3, 10}
第2問 関数 insertAfter は、1 つ以上の要素を持つ単方向リストにおいて、引数 qVal で与えられた 文字列を、引数 target で指定された要素の後に追加する関数です(target は対象となるデー タのアドレスを示します) 。リストの各要素は、クラス ListElement によって表現され、大 域変数 listHead はリストの先頭要素への参照を保持します。この手続きでは、新たな要素 を挿入できた場合には操作を「成功」と、target がリストに含まれない場合には操作を「失 敗」として扱います。なお、リストの最後の要素がもつポインタは未定義とします。以下の プログラムを完成させ、適切な操作を行うために空欄を埋めてください。 メンバ変数 型 説明 Val 文字列型 リストに格納する文字 next ListElemen リストの次の文字を保持するインスタンスの参照。 t 初期状態は未定義である。 コンストラクタ 説明 ListElement(文字型:qVal) 引数 qVal でメンバ変数 val を初期化する。 (「図表の出典:基本情報技術者試験(科目 B 試験)サンプル問題セット」なお、問題の内 容はサンプル問題と異なります。) 〇論理型:insertAfter(ListElement: target, 文字型: qVal) ListElement: newNode, current newNode ← ListElement(qVal) current ← listHead while (current が □□□□□(A)) if (current が target と等しい) newNode.next ← □□□□□(B) current.next ← □□□□□(C) return 成功 endif current ← current.next endwhile return 失敗
解答群 a b c ア 未定義 current current.next.next イ 未定義 current.next newNode ウ 未定義 current.next newNode.next エ 未定義ではない current current.next.next オ 未定義ではない current.next newNode カ 未定義ではない current.next newNode.next
第3問 次のプログラム中の□に入れる正しい答えを、解答群の中から選びなさい。関数 leapYear は、西暦年を表す正の整数を引数として受け取り、うるう年であれば true を、そうでなけ れば false を返します。 うるう年の条件: • 西暦年が 4 で割り切れる年はうるう年である。 • ただし、100 で割り切れる年は、400 で割り切れない限り、うるう年ではない。 〇論理型: leapYear(整数型: year) 論理型: result if (year を 4 で割った余りが 0) and (□) result ← true else result ← false endif return result 解答群 ア (year を 100 で割った余りが 0)and(year を 400 で割った余りが 0) イ (year を 100 で割った余りが 0)or(year を 400 で割った余りが 0) ウ (year を 100 で割った余りが 0 ではない)or(year を 400 で割った余りが 0) エ (year を 100 で割った余りが 0)and(year を 400 で割った余りが 0 ではない) オ (year を 100 で割った余りが 0 ではない)and(year を 400 で割った余りが 0) カ (year を 100 で割った余りが 0 ではない) キ (year を 400 で割った余りが 0)
第4問
次の手続き sort は、整数型の配列 data をあるアルゴリズムを用いて昇順に整列します。配
列の要素番号は 1 から始まるとします。手続き sort を実行すると、/*** α ***/の行を最初
に実行したとき、配列 data はどのような状態になっていますか。以下の選択肢の中から正
しい配列の状態を選びなさい。
大域: 整数型の配列: data ← {2, 9, 3, 8, 5, 6, 4, 1}
〇sort()
整数型: gap, i, j, temp
gap ← 配列 data の長さを2で割ったときの商
while (gap > 0)
for (i を gap + 1 から配列 data の長さまで 1 ずつ増やす)
temp ← data[i]
j←i
while (j > gap かつ data[j - gap] > temp)
data[j] ← data[j - gap]
j ← j - gap
endwhile
data[j] ← temp
endfor
gap ← gap を2で割ったときの商/*** α ***/
endwhile
解答群:
ア. [2, 3, 4, 1, 5, 6, 8, 9]
イ. [2, 9, 3, 8, 5, 6, 4, 1]
ウ. [9, 8, 6, 5, 4, 3, 2, 1]
エ. [3, 2, 4, 1, 5, 6, 8, 9]
オ. [2, 6, 3, 8, 5, 9, 4, 1]
カ. [2, 6, 3, 1, 5, 9, 4, 8]
第5問 外国為替市場において、為替レートの変動は経済の重要な指標の一つです。トレーダーや分 析家は、短期的な価格変動から長期的なトレンドを読み解くために、移動平均などのテクニ カル分析ツールを頻繁に使用します。移動平均は、一定期間の為替レートの平均値を計算し、 それを連続してプロットすることで、価格の平滑化された動向を示します。これにより、市 場のノイズを除去し、為替レートの本質的な方向性を明らかにすることができます。 あなたは、以下のプログラムを用いて、過去一週間の為替レートデータから 3 日間の移動 平均を計算し、その移動平均のトレンドを分析する任務を担っています。この分析を通じて、 為替レートが「上昇」しているのか「下降」しているのか、あるいは「横ばい」なのかを判 断することが目的です。 関数 calcMA は、引数で指定された実数型の配列 data から、指定された日数 d にわたる移 動平均を計算し、それらの移動平均値を格納した実数型の配列を返す関数である。ここで、 引数 data は為替レートなどの時系列データを想定しており、d は移動平均を計算する日数 を指定する整数です。 関数 trendAnalyze は、引数で与えられた実数型の配列 MAs に格納された移動平均値を分 析し、そのトレンドを示す文字列を返す関数です。MAs 配列の最後の値と最後から 2 番目 の値を比較して、データのトレンドが「上昇」しているのか、「下降」しているのか、また は「横ばい」なのかを判断します。 手続 test は、大域の実数型の配列 rates に格納された為替レートのデータを用いて、関数 calcMA を呼び出し、指定された日数にわたる移動平均値を計算します。その後、計算され た移動平均値を分析するために関数 trendAnalyze を呼び出し、為替レートのトレンドを示 す文字列を得ます。
大域: 実数型の配列: rates ← {100, 102, 104, 103, 105, 107, 106}
〇実数型の配列: calcMA(実数型の配列: data, 整数型: d)
実数型の配列: MAs ← 空の配列
for (i を d から data の長さまで 1 ずつ増やす)
実数型: sum ← 0
for (j を 0 から □□□□□□(A) まで 1 ずつ増やす)
sum ← sum + data[i - j]
endfor
MAs の末尾に (sum ÷ d) を追加する
endfor
return MAs
〇文字列型: trendAnalyze(実数型の配列: MAs)
if (MAs の最後の値 > MAs の最後から 2 番目の値)
return "□□□□□□(B)"
else if (MAs の最後の値 < MAs の最後から 2 番目の値)
return "□□□□□□(C)"
else
return "横ばい"
〇test()
実数型の配列: MA_vals ← calcMA(rates, 3)
trendAnalyze(MA_vals)
設問
□□□□□□にあてはまる正しい答えの組み合わせを解答群の中から選んでください(ア
~カ)。また、手続き test 処理が終了した直後のトレンドを選んでください(キ~ケ)。
a
b
c
ア
d+1
上昇
下降
キ
上昇
イ
d+1
下降
上昇
ク
横ばい
ウ
d
上昇
下降
ケ
下降
エ
d
下降
上昇
オ
d-1
上昇
下降
カ
d-1
下降
上昇