実務教育・職業教育に関わる皆さまにお役立ち情報をお届け!
ブックマークした記事一覧
TOP 情報処理 2023年からの新制度!基本情報技術者試験、科目Bのつまずきやすいポイントは?

2023年からの新制度!基本情報技術者試験、科目Bのつまずきやすいポイントは?

2023.09.15 (最終更新:2023.12.08) 情報処理 学科特化情報

基本情報技術者試験は2023年より新制度での試験が実施され、以前の午後試験にあたる科目B試験では問題数と制限時間の変更もさることながら、その出題内容が大きく変更されています。広い分野の出題から、擬似言語の問題を中心としたものになり、アルゴリズムの理解など、より一層プログラムの基礎力が問われるものとなりました。

科目Bの試験問題では、数理に関する問題が出題されます。

今回は、弊社科目A/B模擬試験問題集から、数理に関する問題を抜粋して解き方の解説を行います。

今月の注目コンテンツ

【科目B】模擬試験問題集より模擬問題の解説

クリックでテキスト詳細ページへ遷移します

問5 次のプログラム中の ( ※※※ ) に入れる正しい答えを,解答群の中から選べ。

 関数isPerfectNumは整数型の引数numをとり,引数numが完全数であればtrueを,完全数でなければfalseを返す。
 完全数とは,その整数自身を除いた約数の和が自身と一致する数のことである。例えば,6の約数は1,2,3,6であるが,このうち6を除いた三つの値の和は6になるので,6は完全数といえる。

〔プログラム〕
○論理型: isPerfectNum(整数型: num)
 整数型: sum ← 1
 整数型: i ← 2
 論理型: ret ← false
 while ( ※※※ )
  if(num ÷ i の余り が 0 と等しい)
   sum ← sum + i
  endif
  i ← i + 1
 endwhile
 if (sum が num と等しい)
  ret ← true
 endif
 return ret

解答群
 ア i × i が num 以下
 イ i × i が num より小さい
 ウ i が num 以下
 エ i が num より小さい
 オ num ÷ i の商 が整数

完全数かどうかを考えるには引数numが割り切れる値を約数として変数sumへ加算していきます。その整数自身を除いたすべての約数の和が引数numと等しければ、引数numは完全数です。

問題文を読んで “約数を列挙し、加算するプログラム” であると気付いた場合、約数列挙のアルゴリズムを学んでいると、ループ条件に “ i × i がnum以下 ” を選んでしまいそうですが……実は違います。

プログラムを読んでいくと、5行目のif文の中で“num ÷ i の余り が 0 と等しい”場合のみ、割り切れた数を加算していることがわかります。ループ条件を“ i × i がnum以下 ”とすると、6の約数のうち、3が加算されないことになります。つまり、ア、イともに間違いであるとわかります。

★科目Bは限られた時間の中で解いていきますが、問題文から自分が思いつくアルゴリズムを推測して解答群を選ばず、問題中のプログラムをしっかり読んで理解する必要があります。必ず問題文とプログラムを読みましょう。

次に、ウ、エ、オのどれかが正解ですが、最初にオを見ていきます。

オは num ÷ i の商 が整数 の場合、ループ内の処理を行います。問題文にある引数6を渡してオの条件式でトレースを行った場合、iが4になると6 ÷ 4 = 1.5となりループ処理を抜けます。結果、1+2+3となりtrueが返却されます。つまりオが正解なのでしょうか?

while文はnum÷iの商が整数以外の場合、処理を抜けてしまうので、たまたま6は正しい処理になりましたが、6より大きい数の場合、連続したiを使い“num ÷ i の商” を計算した場合、必ず整数とはなりません。

よってオは間違いであるとわかります。

★たまたまトレースしたら正しい動きをしたからと、その選択肢が正しいとは限らないので、注意しましょう。

正解の選択肢はウとエのどちらかとなりますが、ウはnumを含んだループ処理、エはnumを含まないループ処理です。問題文では「完全数とはその整数自身を除いた約数の和」と言っているので、6を含まないループ処理である必要があります。つまりwhileの条件文にはnumを除いた“i が num より小さい”が入ります。

つまり,解答群の「エ」が正解です。

なお、3桁以下の完全数は6,28,496のみです。
アルゴリズムを理解する為に、実際に問題のプログラムを組んで3桁以下の完全数を確認するのもひとつの方法です。

まとめ

科目Bは自分でプログラムを組める実力があれば、擬似言語で出題される問題も特につまずくことなく回答することができるでしょう。

ただし、数理に関する問題を解くにはプログラムの論理的な読解力、そして構築力が求められます。論理式とアルゴリズムを理解することが得点に直接結びつくものとなっています。プログラムの基礎的な理解と、問題を素早く的確に読み取る能力を身につけましょう。

今回の関連教材について詳しく知りたい方はこちらから
新試験制度対応!
基本情報技術者試験 & プログラミング教育 教材シリーズ

今月の注目コンテンツ

この記事は役に立ちましたか?

\ぜひ投票お願いします/
この記事を書いた人
株式会社ウイネット

株式会社ウイネット

ウイナレッジを運営している出版社。
全国の専門学校、大学、職業訓練校、PCスクール等教育機関向けに教材を制作・販売しています。

お問い合わせ
LINE登録
メルマガ登録
LINE登録
メルマガ登録
トップへ戻る