見出し画像

【解法を学ぶ】FE令和8年科目B(基本情報技術者試験, 科目B, 擬似言語, 午後)

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

今までの学習がバッチリ効果を出しますね。公式の公開問題は勿論、私が準備した「課題」「11個の解法」も有効でした。随時リンクを貼ったので、必要と感じたら補強に使って頂けたら嬉しいです。


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 | 順番と範囲に注意

シフトですね。奇しくも沢山課題を作ってました。
>【擬似言語アルゴ②】シフトの基礎Note
>【擬似言語アルゴ②課題C】複数個分のシフトNote
>【擬似言語アルゴ③】一部をシフトNote

大事なのは順番。下図右だとダメ。

>【擬似言語アルゴ②】シフトの基礎Noteより2つの注意点

あと、破棄処理はしなくてOK。どうせ上書きするので(下図左❶と下図左右❷)。


問01は「data[i]←data[i-1]」なので、「右←左」しているので、右シフト。

上図と同じなので。右端からシフト処理をすべき。つまり、ループカウンタを大きい方から減らす制御。ウかエです。

ループの開始と終了時をトレースします。シフト漏れや範囲外になってないか確認したい。

  • ウの場合

    • 開始時はi=len-1
      data[len-1]←data[len-1-1]
      ➡右端data[len]へデータが代入されずダメ

    • 終了時はi=2
      data[2]←data[2-1]
      つまりdata[2]←data[1]
      ➡左端data[1]を移動してるのでOK

  • エの場合

    • 開始時はi=len
      data[len]←data[len-1]
      ➡右端data[len]にデータ代入してるのでOK

    • 終了時はi=2
      ウで検討した通りOK

以上よりエ。



配列の注意点

ループの開始と終了で、配列の要素番号が適切かを確認して下さい。

下記にバグがあるので考えてくださいね。

for(iを 1から 10まで 1ずつ増やす)
  data[i] ← data[i - 1]
endfor

バグは「配列の定義外部分を使っている」のです。

  • data[10]を使った理由は。ループカウンタ「i」を「10」まで回してしまったから。

  • data[0]を使った理由は、「i-1」を使っているのを考えた、ループカウンタ制御をしてなかったから。iを「2から」にすればまだ良かった。

なおdata[0]が使えないのは、FE科目B擬似言語で「配列の要素番号は1から」なので。プログラムでは[0]から使えるので1個ずれます。私はfor(iを 1から~)で、data[i-1]という組み方をします。



配列とリスト

配列は宣言時に個数を指定するので、
「整数型:data←{0, 0, 0}」であったら、
data[1]~[3]しか使えません。
data[4]は使えません。

ただし、ちょっと曖昧で。
「dataの末尾に0を追加」と書かれていたら、
data[4]が使えるようになります。

「リスト」の使い方ですが。FE科目B擬似言語では配列(基本的に個数固定)とリスト(後から追加できる)を曖昧にしてるみたい。>擬似言語の教科書Note㉒




問02 | 簡単データで逆算/確認する

問題文に具体的な入力値がない時、自分で値を設定して動作確認します。>擬似言語の解法11Note❷

complement関数の返り値は、問題文「xを加算すると00000000になる値」なので、yを逆算してみます。

例えば、x=00000001の時、返り値は11111111になるはず。

擬似言語を遡ってみます。
❶「return y」では、y=11111111
❷「y←y+00000001」する時、y=11111110
❸「y←空欄」で、x=00000001からy=11111110を作る処理をア~カから選びます。

  • ア:x AND 01111111 = 00000001

  • イ:x AND 11111111 = 00000001

  • ウ:x OR   01111111 = 01111111

  • エ:x OR   11111111 = 11111111

  • オ:x XOR 01111111 = 01111110

  • カ:x XOR 11111111 = 11111110

以上よりカ。


再度、順張りで確認。
❶「y←空欄」にて
00000001を
11111111とXORしたら
11111110になり。
❷「y←y+00000001」にて
11111111になる。
❸たしかにx=00000001と足せば、
00000000になる。


1つの確認だと”たまたま”もあり得るので、もう1回ぐらい確認してみます。今回はカだけが候補になりましたが、複数候補がある時にも有効なテ。

x=00000010の時、返り値=11111110になるか。
❶「y←空欄」にて
00000010を
11111111とXORしたら
11111101になり。
❷「y←y+00000001」にて
11111110になる。
❸たしかにx=00000010と足せば、
00000000になる。

良さそうですね。




問03 | 選択肢が多いから減らしたい

ポイントは2つ。

1点目は、配列要素の範囲。
配列の要素番号にループカウンタが混ざっているので。
・擬似言語では[1]からなので、[0]や[-1]を使ってないか
・宣言時の配列要素数を超えてないか
のチェックをすると、簡単に選択肢を絞れるかもです。

2点目は、簡単な値を設定する。
func1()は計算が簡単、func2()で同じ結果になるように組むのが目的。簡単なデータを設定して、func1()の結果を求めて、func2()で同じ結果が出る選択肢を選びます。>擬似言語の解法11Note❷



ループ→範囲違反→消去法 できないか?

問01で学んだ通り。data[i-1]やdata[i-2]が、うっかりdata[0]やdata[-1]にならないか確認したい。

「for(iを3から~増やす)」なので、iの最小値は「3」、最大は青点状。

i=3を代入すると
data[i-1]➡data[2]
data[i-2]➡data[1]

i=4を代入すると
data[i-1]➡data[3]
data[i-2]➡data[2]

i=5を代入すると
data[i-1]➡data[4]
data[i-2]➡data[3]
data[4]は定義されてないですね。

しつこいですが。
i=6を代入すると
data[i-1]➡data[5]
data[i-2]➡data[4]
data[5]もdata[4]も定義されてないですね。

よって、data[i-1]やdata[i-2]を使っている選択肢(ウエキク)を消去。候補は、アイオカ。



func1()と同じになるfunc2()を組み立てる

問02と同じで、自分で簡単な値を設定して確認します。>擬似言語の解法11Note❷


n=2はどうせ「return 1」で計算が介入しないので、n=3から考えます。func2()でも、n=3からループが1回以上実行されますし。


n=3の時。

func1()は、
2×func1(3-2)+func1(3-1)
=2×func1(1)+func1(2)
=2×1+1
=3

func2()をアイオカで考えます。
for(iを3からn=3まで1ずつ増やす)なので1回だけ実行。
data[1]←data[2]、data[2]←data[3]で、配列dataは変わらず{1, 1, 1}のまま。

data[3]を4通り計算します。
ア:2×1+1=3
イ:2×1+1=3
オ:1+2×1+1=4
カ:1+2×1+1=4

func1(3)=3だったので、アイが候補(オカを消す)。


n=4の時。

func1()は、
2×func1(4-2)+func1(4-1)
=2×func1(2)+func1(3)
※func1(3)はn=3の時に3だと計算済み。
=2×1+3
=5

func2()をアイで考えます。
for(iを3からn=4まで1ずつ増やす)なので2回実行。

i=3の時。data[1]←data[2]、data[2]←data[3]で、配列dataは変わらず{1, 1, 1}のまま。

data[3]を2通り計算。
ア:2×1+1=3
イ:2×1+1=3
data={1, 1, 3}になります。

i=4の時。data[1]←data[2]、data[2]←data[3]で、data={1, 3, 3}。

data[3]を2通り計算。
ア:2×1+3=5
data={1, 3, 5}になります。
イ:2×3+1=7
data={1, 3, 7}になります。

func1(4)=5だったので、アが正答。




問04 | よく出るリスト(データ, 次アドレス)

リストは出題されてます。
>【FE】令和5年科目B問01のNote
>【FEB】サンプル問題1科目B問10のNote
>【FEB】サンプル問題2科目B問03のNote

orderList()関数の機能は、図1から図2を作る感じ。

配列dataList, pointerListを読み解くんですね。メモリからリストデータを組み立てて表示。


for文内の「繰返し処理を終了する」した後はreturn文。関数全体が終わります。つまり、リストを全部紐解いたってこと。

では、リストの終わりについて。問題文に「単方向リストの末尾に対応するpointerListの要素は未定義」なので、【空欄a=pointerList[p]】が未定義だったら繰返し処理を終了して関数も終了させればOK。

解答はウエに絞り。


【空欄b】は、変数pに何か代入してる。

変数pはdataList[p]やpointerList[p]のように要素番号に使われている。

例えば「linearListの末尾にdataList[p]の値を追加する」って、リストを紐解いた結果linearListにデータを追加してるので。pは次に紐解くデータの要素番号を指している。

次のデータはpointerList。なぜなら問題文に「pointerListにリストの次の要素に対応するdataListの要素番号を格納」とあるので。

「p←pointerList[p]」で、次要素の要素番号(アドレス)が代入されます。

解答はイエに絞る。【空欄a】でウエに絞ったので、正答はエだと確定します。


【空欄b】は消去法でアウを消して、イエに絞れます。

もし「p←i」だと、「for(iを1から~1ずつ増やす)」なので、
LinearListの末尾にdataList[1]の値を追加する
LinearListの末尾にdataList[2]の値を追加する
LinearListの末尾にdataList[3]の値を追加する
となってしまう。
図2が{10, 30, 20, 40}となってしまう。

消去法で「空欄b = i」はない、アウはない、と判断してOK。


単方向リストは、操作のアルゴリズムだけでなく、オブジェクト指向としても出題されてます。出てるかは分かりませんが、双方向リストも課題を作ろうか思案しときますね(準備中*)。
>【FE】令和5年科目B問01のNote
>【FEB】サンプル問題1科目B問10のNote
>【FEB】サンプル問題2科目B問03のNote




問05 | 問題文の引数/返り値に合うか

引数と返り値が掲載されている場合があります。掲載通りになるのを見つければ良いのです。>擬似言語の解法11Note❸

【空欄a】について。「/* 名前一覧の作成 */」なのに、ウエ「未定義の値」を追加するわけない。アとイに絞り。


【空欄b】について。一旦、問題文の例に合わせたトレースをしてみます。

問題文通り。引数{"Red", "Green", "Blue", "Red"}を入力すれば、返り値{{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {1, 0, 0}}になると書かれていますね。

「/* 名前一覧の作成 */」にて、配列colorVector={"Red", "Green", "Blue"}になります。

「/* One-Hot表現への変換 */」にて、配列tempVectorに1や0を追加して、Redなら{1, 0, 0}、Greenなら{0, 1, 0}を作りたいんですね。


for文が二重で、「jを~colorsの要素数まで」「kを~colorVectorの要素数まで」から、配列colorsと配列colorVectorが絡む、と一旦決め打ちして考えてみます。

たしかに、引数が入った配列colorsから、1つcolors[j=1]を取り出せば”Red”。配列colorVectorから1つcolorVector[k=1]を取り出せば"Red"なので、比較して一致でtempVector={1}にしちゃえば良い。

colorVector[k=2]で"Green"なので、一致しないので、tempVector={1, 0}のように「0」を追加すれば良い。

colorVector[k=3]で"Blue"なので、一致しないので、tempVector={1, 0, 0}のように「0」を追加すれば良い。


k=3=colorVectorの要素数までforループしたので、次はj=2。

colors[j=2]="Green"。
colorVector[k=1]="Red"で、一致せず、tempVector={0}
colorVector[k=2]="Green"で、一致して、tempVector={0, 1}
colorVector[k=3]="Blue"で、一致せず、tempVector={0, 1, 0}
良さそう。

以上より正答はイ。(空欄aでアイに絞ってた)


消去法でアを消せるかも考えておきます。

アb「colorsの要素のいずれかにcolorVector[k]の値が格納されている」なら「tempVectorの末尾に1を追加」と組んじゃうとダメってのも確認します。

colors={"Red", "Green", "Blue", "Red"}で
colorVector={"Red", "Green", "Blue"}という状況。

colorsの要素のいずれか("Red", "Green", "Blue")に
colorVector[k=1]={"Red"}の値が格納されている。
colorVector[k=2]={"Green"}の値も格納されている。
colorVector[k=3]={"Blue"}の値も格納されている。
よってtempVector={1, 1, 1}の出来上がり。

jループでcolors[j=1~4]でループさせて、
{{1, 1, 1}, {1, 1, 1}, {1, 1, 1}, {1, 1, 1}}になります。


ひょっとしたら、本試験では「消去法だけで」カタをつけても良いかもですね。

【空欄a】でウエなし(アイ)、【空欄b】でアウなし(イエ)、正答はイ。

とはいえ、イで正しく動くのかは確認も理解もしておきいたいですね。




問06 | 記述に忠実に

解き始めた時は「頭に入れることイッパイだなぁ」と思いましたが、結局は表1と図1の見比べがメイン。

必ず記述を見つけましょう。自分の常識/勘/センスは一旦封印です。FEに限らず、SGでもSCでも、全IPA資格試験で通用する原則です。>【長文解法】6つのテクニックNote⓪


項番(一)。「古いログから上書きされ」るのは、図1ルール4「1年間のログが参照できる」に違反する可能性あり。空き容量が充分ないと、1年分保存できないから。


項番(二)。「運用は~現在はC主任だけ」は、図1ルール3-3「運用担当者は複数名にする」に違反。


項番(三)。「ログの日時は、UTC」は、図1ルール2「日本標準時」に違反。

なお「UTC(世界協定時)」は経度0度(=イギリス)での時刻、「日本標準時(JST)」は9時間差です。

日本で午前9時の時、UTCは午前0時。

計算もできます。24時間/360度=1時間/15度。経度が15度違うと1時間の時差。日本は東経135度(明石市)。135/15=9時間。
>SC令和3年度春期午後2問1設問1(4)aの解説Note
>SC令和3年度春期午後2問1設問1(5)bの解説Note
>SC平成30年度秋期午後2問2設問2(2)の解説Note
>SC平成27年春午後1問2の解説Note
>SC平成24年秋午後1問3設問1bの解説Note


項番(四)。「Zサーバのログ」が「毎月末」に「Yサーバに保管」。図1で確認するも特段「毎月末」などの指定なし。

「Yサーバに保管」は、図1ルール3-2「社内ネットワーク~ファイルサーバにログを保管」で、図1上の問題文「社内ネットワークに設置したファイルサーバ(以下, Yサーバという)」で一致。

でも表1って「図1のルールに違反している現在の運用」なので、図1の何かに違反してる。

図1ルール3-2を更に読むと「運用担当者だけがアクセスできるようにすること」。図1上の問題文に「営業部の各従業員~Yサーバ上の全てのファイルが編集可能」なので、運用担当者以外もアクセスできちゃう。

「全てのファイルが編集可能」を読んだ時点で、怪しいので▶印です。SG科目BやSCまでも使えるテクニックです。>長文問題を読む6つのテクニック(3-3)


以上より
項番(一)ルール4
項番(二)ルール3
項番(三)ルール2
項番(四)ルール3
なので、ルール3違反は(二)(四)、正答はケ。




まとめ

お疲れ様でした!

60分で基礎を復習できます。
>【2分×30節で読める基礎】擬似言語の教科書Note
問題演習を通して見出すべきノウハウ。
>【図解で流し見】擬似言語の解法11のNote
基本課題12個+追加課題25個(現状)
>FE科目BのSTEP4(目次)

実力確認や模擬試験に。
>令和07年科目Bの解説Note
>令和06年科目Bの解説Note
>令和05年科目Bの解説Note
>サンプル科目B(1❶)の解説Note(擬似言語)
>サンプル科目B(1❷)の解説Note(セキュリティ)
>サンプル科目B(2)の解説Note

またFE科目Bセキュリティは、SG科目Bが似ている(てか流用している)ので、問題演習として優秀です。>全Noteへのリンク(SG)

良かったらご活用下さい。


いいなと思ったら応援しよう!

せんないの過去問解説Note 学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ