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

【基本情報】科目Bの擬似言語入門|初心者でも読めるプログラムの読み方

    入門の次は、値が変わる処理を自分で追ってみましょう。 負の数の最大値で学ぶトレース実演(全文無料)では、初期値と更新条件を変える確認問題まで練習できます。まず解説を隠して途中の値を書き、答えが合わなければ最初にずれた行を見直してください。

    コードを読む練習は、変数の値を紙に残すところから

    この記事の例題では「行番号・変数・値」の欄を作り、代入や繰返しのたびに書き換えてください。解説を閉じても追えるか、全文無料の第39回「擬似言語とトレースの基本」でも試せます。

    基本のトレースから探索・整列などへ練習を広げたい方は、科目B・擬似言語の単品教材の無料部分・収録内容を見る。有料教材なので、まず説明が自分に合うか確認してください。単品は科目A・B全60回講座とは別商品です。購入済みの同じ教材を買い直す必要はありません。この記事の解説と例題は全文無料のままです。

    「科目Bの問題を開いたけど、擬似言語が何をしているのか全然分からない……」

    「プログラミング経験がないから、コードを見るだけで難しく感じる😇」

    「変数?配列?for?while?どこから読めばいいの?」

    基本情報技術者試験の科目Bを勉強し始めた人が、最初につまずきやすいのが、

    擬似言語

    です。

    でも、最初から難しいアルゴリズムを理解する必要はありません。

    まず覚えてほしいのは、

    プログラムは上から順番に、変数の値がどう変化するか追いかける

    ということ。

    この記事では、

    変数 → 代入 → 条件分岐 → 繰返し → 配列 → 関数 → トレース

    の順番で、擬似言語の読み方を超入門から解説します。

    プログラミング未経験でも大丈夫です。

    最終的に、

    「コードを見たら、紙に値を書きながら処理を追える」

    状態を目指しましょう🔥

    ⸻

    1.そもそも擬似言語とは?

    擬似言語とは、

    アルゴリズムやプログラムの処理を表現するための言語

    です。

    PythonやJavaなど、特定のプログラミング言語そのものではありません。

    例えば、

    x ← 10
    y ← 20
    z ← x + y

    という処理があったとします。

    これは、

    x に10を入れる
    y に20を入れる
    x + y の結果を z に入れる

    という意味です。

    したがって最後は、

    z = 30

    になります。

    最初はこのくらい単純な処理から慣れていけばOKです。

    ⸻

    2.科目Bで一番大事なのは「トレース」

    擬似言語を攻略するうえで、ぜひ覚えてほしい言葉があります。

    それが、

    トレース

    です。

    トレースとは、

    プログラムを順番に追いながら、変数などの値がどう変化するか確認すること

    です。

    例えば、

    x ← 1
    x ← x + 2
    x ← x × 3

    なら、

    最初
    x = 1
    ↓
    x = 1 + 2
     = 3
    ↓
    x = 3 × 3
     = 9

    となります。

    答えは、

    x=9

    です。

    科目Bでは、この「値を追う力」が非常に重要になります。

    ⸻

    3.「←」は代入

    最初に覚えたい記号が、

    ←

    です。

    例えば、

    x ← 5

    なら、

    xに5を代入する

    という意味です。

    ここで数学の「=」と同じ感覚で考えないことがポイントです。

    例えば、

    x ← x + 1

    という処理。

    数学なら、

    x = x + 1

    はおかしく見えますよね。

    でもプログラムでは、

    現在のxに1を足して、その結果を新しいxとして保存する

    という意味です。

    ⸻

    4.x ← x + 1 を実際に追ってみる

    例えば、

    x ← 3
    x ← x + 1

    なら、

    最初は、

    x = 3

    です。

    次の処理で、

    x ← 3 + 1

    となるため、

    x = 4

    になります。

    つまり、

    右側を先に計算して、その結果を左側へ入れる

    と考えると分かりやすいです。

    ⸻

    5.変数とは?

    変数は、

    値を入れておく箱

    と考えると分かりやすいです。

    例えば、

    x ← 10

    なら、

    画像

    というイメージです。

    その後、

    x ← 20

    が実行されれば、

    画像

    となります。

    前の10ではなく、

    現在のxは20

    です。

    ⸻

    6.複数の変数を追ってみよう

    次の処理を考えます。

    x ← 2
    y ← 3
    x ← x + y
    y ← x × 2

    順番に追います。

    最初は、

    x = 2
    y = 3

    次に、

    x ← x + y

    なので、

    x = 2 + 3
     = 5

    この時点で、

    x = 5
    y = 3

    です。

    次に、

    y ← x × 2

    なので、

    y = 5 × 2
     = 10

    最終的には、

    x = 5
    y = 10

    となります。

    ⸻

    7.トレース表を作る

    変数が増えてきたら、頭の中だけで追わない方が安全です。

    おすすめは、

    トレース表

    です。

    先ほどの処理なら、

    画像

    となります。

    科目Bでは、このように紙へ書き出すだけでかなりミスを減らせます。

    ⸻

    8.条件分岐とは?

    次に重要なのが、

    条件分岐

    です。

    「もし○○なら、この処理をする」

    という仕組みです。

    例えば、

    if x > 10
       y ← 1
    else
       y ← 0
    endif

    とします。

    x=15なら、

    15 > 10

    なので条件成立。

    したがって、

    y = 1

    になります。

    ⸻

    9.if文は「条件を見る」

    条件分岐を見たら、最初に、

    条件が真か偽か

    を確認します。

    例えば、

    x ← 7
    if x >= 5
       y ← 10
    else
       y ← 20
    endif

    なら、

    7 >= 5

    は真です。

    したがって、

    y = 10

    となります。

    ポイントは、

    ifを見たら条件式を先に判定する

    ことです。

    ⸻

    10.比較演算子

    条件式では、比較演算子が登場します。

    代表例を整理すると👇

    画像

    例えば、

    x > 5

    なら、

    xは5より大きいか?

    という意味です。

    ⸻

    11.「以上」と「より大きい」を混同しない

    ここは単純ですが、トレース中に意外とミスします。

    例えば、

    x = 5

    のとき、

    x > 5

    は、

    偽

    です。

    一方、

    x >= 5

    なら、

    真

    です。

    境界値は注意しましょう。

    ⸻

    12.AND・OR・NOT

    条件式が複雑になると、

    AND

    OR

    NOT


    も登場します。

    例えば、

    x > 5 AND x < 10

    なら、

    xが5より大きく、かつ10より小さい

    という意味です。

    x=7なら、

    7 > 5 → 真
    7 < 10 → 真

    両方真なので、

    全体も真

    です。

    ⸻

    13.ANDとORの違い

    覚え方はシンプルです。

    AND
    両方成立したら真

    OR
    どちらか一方でも成立したら真

    例えば、

    x > 10 OR y > 10

    なら、

    xまたはyのどちらかが10より大きければ真になります。

    ⸻

    14.繰返し処理

    科目Bで非常に重要なのが、

    繰返し

    です。

    例えば、

    for i = 1 to 5
       処理
    endfor

    なら、

    iの値を変えながら処理を繰り返します。

    イメージは、

    i = 1
    ↓
    i = 2
    ↓
    i = 3
    ↓
    i = 4
    ↓
    i = 5

    です。

    ⸻

    15.for文をトレースしてみる

    例えば、

    x ← 0
    for i = 1 to 5
       x ← x + i
    endfor

    を考えます。

    最初は、

    x = 0

    です。

    i=1なら、

    x = 0 + 1
     = 1

    i=2なら、

    x = 1 + 2
     = 3

    i=3なら、

    x = 3 + 3
     = 6

    そのまま続けると、

    画像

    となります。

    最終的なxは、

    15

    です。

    ⸻

    16.ループは表にすると一気に読みやすくなる

    初心者ほど、

    for i = 1 to 10

    のようなコードを頭の中だけで処理しようとしがちです。

    おすすめは、

    i | x | y

    のような表を問題用紙へ作ること。

    例えば、

    i x
    1 1
    2 3
    3 6

    というように、

    1ループごとに1行

    書きます。

    これだけでかなり読みやすくなります。

    ⸻

    17.while文

    for以外に、

    while

    も重要です。

    whileは、

    条件が成立している間、処理を繰り返す

    というものです。

    例えば、

    x ← 1

    while x < 10
       x ← x × 2
    endwhile

    を考えます。

    ⸻

    18.whileをトレースする

    最初は、

    x = 1

    条件は、

    x < 10

    です。

    順番に追うと、

    1
    ↓
    2
    ↓
    4
    ↓
    8
    ↓
    16

    となります。

    x=16になったところで、

    16 < 10

    は偽。

    そこでループ終了です。

    ⸻

    19.forとwhileの違い

    ざっくり整理すると、

    for
    回数を意識した繰返し

    while
    条件を満たしている間の繰返し

    です。

    ただし、実際の問題ではコードそのものを見て、

    何回繰り返すのか

    を判断できることが重要です。

    ⸻

    20.配列とは?

    次に科目Bで超重要なのが、

    配列

    です。

    配列は、

    複数のデータをまとめて扱う仕組み

    です。

    例えば、

    data = [10, 20, 30, 40]

    のようなイメージです。

    1つの名前で複数の値を管理できます。

    ⸻

    21.配列は「番号」と「値」を分けて考える

    配列問題では、

    要素番号

    と、

    その場所に入っている値

    を混同しないことが重要です。

    例えば、

    data = [10, 20, 30, 40]

    なら、

    場所 → 値

    という関係があります。

    問題文で添字が0始まりなのか1始まりなのかも必ず確認しましょう。

    ここを読み飛ばすと、答えが1つずれる原因になります。

    ⸻

    22.配列を図にする

    配列が出たら、次のように書くのがおすすめです。

    画像

    例えば、

    data[2]

    なら、0始まりの場合は、

    30

    です。

    配列は頭の中だけで扱わず、

    横に並べて書く

    とかなり分かりやすくなります。

    ⸻

    23.配列+繰返し

    科目Bでは、

    配列とループ

    が組み合わされます。

    例えば、

    data = [3, 5, 2, 8]

    sum ← 0

    for i = 0 to 3
       sum ← sum + data[i]
    endfor

    という処理。

    これは配列の値を順番に足しています。

    ⸻

    24.実際に追ってみる

    トレース表を作ります。

    画像

    したがって、

    sum=18

    です。

    コードだけを見るより、かなり分かりやすいですよね。

    ⸻

    25.最大値を探す処理

    配列問題では、

    最大値・最小値

    を探す処理も重要です。

    例えば、

    data = [3, 8, 5, 10, 4]

    max ← data[0]

    for i = 1 to 4
       if data[i] > max
           max ← data[i]
       endif
    endfor

    という処理。

    これは、

    今まで見つけた最大値と、次の値を比較する

    処理です。

    ⸻

    26.最大値探索をトレース

    最初は、

    max = 3

    です。

    次に8を見ると、

    8 > 3

    なので、

    max = 8

    次の5は、

    5 > 8

    ではないので変更なし。

    次の10で、

    10 > 8

    となるので、

    max = 10

    最後の4でも変更なし。

    答えは、

    10

    です。

    ⸻

    27.「現在値」を意識する

    擬似言語で混乱する原因の1つが、

    昔の値と現在の値が頭の中で混ざること

    です。

    例えば、

    x ← 2
    x ← x + 3
    x ← x × 2

    なら、

    2 → 5 → 10

    です。

    最後の処理で、

    2 × 2

    としてはいけません。

    その時点でのxは、

    5

    だからです。

    常に、

    「今の値はいくつ?」

    を意識しましょう。

    ⸻

    28.関数とは?

    次に、

    関数

    です。

    関数は、

    特定の処理をまとめたもの

    と考えると分かりやすいです。

    例えば、

    function add(a, b)
       return a + b
    endfunction

    という関数があるとします。

    x ← add(3, 5)

    なら、

    3 + 5

    を計算して、

    8

    を返します。

    したがって、

    x = 8

    です。

    ⸻

    29.引数と戻り値

    関数では、

    引数

    戻り値


    という言葉が重要です。

    例えば、

    add(3, 5)

    なら、

    3と5が、

    引数

    です。

    そして、

    return 8

    の8が、

    戻り値

    です。

    イメージすると、

    3・5
    ↓
    [ add ]
    ↓
     8

    です。

    ⸻

    30.関数を見たら「中へ入る」

    例えば、

    function double(x)
       return x × 2
    endfunction

    a ← 5
    b ← double(a)

    なら、

    まず、

    a = 5

    です。

    次に、

    double(5)

    へ入ります。

    関数内部では、

    5 × 2

    なので、

    10

    を返します。

    したがって、

    b = 10

    です。

    ⸻

    31.入れ子とは?

    少し慣れてくると、

    繰返しの中に繰返し

    が登場します。

    例えば、

    for i = 1 to 3
       for j = 1 to 2
           処理
       endfor
    endfor

    です。

    外側が3回。

    そのたびに内側が2回。

    したがって処理回数は、

    3 × 2=6回

    です。

    ⸻

    32.二重ループの読み方

    二重ループでは、

    内側を全部終えてから、外側が1つ進む

    と考えます。

    イメージは、

    画像

    です。

    この構造を理解しておくと、ソートなどの問題にも入りやすくなります。

    ⸻

    33.探索アルゴリズム

    科目Bでは、

    「データの中から目的の値を探す」

    処理も重要です。

    代表例が、

    線形探索

    と、

    二分探索

    です。

    ⸻

    34.線形探索

    線形探索は、

    先頭から順番に探す

    方法です。

    例えば、

    [4, 7, 2, 9, 5]

    から9を探すなら、

    4 → 違う
    7 → 違う
    2 → 違う
    9 → 発見

    となります。

    非常に分かりやすい探索方法です。

    ⸻

    35.二分探索

    二分探索は、

    探索範囲を半分ずつ絞る

    方法です。

    ただし、

    基本的には整列済みデータ

    が前提です。

    例えば、

    [2, 5, 8, 11, 14, 17, 20]

    から17を探す場合、

    中央付近を確認しながら、

    左半分か右半分か

    を判断して探索範囲を狭めます。

    ⸻

    36.線形探索と二分探索

    画像

    特に、

    二分探索=整列済み+半分ずつ

    を覚えておきましょう。

    ⸻

    37.スタック

    データ構造では、

    スタック

    も重要です。

    スタックは、

    最後に入れたものを最初に取り出す

    構造です。

    これを、

    LIFO

    といいます。

    画像

    覚え方は、

    積み重ねた皿

    です。

    ⸻

    38.キュー

    キューは、

    最初に入れたものを最初に取り出す

    構造です。

    これを、

    FIFO

    といいます。

    画像

    イメージは、

    レジの行列

    です。

    ⸻

    39.スタックとキューを比較

    画像

    ここはセットで覚えましょう。

    ⸻

    40.科目Bでよくある失敗① 頭の中だけで解く

    最も避けたいのが、

    全部頭の中で追う

    ことです。

    簡単な問題ならできます。

    でも、

    配列
    +
    ループ
    +
    条件分岐
    +
    変数更新

    が組み合わさると、一気に難しくなります。

    だから、

    書く

    ことが重要です。

    ⸻

    41.最低限この3つを書く

    擬似言語問題では、

    最低でも、

    ① ループ変数

    ② 更新される変数

    ③ 配列の値


    を書き出しましょう。

    例えば、

    i | data[i] | x

    という表です。

    問題に合わせて列を追加します。

    ⸻

    42.よくある失敗⑴ コード全体を一気に理解しようとする

    長い擬似言語を見ると、

    「全部理解しないと解けない」

    と思ってしまいます。

    でも、実際には、

    ① 初期値を確認
    ↓
    ② ループ範囲を確認
    ↓
    ③ 条件を確認
    ↓
    ④ 変数更新を確認

    のように分解すればOKです。

    1行ずつ処理する

    ことを意識しましょう。

    ⸻

    43.よくある失敗⑵ 初期値を見落とす

    例えば、

    sum ← 0

    と、

    sum ← 1

    では結果が変わります。

    特に、

    合計

    最大値

    カウンタ


    などでは初期値が重要です。

    コードを読み始めたら、

    最初に初期値へ丸を付ける

    くらいでもOKです。

    ⸻

    44.よくある失敗⑶ 添字を勘違いする

    配列では、

    0始まりか1始まりか

    を必ず確認します。

    例えば、

    data = [10, 20, 30]

    でも、

    0始まりなら、

    data[0] = 10

    です。

    問題の定義を読まず、

    「配列は絶対0始まり」

    と思い込まないようにしましょう。

    ⸻

    45.よくある失敗⑷ ループ終了条件を間違える

    例えば、

    i < 5

    と、

    i <= 5

    では、実行回数が変わります。

    <

    なのか、

    ≦

    なのか。

    境界を必ず確認します。

    ⸻

    46.擬似言語を読む順番

    問題を見たら、僕なら次の順番で確認します。

    STEP1
    変数・配列を確認

    STEP2
    初期値を確認

    STEP3
    ループを探す

    STEP4
    条件分岐を確認

    STEP5
    どの変数が更新されるか確認

    STEP6
    トレース表を作る

    この順番を習慣化すると、コードがかなり読みやすくなります。

    ⸻

    47.練習問題①

    次の処理後のxはいくつでしょう?

    x ← 2
    x ← x + 3
    x ← x × 4

    順番に追うと、

    2
    ↓
    5
    ↓
    20

    答えは、

    20

    です。

    ⸻

    48.練習問題②

    次の処理後のsumはいくつでしょう?

    sum ← 0

    for i = 1 to 4
       sum ← sum + i
    endfor

    トレースすると、

    画像

    答えは、

    10

    です。

    ⸻

    49.練習問題③

    次の処理後のyはいくつでしょう?

    x ← 8

    if x > 5
       y ← 1
    else
       y ← 0
    endif

    8>5なので条件は真。

    答えは、

    y=1

    です。

    ⸻

    50.練習問題④

    次の処理後のsumはいくつでしょう?

    data = [2, 4, 6, 8]
    sum ← 0

    for i = 0 to 3
       if data[i] > 4
           sum ← sum + data[i]
       endif
    endfor

    4より大きい値は、

    6と8

    です。

    したがって、

    sum = 6 + 8
       = 14

    答えは、

    14

    です。

    ⸻

    51.練習問題⑤

    次の処理では何回「処理」が実行されるでしょう?

    for i = 1 to 4
       for j = 1 to 3
           処理
       endfor
    endfor

    外側が4回。

    内側が3回。

    したがって、

    4 × 3 = 12

    答えは、

    12回

    です。

    ⸻

    52.初心者向けおすすめ練習順

    いきなり難しい問題へ行く必要はありません。

    おすすめは👇

    ① 代入
      ↓
    ② if
      ↓
    ③ for
      ↓
    ④ while
      ↓
    ⑤ 配列
      ↓
    ⑥ 配列+for
      ↓
    ⑦ 関数
      ↓
    ⑧ 探索
      ↓
    ⑨ 二重ループ
      ↓
    ⑩ 複合問題

    この順番で少しずつレベルを上げます。

    ⸻

    53.1日20分でもOK

    擬似言語は、

    まとめて5時間勉強するより、毎日少しずつ読む

    方が慣れやすいです。

    例えば、

    5分
    → 前日の復習

    10分
    → 擬似言語を1〜2問トレース

    5分
    → 間違えた原因を確認

    これだけでもOKです。

    重要なのは、

    コードを見る日を空けすぎないこと

    です。

    ⸻

    54.科目Aと並行しよう

    科目Bは、

    科目Aが全部終わってから始める

    必要はありません。

    科目Aで、

    • 2進数

    • 論理演算

    • アルゴリズム

    あたりを学び始めたら、簡単な科目B問題にも触れていくのがおすすめです。

    例えば1日60分なら、

    科目A:40分
    科目B:20分

    のように分けてもOKです。

    ⸻

    55.最初は「正解する」より「追える」を目標にする

    初心者のうちは、

    何問正解したか

    だけで判断しない方がいいです。

    最初の目標は、

    コードを最後までトレースできたか

    です。

    例えば不正解でも、

    初期値を確認できた
    ↓
    ループ回数を確認できた
    ↓
    配列の値を書けた
    ↓
    変数の更新を追えた

    なら、かなり前進しています。

    ⸻

    56.試験直前チェックリスト

    次を確認してみましょう👇

    ☐ 「←」の意味を説明できる
    ☐ x←x+1を説明できる
    ☐ ifの条件を判定できる
    ☐ AND・ORを区別できる
    ☐ forをトレースできる
    ☐ whileをトレースできる
    ☐ 配列の添字を確認する癖がある
    ☐ 配列+forを追える
    ☐ 関数の引数・戻り値が分かる
    ☐ 二重ループを追える
    ☐ 線形探索を説明できる
    ☐ 二分探索を説明できる
    ☐ スタックとキューを区別できる
    ☐ トレース表を自分で作れる

    半分以上怪しい場合でも大丈夫です。

    上から順番に練習していきましょう。

    ⸻

    57.最後にこれだけ覚える

    時間がない人は、まずここ👇

    画像

    そして一番大事なのは、

    分からなくなったら紙に書く。

    これです🔥

    ⸻

    まとめ

    科目Bの擬似言語は、最初に見ると難しく感じます。

    でも、基本的な構造は、

    代入

    条件分岐

    繰返し

    配列

    関数


    などの組合せです。

    いきなりコード全体を理解しようとせず、

    初期値を見る
    ↓
    ループを見る
    ↓
    条件を見る
    ↓
    変数の更新を見る
    ↓
    紙にトレースする

    という順番で読みましょう。

    特に、

    「頭の中だけで解かない」

    ことが重要です。

    配列や変数の値を書き出すだけで、擬似言語はかなり読みやすくなります。

    最初は遅くても大丈夫。

    正確にトレースする

    ↓

    慣れて少しずつ速くなる

    という順番で進めていきましょう🔥

    ⸻

    📚 基本情報技術者試験を勉強している方へ

    このnoteでは、

    基本情報の難しいテーマを、初学者でも理解できるように整理する

    をテーマに、科目A・科目Bの攻略記事を公開しています。

    今回の記事は、科目Bをこれから始める方向けの擬似言語の入口です。

    次のステップとしては、

    配列・探索・ソート・再帰・スタック/キュー・計算量・科目B実践問題

    などを順番に勉強していくと、かなり理解しやすくなります。

    役に立ったら、スキ・フォローしてもらえると嬉しいです🙌

    試験前にもう一度確認できるよう、ぜひ保存しておいてください📌

    あなたへのおすすめ