基本情報技術者試験過去問 - 令和5年公開問題(科目B)
| 公開日 : | 2023年7月6日 | 受験者 : | 101,620人 |
| 問題数 : | 6問 | 合格者 : | 38,033人 |
| 合格率 : | 37.4% | ||
| 公式PDF : |
|
問1
次のプログラム中の [ a ] と [ b ] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
関数 findPrimeNumbers は,引数で与えられた整数以下の,全ての素数だけを格納した配列を返す関数である。ここで,引数に与える整数は2以上である。
〔プログラム〕
解答群
関数 findPrimeNumbers は,引数で与えられた整数以下の,全ての素数だけを格納した配列を返す関数である。ここで,引数に与える整数は2以上である。
〔プログラム〕
○整数型の配列: findPrimeNumbers(整数型: maxNum)
整数型の配列: pnList ← {} // 要素数0の配列
整数型: i, j
論理型: divideFlag
for (i を2から [ a ] まで1ずつ増やす)
divideFlag ← true
/* iの正の平方根の整数部分が2未満のときは,繰返し処理を実行しない */
for (j を2から i の正の平方根の整数部分まで1ずつ増やす) // α
if ( [ b ] )
divideFlag ← false
αの行から始まる繰返し処理を終了する
endif
endfor
if (divideFlag が true と等しい)
pnListの末尾 に iの値 を追加する
endif
endfor
return pnList
整数型の配列: pnList ← {} // 要素数0の配列
整数型: i, j
論理型: divideFlag
for (i を2から [ a ] まで1ずつ増やす)
divideFlag ← true
/* iの正の平方根の整数部分が2未満のときは,繰返し処理を実行しない */
for (j を2から i の正の平方根の整数部分まで1ずつ増やす) // α
if ( [ b ] )
divideFlag ← false
αの行から始まる繰返し処理を終了する
endif
endfor
if (divideFlag が true と等しい)
pnListの末尾 に iの値 を追加する
endif
endfor
return pnList
解答群
| a | b | |
| ア | maxNum | i ÷ j の余り が 0 と等しい |
| イ | maxNum | i ÷ j の商 が 1 と等しくない |
| ウ | maxNum + 1 | i ÷ j の余り が 0 と等しい |
| エ | maxNum + 1 | i ÷ j の商 が 1 と等しくない |
答え : 設問1 ア
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
問2
次の記述中の [ ] に入れる正しい答えを,解答群の中から選べ。
次のプログラムにおいて,手続 proc2 を呼び出すと, [ ] の順に出力される。
〔プログラム〕
解答群
次のプログラムにおいて,手続 proc2 を呼び出すと, [ ] の順に出力される。
〔プログラム〕
○proc1()
“A” を出力する
proc3()
○proc2()
proc3()
“B” を出力する
proc1()
○proc3()
“C” を出力する
“A” を出力する
proc3()
○proc2()
proc3()
“B” を出力する
proc1()
○proc3()
“C” を出力する
解答群
| ア | “A” , “B” , “B” , “C” |
|---|---|
| イ | “A” , “C” |
| ウ | “A” , “C” , “B” , “C” |
| エ | “B” , “A” , “B” , “C” |
| オ | “B” , “C” , “B” , “A” |
| カ | “C” , “B” |
| キ | “C” , “B” , “A” |
| ク | “C” , “B” , “A” , “C” |
答え : 設問1 ク
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
問3
次の記述中の [ ] に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
次の手続 sort は,大域の整数型の配列 data の,引数 first で与えられた要素番号から引数 last で与えられた要素番号までの要素を昇順に整列する。ここで, first < last とする。手続 sort を sort(1,5) として呼び出すと,/*** α ***/ の行を最初に実行したときの出力は “ [ ] ” となる。
〔プログラム〕
次の手続 sort は,大域の整数型の配列 data の,引数 first で与えられた要素番号から引数 last で与えられた要素番号までの要素を昇順に整列する。ここで, first < last とする。手続 sort を sort(1,5) として呼び出すと,/*** α ***/ の行を最初に実行したときの出力は “ [ ] ” となる。
〔プログラム〕
大域: 整数型の配列: data ← {2, 1, 3, 5, 4}
○sort(整数型: first, 整数型: last)
整数型: pivot, i, j
pivot ← data[(first + last) ÷ 2 の商]
i ← first
j ← last
while (true)
while (data[i] < pivot)
i ← i + 1
endwhile
while (pivot < data[j])
j ← j - 1
endwhile
if (i ≧ j)
繰返し処理を終了する
endif
data[i]とdata[j]の値を入れ替える
i ← i + 1
j ← j - 1
endwhile
dataの全要素の値を要素番号の順に空白区切りで出力する /*** α ***/
if (first < i - 1)
sort(first, i - 1)
endif
if (j + 1 < last)
sort(j + 1, last)
endif
解答群
○sort(整数型: first, 整数型: last)
整数型: pivot, i, j
pivot ← data[(first + last) ÷ 2 の商]
i ← first
j ← last
while (true)
while (data[i] < pivot)
i ← i + 1
endwhile
while (pivot < data[j])
j ← j - 1
endwhile
if (i ≧ j)
繰返し処理を終了する
endif
data[i]とdata[j]の値を入れ替える
i ← i + 1
j ← j - 1
endwhile
dataの全要素の値を要素番号の順に空白区切りで出力する /*** α ***/
if (first < i - 1)
sort(first, i - 1)
endif
if (j + 1 < last)
sort(j + 1, last)
endif
解答群
| ア | 1 2 3 4 5 |
|---|---|
| イ | 1 2 3 5 4 |
| ウ | 2 1 3 4 5 |
| エ | 2 1 3 5 4 |
答え : 設問1 エ
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
問4
次の記述中の [ ] に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
関数 add は,引数で指定された正の整数 value を大域の整数型の配列 hashArray に格納する。格納できた場合は true を返し,格納できなかった場合は false を返す。ここで,整数 value を hashArray のどの要素に格納すべきかを,関数 calcHash1 及びcalcHash2 を利用して決める。
手続 test は,関数 add を呼び出して,hashArray に正の整数を格納する。手続 test の処理が終了した直後の hashArray の内容は, [ ] である。
〔プログラム〕
解答群
関数 add は,引数で指定された正の整数 value を大域の整数型の配列 hashArray に格納する。格納できた場合は true を返し,格納できなかった場合は false を返す。ここで,整数 value を hashArray のどの要素に格納すべきかを,関数 calcHash1 及びcalcHash2 を利用して決める。
手続 test は,関数 add を呼び出して,hashArray に正の整数を格納する。手続 test の処理が終了した直後の hashArray の内容は, [ ] である。
〔プログラム〕
大域: 整数型の配列: hashArray
○論理型: add(整数型: value)
整数型: i ← calcHash1(value)
if (hashArray[i] = -1)
hashArray[i] ← value
return true
else
i ← calcHash2(value)
if (hashArray[i] = -1)
hashArray[i] ← value
return true
endif
endif
return false
○整数型: calcHash1(整数型: value)
return (value mod hashArrayの要素数) + 1
○整数型: calcHash2(整数型: value)
return ((value + 3) mod hashArrayの要素数) + 1
○test()
hashArray ← {5個の -1}
add(3)
add(18)
add(11)
○論理型: add(整数型: value)
整数型: i ← calcHash1(value)
if (hashArray[i] = -1)
hashArray[i] ← value
return true
else
i ← calcHash2(value)
if (hashArray[i] = -1)
hashArray[i] ← value
return true
endif
endif
return false
○整数型: calcHash1(整数型: value)
return (value mod hashArrayの要素数) + 1
○整数型: calcHash2(整数型: value)
return ((value + 3) mod hashArrayの要素数) + 1
○test()
hashArray ← {5個の -1}
add(3)
add(18)
add(11)
解答群
| ア | {-1, 3, -1, 18, 11} |
|---|---|
| イ | {-1, 11, -1, 3, -1} |
| ウ | {-1, 11, -1, 18, -1} |
| エ | {-1, 18, -1, 3, 11} |
| オ | {-1, 18, 11, 3, -1} |
答え : 設問1 エ
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
問5
次のプログラム中の [ a ] と [ b ] に入れる正しい答えの組合せを,解答群の中から選べ。ここで,配列の要素番号は1から始まる。
コサイン類似度は,二つのベクトルの向きの類似性を測る尺度である。関数 calcCosineSimilarity は,いずれも要素数が n(n≧1) である実数型の配列 vector1と vector2 を受け取り,二つの配列のコサイン類似度を返す。配列 vector1 が {a1, a2, …, an},配列 vector2 が {b1, b2, …, bn} のとき,コサイン類似度は次の数式で計算される。ここで,配列 vector1 と配列 vector2 のいずれも,全ての要素に0が格納されていることはないものとする。
〔プログラム〕
解答群
コサイン類似度は,二つのベクトルの向きの類似性を測る尺度である。関数 calcCosineSimilarity は,いずれも要素数が n(n≧1) である実数型の配列 vector1と vector2 を受け取り,二つの配列のコサイン類似度を返す。配列 vector1 が {a1, a2, …, an},配列 vector2 が {b1, b2, …, bn} のとき,コサイン類似度は次の数式で計算される。ここで,配列 vector1 と配列 vector2 のいずれも,全ての要素に0が格納されていることはないものとする。
〔プログラム〕
○実数型: calcCosineSimilarity(実数型の配列: vector1,
実数型の配列: vector2)
実数型: similarity, numerator, denominator, temp ← 0
整数型: i
numerator ← 0
for (i を1から vector1の要素数 まで1ずつ増やす)
numerator ← numerator + [ a ]
endfor
for (i を1から vector1の要素数 まで1ずつ増やす)
temp ← temp + vector1[i]の2乗
endfor
denominator ← tempの正の平方根
temp ← 0
for (i を1から vector2の要素数 まで1ずつ増やす)
temp ← temp + vector2[i]の2乗
endfor
denominator ← [ b ]
similarity ← numerator ÷ denominator
return similarity
実数型の配列: vector2)
実数型: similarity, numerator, denominator, temp ← 0
整数型: i
numerator ← 0
for (i を1から vector1の要素数 まで1ずつ増やす)
numerator ← numerator + [ a ]
endfor
for (i を1から vector1の要素数 まで1ずつ増やす)
temp ← temp + vector1[i]の2乗
endfor
denominator ← tempの正の平方根
temp ← 0
for (i を1から vector2の要素数 まで1ずつ増やす)
temp ← temp + vector2[i]の2乗
endfor
denominator ← [ b ]
similarity ← numerator ÷ denominator
return similarity
解答群
| a | b | |
| ア | (vector1[i] × vector2[i])の正の平方根 | denominator × (tempの正の平方根) |
| イ | (vector1[i] × vector2[i])の正の平方根 | denominator + (tempの正の平方根) |
| ウ | (vector1[i] × vector2[i])の正の平方根 | tempの正の平方根 |
| エ | vector1[i] × vector2[i] | denominator × (tempの正の平方根) |
| オ | vector1[i] × vector2[i] | denominator + (tempの正の平方根) |
| カ | vector1[i] × vector2[i] | tempの正の平方根 |
| キ | vector1[i]の2乗 | denominator × (tempの正の平方根) |
| ク | vector1[i]の2乗 | denominator + (tempの正の平方根) |
| ケ | vector1[i]の2乗 | tempの正の平方根 |
答え : 設問1 エ
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
分野 : テクノロジ系 › 基礎理論 › アルゴリズムとプログラミング › プログラミング
問6
A社は,放送会社や運輸会社向けに広告制作ビジネスを展開している。A社は,人事業務の効率化を図るべく,人事業務の委託を検討することにした。A社が委託する業務(以下,B業務という)を図1に示す。
委託先候補のC社は,B業務について,次のようにA社に提案した。
・B業務だけに従事する専任の従業員を割り当てる。
・B業務では,図2の複合機のスキャン機能を使用する。
A社は,C社と業務委託契約を締結する前に,秘密保持契約を締結した。その後,C社に質問表を送付し,回答を受けて,業務委託での情報セキュリティリスクの評価を実施した。その結果,図3の発見があった。
そこで,A社では,初期設定の状態のままではA社にとって情報セキュリティリスクがあり,初期設定から変更するという対策が必要であると評価した。
設問 対策が必要であるとA社が評価した情報セキュリティリスクはどれか。解答群のうち,最も適切なものを選べ。
解答群
図1 B業務
委託先候補のC社は,B業務について,次のようにA社に提案した。
・B業務だけに従事する専任の従業員を割り当てる。
・B業務では,図2の複合機のスキャン機能を使用する。
・スキャン機能を使用する際は,従業員ごとに付与した利用者IDとパスワードをパネルに入力する。
・スキャンしたデータをPDFファイルに変換する。
・PDFファイルを従業員ごとに異なる鍵で暗号化して,電子メールに添付する。
・スキャンを実行した本人宛てに電子メールを送信する。
・PDFファイルが大きい場合は,PDFファイルを添付する代わりに,自社の社内ネットワーク上に設置したサーバ(以下,Bサーバという)1)に自動的に保存し,保存先のURLを電子メールの本文に記載して送信する。
注 1) Bサーバにアクセスする際は,従業員ごとの利用者IDとパスワードが必要になる。・スキャンしたデータをPDFファイルに変換する。
・PDFファイルを従業員ごとに異なる鍵で暗号化して,電子メールに添付する。
・スキャンを実行した本人宛てに電子メールを送信する。
・PDFファイルが大きい場合は,PDFファイルを添付する代わりに,自社の社内ネットワーク上に設置したサーバ(以下,Bサーバという)1)に自動的に保存し,保存先のURLを電子メールの本文に記載して送信する。
図2 複合機のスキャン機能(抜粋)
A社は,C社と業務委託契約を締結する前に,秘密保持契約を締結した。その後,C社に質問表を送付し,回答を受けて,業務委託での情報セキュリティリスクの評価を実施した。その結果,図3の発見があった。
・複合機のスキャン機能では,電子メールの差出人アドレス,件名,本文及び添付ファイル名を初期設定 1) の状態で使用しており,誰がスキャンを実行しても同じである。
・複合機のスキャン機能の初期設定情報はベンダーのWebサイトで公開されており,誰でも閲覧できる。
注 1) 複合機の初期設定はC社の情報システム部だけが変更可能である。・複合機のスキャン機能の初期設定情報はベンダーのWebサイトで公開されており,誰でも閲覧できる。
図3 発見事項
そこで,A社では,初期設定の状態のままではA社にとって情報セキュリティリスクがあり,初期設定から変更するという対策が必要であると評価した。
設問 対策が必要であるとA社が評価した情報セキュリティリスクはどれか。解答群のうち,最も適切なものを選べ。
解答群
| ア | B業務に従事する従業員が,攻撃者からの電子メールを複合機からのものと信じて本文中にあるURLをクリックし,フィッシングサイトに誘導される。その結果,A社の採用予定者の個人情報が漏えいする。 |
|---|---|
| イ | B業務に従事する従業員が,複合機から送信される電子メールをスパムメールと誤認し,電子メールを削除する。その結果,再スキャンが必要となり,B業務が遅延する。 |
| ウ | 攻撃者が,複合機から送信される電子メールを盗聴し,添付ファイルを暗号化して身代金を要求する。その結果,A社が復号鍵を受け取るために多額の身代金を支払うことになる。 |
| エ | 攻撃者が,複合機から送信される電子メールを盗聴し,本文に記載されているURLを使ってBサーバにアクセスする。その結果,A社の採用予定者の個人情報が漏えいする。 |
答え : 設問1 ア
分野 : テクノロジ系 › 技術要素 › セキュリティ › 情報セキュリティ管理
分野 : テクノロジ系 › 技術要素 › セキュリティ › 情報セキュリティ管理