メインコンテンツへスキップ
見出し画像

【解き筋まで図解で解説】FE令和5年科目B(基本情報技術者試験, 科目B, 擬似言語, 午後)

    このNoteでは「基本情報技術者試験(FE)」令和5年度科目Bを解説します。

    私の解説Noteは、”正解を理解する””不正解も理解する”って普通の復習には終わらせません。

    ”現場の限られた時間での解き筋”、”数学/科目Aの知識”、”科目Bの主題であるトレースの訓練”、”擬似言語/プログラミングの手口”など、まで図解でしっかり解説します。

    FE科目Bの本試験は20問なのに、公開問題はたったの5問。しかも年に1回だけ公開。新FEになって、サンプル(20問)+令和5~7(5問×3回=15問)で25問しかありません。

    数少ない公開問題を無駄にしないために、一度不合格になって”学習に使える問題がもうない!”って方のために、深い復習を提案したくて一所懸命作りました。

    このNoteは、私がIT専門学校で授業したことを基に作成しています。IT専門学校でFEは第一目標として、カリキュラムが構築されています。何も知らずに入学しても、1年生10月にはFE合格していきますよ。実績ある教育ノウハウを詰め込んだので、少しでも信頼して頂けたら嬉しいです。

    少しでも学習のお役に立てたら嬉しいです。

    それでは始めましょう!


    >全Noteへのリンク(FE節)
    ※科目Aのテーマ別対策、科目B対策、旧FE午後(セキュリティ)など沢山作りました!

    【NOTICE】著作権を侵害には即座に法的措置をしています。人格否定も即座にブロックなどの自衛手段を行います。私は1個人であり、公人ではありません。プライベート時間の全てを費やして作成してきました。ご理解頂ける方のみ、ご活用されると嬉しいです🫠


    問01 | メインループを更に繰り返す

    第一問なので”ジャブ”でしたね。

    擬似言語/プログラムで、合計計算でループ(for)を学び、ループ内に分岐(if)を組み込んで、奇数だけを抽出、などは私の授業の定番です。
    もしやったことなければ、擬似言語化/プログラミングをやってみ下さい。”1~10のうち奇数だけを出力する”。

    学習できるポイントも小粒。でも大事な基礎です。

    • 素数:常識として(小学校5年生レベル)

    • プログラムの目的=出口から解きほぐす

    • 重要なメイン処理を抽出する

    • フラグの初期値を敢えてTrueにする意味

    • ループの抜け方2種類(条件, break)


    正答はア(maxNum, i÷jの余りが0と等しい)。

    画像

    知識 | 「素数」の定義を知っておこう

    「素数」の定義は大丈夫だったですかね?

    「素数」とは、1より大きいの自然数のうち、1 と自身だけで割り切れる数。2, 3, 5, 7, 11・・・です。2は1と2だけで割り切れますね。3も1と3だけ、5も1と5だけ、7も1と7だけ、11も1と11だけ。

    問題文に書かれてなかったので、ひょっとしたら自信ない方/知らなかった方もいるかもですね。

    知らなかった方は”ちょっと不親切”と思っかもですが、「奇数」「偶数」と同じレベルで知っておいてね、な知識として覚えてください。調べたら小学校5年生で初登場とのこと。



    現場での解き筋 | 出口から紐解く

    プログラムを頭から見るよりは、お尻から紐解くのがお薦めです。問題文から”プログラムの目的”は分かっているので、擬似言語の出口は目的に一致するはずですから。

    画像

    ❶素数をリストに登録してるのが、問題文の目的通り。
    ❷ループを途中で強制終了してるので、”素数じゃない”って分かったので、素数検査を止めたんだな。
    ❸【空欄b】には”素数じゃない”条件が入るんだな。

    これで【空欄b=割り切れた旨】だと分かり、ア/ウに解答候補を絞れます(i÷jの余りが0と等しい)。


    あとは【空欄a】を考えればOK。

    問題文に「~以下の全ての素数~」を見つけるのが目的なので、色んな素数を見つけたいんですね。

    【空欄a】="引数(maxNum)で与えられた整数以下~"と考えて、ア(maxNum)だと確定。次節でも詳しく考えます。



    コツ | メインと周回を分離する

    今回は、ある数「i」が素数がであるか/ないかを、ある数「j」で割り切れた(余りが0)なら、素数”でない”/割り切れなかったら、素数”である”としてます。

    素数検査(青)を、色んな数に行うためにループ(水色)しています。最初に理解したいのは、メイン処理の素数検査(青)。

    画像

    もう理解できたかもですが、処理の流れをまとめますね。

    画像

    メインの処理は❶❷。
    ❶青:ある数(i)が素数なのかを判定
    ❷紫:素数だったら配列に登録

    ❸は、メイン処理を繰り返すだけ。
    ❸水色:検査するある数(i)を変えて、❶❷をしていくループ。プログラム目的が”引数以下の素数を全て挙げる”なので。引数maxNum以下の数(i=2からmaxNumまで)について❶❷をします。



    プログラム | 敢えて初期から「True」

    普通に考えると、”~であるフラグ”は、最初はFalseにして、判定を満たしたらTrueに変更する処理をしますよね。最初から”正しい=True”って決めてるのは、日常生活的に違和感。

    しかし、今回は敢えて「DivideFlag←True」と最初から真「True」。下図の緑。

    画像

    素数”じゃない"判定がされなければ、そのままTrue。

    でも素数で”ない”判定がされたら(❸がTrue)、その場で計算を止めます(❷)。素数じゃないのが確定したんだから、これ以上の素数検査は不要になりますからね。

    一度、今回とは逆に、フラグ初期値をFalseにした擬似言語を作ると、今回の方が効率が良いことが分かりますよ(今後解説Note作ってみようかな*)。



    プログラム | ループの抜け方「2種類」

    ループ(for, while)には、ループ処理をする条件/しない条件が書かれますね。何回やったら終了とか、見つけたら終了とか。

    今回のfor文でも、回数が明記されてます。さらに”ループ途中で強制的に止める”処理(break)も書かれています。

    画像

    ループの抜け方2種類が書かれていましたね。強制終了(赤)の条件が甘くて、見逃しちゃった(もっと青を実施すべきだった)ら大変ですね。条件検討もデバッグも慎重に。


    なお問3では「while(True)」は、条件式がない/常にTrueなので無限ループになってて、ループ内でbreakする書き方が採用されてます。

    画像

    ❹While(True)~➓が無限ループ。
    ❼で強制的にループを抜けます(break)。

    ❼breakが必ず発動するか、条件検討とデバッグを慎重にせねば。無限ループでプログラムが動きっぱなしに💦




    問02 | 関数の呼出/終了

    問02は短いのでトレースが楽でした。まだ準備運動といったところかな。

    学ぶポイントも問01と同じく小粒ですが、基礎。

    • 関数の呼び出しと戻り

    • 科目Aでも出た「再帰関数」は図で解く

    • 関数の引数/返り値(問04で深堀)

     
     
    大学・専門学校の先生の解説Note。 学生時代にITパスポート試験・基本情報技術者試験・応用情報技術者試験を独学で高得点合格。情報処理安全確保支援士試験(セキスペ)・データベーススペシャリスト試験・ネットワークスペシャリスト試験・G検定なども取得。 2027年にPD-S受験予定。