【解法を学ぶ】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
大事なのは順番。下図右だとダメ。

あと、破棄処理はしなくて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が有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼
もちろんコメントでも結構です(・ω・▼)ノシ