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

【基本情報 科目B①】擬似言語・アルゴリズム入門|未経験からわかるトレースの6ステップ

    はじめに

    「基本情報の科目B、擬似言語がまったく読めない……」
    「解説を読むと理解できるのに、いざ自分で解こうとすると手が止まる」
    「プログラミング未経験だけど、科目Bはどう勉強すればいいの?」

    基本情報技術者試験(FE)の科目Bを勉強していて、このような悩みはありませんか?特にプログラミング未経験者にとって、初めて見る擬似言語(疑似言語)の問題は、何から考えればよいのか分からず、難しく感じるものです。しかし、最初からプログラム全体の意味を理解しようとする必要はありません。

    大切なのは、実際にプログラムを動かしたとき、どのような処理が行われ、値がどう変化するのかを順番に確認すること。この作業を「トレース」といいます。トレースは、科目Bのアルゴリズム問題を解くための基本となる考え方です。

    本記事では、プログラミング未経験者でも実践できるように、トレースの考え方を6つのステップに分けて解説します。

    この記事でわかること

    • 基本情報技術者試験「科目B」の試験概要と出題範囲

    • 擬似言語・アルゴリズム問題の基本的な解き方

    • トレースとは何か、なぜ必要なのか

    • 初めて見るプログラムでも処理を追うための6ステップ

    • トレース表の書き方と、間違えやすいポイント

    本記事では、個別のアルゴリズムや擬似言語の文法については深掘りしません。どのような問題にも応用できる、処理を読み解くための基本的な考え方に絞って解説します。



    1.基本情報技術者試験「科目B」とは?

    1-1.科目Bの試験概要

    基本情報技術者試験は、ITに関する幅広い知識を問う「科目A」と、その知識を活用する技能を問う「科目B」で構成されています。

    科目Bの試験概要は次のとおりです。

    画像

    科目Bでは、アルゴリズムとプログラミング分野が全20問中16問を占めています。つまり、科目Bで安定して得点するには、擬似言語で記述されたプログラムを読み解く力が重要です。

    画像

    1-2.擬似言語・アルゴリズムでは何が問われる?

    科目Bでは、特定のプログラミング言語に依存しない「擬似言語」を使って、プログラムの処理を読み解く問題が出題されます。

    例えば、次のようなことが問われます。

    • プログラムを実行すると、最終的にどのような結果になるか

    • 途中で変数の値がどのように変化するか

    • 処理の一部を変更すると、結果がどう変わるか

    • プログラムがどのような目的で動いているか

    もちろん、こうした問題を解くには、基本文法やアルゴリズムに関する知識も必要です。ただし、それらの知識を覚えただけでは、実際の問題を解けるようになるとは限りません。

    知識を使って、プログラムがどのように動くのかを考える力が必要です。
    その基本となるのが、次に説明する「トレース」です。


    2.トレースとは?|プログラムを手作業で実行すること

    2-1.トレースの基本的な考え方

    トレースとは、プログラムを実際に実行したと仮定して、処理の流れや変数の値の変化を順番に確認することです。

    例えば、次の計算を考えてみましょう。
    「最初に2と3を用意する。その2つを足して、最後に結果を2倍する」

    計算の流れは次のとおりです。
    ① 最初の値は2と3
    ② 2+3=5
    ③ 5×2=10
    ④ 最終結果は10

    特に難しい計算ではありませんよね。しかし、この例にはトレースの基本が詰まっています。それは、処理を順番に実行し、それぞれの処理が終わった後の状態を確認することです。

    実際の擬似言語の問題では、複数の変数が登場したり、処理が何度も繰り返されたりします。それでも、基本的な考え方は変わりません。一度にすべてを理解しようとせず、実行される処理を一つずつ追いかけることが大切です。

    2-2.「プログラムを読む」と「トレースする」は違う

    ここは初学者が勘違いしやすいポイントです。「プログラムが何をするものか理解すること」と「実際の実行結果を求めること」は、必ずしも同じではありません。

    例えば、あるプログラムが「複数の数値の合計を求めるもの」だと分かったとします。しかし、それだけでは、実際に計算される合計値がいくつになるのかは分かりません。処理の途中で値が変更されたり、一部の処理が実行されなかったりする場合もあります。そのため、プログラムの目的を大まかに理解することに加え、実際の実行順序に沿って、途中の状態を確認することが必要になります。


    3.擬似言語・アルゴリズムを解く基本の6ステップ

    ここからは、実際に科目Bの問題を解くときの考え方を説明します。擬似言語を実行して結果を求める問題では、次の6ステップが基本になります。

    画像

    STEP 1|設問を確認する:何を求める問題なのか?

    最初に確認するのは、プログラムの1行目ではありません。まずは、設問で何を答える必要があるのかを確認しましょう。

    例えば、次のような設問が考えられます。
    「すべての処理が終了したとき、変数Aの値はいくつか?」
    「3回目の処理が終了した時点で、変数Bの値はいくつか?」

    この2つでは、求める対象も時点も異なります。設問を確認せずに処理を追い始めると、必要のない部分に時間を使ったり、正しくトレースできたのに答える値を間違えたりすることがあります。

    まずは、次の2点を意識してください。

    • 何を求めるのか?(変数の値、処理結果など)

    • いつの状態を求めるのか?(途中、終了時など)

    STEP 2|変数の役割を整理する:どの値を追えばよいのか?

    次に、プログラムに登場する変数を整理します。

    変数とは、プログラムの中で値を保持するためのものです。例えば「a」「b」「sum」といった名前が登場した場合、それぞれが何のために使われているのか確認していきます。ここでは、次のような観点が役立ちます。

    • 最初に与えられる値はどれか

    • 計算の途中で変化する値はどれか

    • 設問の答えに関係する値はどれか

    ただし、最初からすべての変数の役割を理解する必要はありません。プログラムを読み進めないと、役割が分からないこともあります。その場合は、無理に決めつけず、処理を追いながら確認しましょう。

    STEP 3|初期状態を記録する:最初の値を明確にする

    実際に処理を追い始める前に、変数の初期状態を確認します。

    例えば、次のような状態を考えます。
    a = 2
    b = 3

    ここでは、aに2、bに3が入っています。非常に単純ですが、このように最初の状態を整理しておくことが重要です。特に、変数が複数登場する問題では、途中でどの値が変更されたのか分からなくなりがちです。

    最初の状態を記録しておけば、処理を追い直すときにも役立ちます。なお、問題文やプログラムで初期値が与えられていない場合、勝手に0などの値を設定しないように注意しましょう。

    STEP 4|実行順に処理を追う:1行ずつ考える

    ここから、実際にプログラムの処理を追いかけます。このときの基本は、一つの処理が終わってから、次の処理に進むことです。

    例えば、初期状態が次のとおりだったとします。

    • a=2

    • b=3

    最初に「aに、aとbを足した値を入れる」という処理が実行されたとします。すると、aの値は5になります。

    この時点の状態は次のとおりです。

    • a=5

    • b=3

    続いて、「bに、aを2倍した値を入れる」という処理が実行されたとします。ここで注意したいのは、計算に使用するaの値です。

    最初のa=2ではなく、直前の処理で更新されたa=5を使用します。
    そのため、bは10になります。

    最終的な状態は次のとおりです。

    • a=5

    • b=10

    このように、処理の結果を次の処理へ引き継ぐことが重要です。実際の擬似言語では、処理が分岐したり、同じ処理が繰り返されたりする場合もあります。そのため、単に上から順番に読むのではなく、実際に実行される順序を確認する必要があります。

    画像

    STEP 5|値の変化を記録する:トレース表を使う

    ここまでの例は簡単なので、頭の中だけでも計算できるかもしれません。しかし、科目Bでは複数の変数が何度も変更される問題も出題されます。そのような問題で、すべての値を頭の中だけで覚えようとすると、途中で混乱してしまいます。

    そこでおすすめしたいのが、「トレース表」です。先ほどの例を表にすると、次のようになります。

    画像

    表にすると、どのタイミングで値が変更されたのか、一目で分かります。重要なのは、変更されていない変数の値は、そのまま引き継がれるということです。

    例えば、aの値を変更しても、bの値は自動的には変わりません。
    また、bを変更しても、aの値はそのままです。

    初めのうちは、処理が終わるたびに表へ記録してみましょう。慣れてきたら、変更された値だけをメモするなど、必要に応じて簡略化しても構いません。大切なのは、途中の状態を見失わないことです。

    画像

    STEP 6|答えを照合・検算する:設問に戻る

    最後に、STEP 1で確認した設問へ戻ります。

    例えば、先ほどの処理について、
    「すべての処理が終了したとき、変数bの値はいくつか?」
    と問われた場合、答えは10です。

    一方で、
    「最初の更新処理が終了した時点で、変数bの値はいくつか?」
    と問われた場合、答えは3になります。

    同じプログラムでも、求める時点によって答えが変わることがあります。
    最後に確認したいのは、次の3点です。

    • 求める変数を間違えていないか

    • 求める時点を間違えていないか

    • 更新前と更新後の値を取り違えていないか

    正しくトレースできても、設問で問われている内容を取り違えると不正解になります。解答を選ぶ前に、必ず設問に戻るようにしましょう。



    4.実践してみよう|簡単なプログラムをトレース

    ここまでの内容を理解できたら、実際に短いプログラムを追ってみましょう。

    次の擬似言語を考えます。

    a ← 2
    b ← 3
    a ← a + b
    b ← a × 2

    問題①:3行目の処理が終わったとき、aの値はいくつでしょうか?
    問題②:4行目の処理が終わったとき、bの値はいくつでしょうか?

    まずは答えを見ずに、自分でトレース表を書いてみてください。


    解答・解説

    トレース表は次のようになります。
    「―」は、その時点でまだ値が設定されていないことを示します。

    画像

    問題①の答えは5です。
    3行目で、aの値が2から5に更新されます。

    問題②の答えは10です。
    4行目では、3行目で更新されたa=5を使用するため、b=5×2=10になります。

    「3行目でaが更新されたため、4行目では更新後の値を使う」
    このように理解できれば、今回のトレースの考え方は身についています。


    5.トレースでよくある4つのミスと対策

    擬似言語の問題が苦手な場合、知識不足だけでなく、処理の追い方に原因があることもあります。ここでは、初学者が特に注意したいミスを整理します。

    画像

    特に注意したいのは、途中の値を頭の中だけで管理しようとすることです。科目Bの問題では、変数の数が増えたり、処理が複雑になったりすると、一つの値を間違えただけで最終結果が変わってしまいます。そのため、最初は面倒に感じても、紙に書いて処理を追う練習をおすすめします。また、途中で分からなくなった場合は、最後に正しく確認できた状態まで戻りましょう。最初からすべてやり直すのではなく、どの処理で値が分からなくなったのかを特定することが大切です。



    6.本番ではどう解く?|時間配分とトレースのコツ

    科目Bの試験時間は100分、出題数は20問です。単純に割ると、1問当たりの平均時間は5分になります。ただし、すべての問題を5分で解く必要はありません。比較的短時間で解ける問題もあれば、処理を丁寧に追う必要がある問題もあります。

    そのため、本番では次の点を意識しましょう。

    ① 最初からすべての値を記録しない

    慣れてきたら、設問で問われている値や、その値に影響する変数を中心にトレースします。ただし、どの変数が影響するか分からない場合は、省略せずに追いましょう。

    ② 難しい問題に時間をかけすぎない

    一つの問題で長時間手が止まってしまった場合は、ほかの問題に進む判断も必要です。問題を解く順番と時間配分は、普段の演習から練習しておきましょう。

    ③ 解説を読むだけで終わらない

    科目Bの対策で重要なのは、自分の手で処理を追えるようになることです。間違えた問題は、解説を読んだ後にもう一度、答えを見ずにトレースしてみましょう。解説を理解できることと、初見の問題を自力で解けることは異なります。


    7.これから何を勉強すればいい?|科目Bの学習ロードマップ

    ここまでで、擬似言語を解くための基本的な考え方を紹介しました。ただし、今回の6ステップを覚えるだけで、科目Bのあらゆる問題が解けるようになるわけではありません。実際の問題を解くには、基本文法やデータ構造、アルゴリズムなどの知識も必要です。そのため、プログラミング未経験者には、次の順序で学習することをおすすめします。

    1. トレースの基本的な考え方を理解する(本記事)

    2. 擬似言語の基本文法や演算子を学ぶ

    3. 条件分岐・繰返しなどの処理の流れを理解する

    4. 配列や関数などの基本的な考え方を学ぶ

    5. 代表的なアルゴリズムを学ぶ

    6. IPAの公開問題・サンプル問題で演習する

    最初から難しいプログラムを理解しようとする必要はありません。短い処理を確実に追えるようになってから、少しずつ複雑な問題へ進むことが大切です。

    科目Bの擬似言語・アルゴリズム対策をシリーズで解説します

    今後、本noteでは、基本情報技術者試験の科目Bについて、テーマごとの解説記事を順次公開していく予定です。

    擬似言語の基本文法から始まり、変数・配列・条件分岐・繰返し・関数、代表的なアルゴリズムまで、プログラミング未経験者でも段階的に学べる構成を予定しています。また、IPAの公開問題を基にした出題傾向の分析や、実際の問題を使ったトレースの解説も取り上げていきます。

    「科目Bが苦手」「擬似言語をゼロから学びたい」という方は、ぜひマガジンをチェックしてみてください。

    ※各テーマの記事は順次公開予定です。


    8.まとめ|擬似言語は「1行ずつ追う」ことから始めよう

    基本情報技術者試験の科目Bでは、プログラムの実行結果を正しく読み解く力が求められます。最初から難しいアルゴリズムをすべて覚える必要はありません。

    まずは、今回紹介した6ステップを身につけてください。

    ①設問を確認 → ②変数の役割を整理 → ③初期状態を記録 → ④実行順に処理を追う → ⑤値の変化を記録 → ⑥答えを照合・検算する

    大切なのは、プログラムの処理を一度に理解しようとせず、変数の状態を一つずつ確認することです。最初は時間がかかっても構いません。短い問題からトレースを繰り返し、正確に処理を追えるようになることを目指しましょう。この基本が身につけば、今後のアルゴリズム学習にも役立ちます。



    あわせて読みたい記事

    アルゴリズム・疑似言語の学習はまずこちらの記事からスタート

    アルゴリズム・疑似言語を体系的に学びたい人へ

    今後、「基本情報試験対策 [科目B(疑似言語/アルゴリズム)]」マガジンに以下解説18記事を投稿予定です。過去の出題実績と対応する形でテーマを選定しているため、全18記事のトピックを理解することで、基本情報試験での過去出題テーマを100%カバーできます。よろしければ、本記事および以下マガジンをフォローしてお待ちください。

    画像


    基本情報の学習計画を立てたい方へ

    科目A・科目Bをどのような順番で学習すればよいか、独学での進め方を解説しています。

    学習を進めた後、試験直前に復習したい方へ

    科目Bの解法パターンを整理したチートシートを紹介しています。基礎学習と問題演習を終えた後の総復習におすすめです。




    あなたへのおすすめ