アルゴリズムとフローチャートの解き方|穴埋め問題をトレースで攻略

アルゴリズムとフローチャートの解き方を初心者向けに解説するアイキャッチ画像 資格
  1. 導入
  2. 目次
  3. アルゴリズムとフローチャートの基本
    1. アルゴリズムとは
    2. フローチャートとは
  4. フローチャートで使われる基本記号
    1. 長方形は処理を表す
    2. ひし形は判断を表す
    3. 平行四辺形は入出力を表す
    4. 繰り返しはループ構造を表す
  5. 試験で頻出するアルゴリズム
    1. 頻出テーマはソートと探索
    2. アルゴリズム名より処理の流れが重要
  6. ソートアルゴリズムの基本
    1. ソートとはデータを並べ替える処理
    2. バブルソートの考え方
    3. 選択ソートの考え方
  7. 探索アルゴリズムの基本
    1. 探索とは目的のデータを探す処理
    2. 線形探索の考え方
    3. 二分探索の考え方
  8. フローチャート穴埋め問題の解き方
    1. まず処理の目的を確認する
    2. 空欄の前後を見る
    3. 選択肢は実際に当てはめて確認する
  9. トレース法でアルゴリズムを攻略する
    1. トレースとは値の変化を追うこと
    2. トレースの基本手順
    3. トレースで確認すべきポイント
  10. スワップ処理は必ず押さえる
    1. スワップ処理とは
    2. tempを使ったスワップの流れ
    3. なぜtempが必要なのか
    4. スワップ処理の覚え方
  11. よくある間違いと対策
    1. YesとNoの分岐を逆に読む
    2. 変数の更新を見落とす
    3. 配列の添字を間違える
    4. 二分探索をソート前のデータに使ってしまう
    5. アルゴリズム名だけで判断してしまう
  12. FAQ
    1. アルゴリズムが苦手でもフローチャート問題は解けますか?
    2. フローチャート穴埋め問題はどう解けばよいですか?
    3. 技術士第一次試験ではどのアルゴリズムを優先すべきですか?
    4. スワップ処理でtempを使う理由は何ですか?
    5. トレースするときは何を書けばよいですか?
    6. 二分探索はどんなときに使えますか?
    7. アルゴリズム名を覚えていないと不利ですか?
  13. まとめ

導入

アルゴリズムやフローチャートの問題は、初めて見ると難しく感じやすい分野です。

特に、技術士第一次試験などで出題されるフローチャートの穴埋め問題では、処理の流れを読み取り、変数や配列の値がどのように変化するかを追う力が求められます。

しかし、アルゴリズムの専門知識がなくても、簡単な数字を入れて手計算でトレースすることで解ける問題は多くあります。

トレースとは、フローチャートの矢印に沿って処理をなぞり、変数や配列の中身がどう変わるかを確認する方法です。

この記事では、初心者向けに以下の内容を解説します。

  • アルゴリズムとフローチャートの基本
  • フローチャートで使われる記号
  • 頻出のソート・探索アルゴリズム
  • フローチャート穴埋め問題の解き方
  • トレース法による攻略手順
  • スワップ処理の考え方

設計初心者や、技術士第一次試験でアルゴリズム問題に苦手意識がある方は、まずこの記事の内容を押さえておきましょう。


目次

  • アルゴリズムとフローチャートの基本
  • フローチャートで使われる基本記号
  • 試験で頻出するアルゴリズム
  • ソートアルゴリズムの基本
  • 探索アルゴリズムの基本
  • フローチャート穴埋め問題の解き方
  • トレース法でアルゴリズムを攻略する
  • スワップ処理は必ず押さえる
  • よくある間違いと対策
  • FAQ
  • まとめ

アルゴリズムとフローチャートの基本

アルゴリズムとは

アルゴリズムとは、ある目的を達成するための手順や処理の流れのことです。

たとえば、次のような処理もアルゴリズムです。

  • 数値を小さい順に並べ替える
  • 複数のデータから目的の値を探す
  • 2つの変数の値を入れ替える
  • 条件に応じて処理を分ける

つまり、アルゴリズムは「何を、どの順番で行えばよいか」を整理したものです。

試験問題では、この手順を正しく理解できているかを確認するために、フローチャートや穴埋め問題として出題されることがあります。

フローチャートとは

フローチャートとは、処理の流れを図で表したものです。

処理、判断、入出力、繰り返しなどを記号で表し、矢印に沿って読み進めます。

フローチャート問題では、難しいプログラムを書ける必要はありません。
大切なのは、図に書かれた処理を順番に追えることです。

たとえば、次のような流れを考えます。

  1. データを入力する
  2. 条件を確認する
  3. 条件に合えば処理を行う
  4. 必要に応じて繰り返す
  5. 結果を出力する

この流れを図にしたものがフローチャートです。


フローチャートで使われる基本記号

フローチャートでよく使われる基本記号

長方形は処理を表す

長方形は、計算や代入などの処理を表します。

例:

i = i + 1
temp = X
A[i] = A[i+1]

このような処理では、変数の値が変わります。

フローチャートを読むときは、長方形が出てきたら「どの変数がどう変わったか」を確認しましょう。

たとえば、i = i + 1 は、変数 i の値を1増やす処理です。
ループの回数を数えるときによく使われます。

ひし形は判断を表す

ひし形は、条件によって進む方向が変わる判断を表します。

例:

A[i] > A[i+1]
i < n
X = 0

条件が成り立つ場合はYes、成り立たない場合はNoの方向に進みます。

フローチャート穴埋め問題では、この判断条件が正しく理解できているかが重要です。

条件判定によって処理が分岐するフローチャートの例

たとえば、昇順に並べ替える場合、隣り合う値を比較して、

A[i] > A[i+1]

が成り立つなら、左側の値の方が大きいため、交換が必要になります。

平行四辺形は入出力を表す

平行四辺形は、データの入力や結果の出力を表します。

例:

  • 配列を入力する
  • 探索する値を入力する
  • 並べ替えた結果を出力する
  • 検索結果を表示する

問題文の最初や最後に登場することが多いため、どのデータを扱うのかを確認しておきましょう。

繰り返しはループ構造を表す

同じ処理を何度も行う部分は、繰り返し処理として表されます。

ソートや探索の問題では、繰り返し処理がよく使われます。

確認すべきポイントは次の3つです。

  • 繰り返しが始まる場所
  • 繰り返しが終わる条件
  • 繰り返しのたびに変化する変数

特に、i = i + 1j = j + 1 のようなカウンタ変数の更新は見落としやすい部分です。

トレースするときは、変数が変わるたびにメモしておくとミスを減らせます。


試験で頻出するアルゴリズム

頻出テーマはソートと探索

アルゴリズム問題でよく出題されるのは、主に次の2つです。

  • ソート:データを並べ替える処理
  • 探索:目的のデータを探す処理

技術士第一次試験などでも、これらの考え方をもとにしたフローチャート問題が出題されることがあります。

すべてのアルゴリズムを細かく暗記する必要はありませんが、基本的な処理の流れは理解しておくと安心です。

アルゴリズム名より処理の流れが重要

試験では、アルゴリズム名を知っていると有利な場面もあります。

しかし、名前を覚えることだけが目的ではありません。

たとえば、バブルソートという名前を忘れていても、次の流れを追えれば問題を解ける可能性があります。

  • 隣同士を比較する
  • 順番が逆なら交換する
  • これを繰り返す

そのため、まずは「何をしている処理なのか」を読み取ることが大切です。


ソートアルゴリズムの基本

ソートとはデータを並べ替える処理

ソートとは、配列などに入っているデータを一定の順番に並べ替える処理です。

たとえば、次のような配列があるとします。

[3, 1, 2]

これを小さい順に並べ替えると、次のようになります。

[1, 2, 3]

試験では、どのような手順で並べ替えが行われるかを、フローチャートで確認する問題が出ることがあります。

バブルソートの考え方

バブルソートは、隣り合う要素を比較して、順番が逆であれば交換する方法です。

昇順に並べ替える場合は、次のように考えます。

  1. 隣同士の値を比較する
  2. 左の値が右の値より大きければ交換する
  3. 次の隣同士を比較する
  4. これを繰り返す

たとえば、配列が次のようになっているとします。

[3, 1, 2]

最初に 31 を比較します。
昇順にしたい場合、31 より大きいので交換します。

[1, 3, 2]

次に 32 を比較します。
32 より大きいので交換します。

[1, 2, 3]

バブルソートで配列が昇順に並び替わる流れ

このように、大きい値が少しずつ右端へ移動していきます。
泡が浮かび上がる様子にたとえて、バブルソートと呼ばれます。

選択ソートの考え方

選択ソートは、未整列の範囲から最小値または最大値を探し、それを先頭の値と交換していく方法です。

昇順に並べる場合は、次のような流れになります。

  1. 未整列部分から最小値を探す
  2. その最小値を先頭の値と交換する
  3. 整列済みの範囲を1つ広げる
  4. 残りの未整列部分で同じことを繰り返す

たとえば、次の配列を考えます。

[3, 1, 2]

この中で最小値は 1 です。
先頭の 31 を交換します。

[1, 3, 2]

次に、残りの [3, 2] の中で最小値を探します。
最小値は 2 なので、32 を交換します。

[1, 2, 3]

これで昇順に並びます。

選択ソートでは、「未整列部分から最小値を選ぶ」という考え方がポイントです。


探索アルゴリズムの基本

探索とは目的のデータを探す処理

探索とは、複数のデータの中から目的の値を探す処理です。

たとえば、次の配列から 5 を探す場合を考えます。

[2, 5, 8, 10]

この中に 5 があるかどうか、ある場合は何番目にあるかを確認する処理が探索です。

線形探索の考え方

線形探索は、配列の先頭から順番に値を確認していく方法です。

特徴は次の通りです。

  • 先頭から1つずつ調べる
  • 見つかったら終了する
  • データが並んでいなくても使える
  • 考え方がシンプルで分かりやすい

たとえば、次の配列から 8 を探すとします。

[2, 5, 8, 10]

先頭から順番に確認します。

  1. 28 ではない
  2. 58 ではない
  3. 8 が見つかる

このように、順番に確認していくのが線形探索です。

二分探索の考え方

二分探索は、ソート済みのデータに対して使う探索方法です。

中央の値と目的の値を比較し、探す範囲を半分ずつ狭めていきます。

たとえば、次の配列から 8 を探すとします。

[1, 3, 5, 8, 10]

中央付近の値を確認し、目的の値がそれより大きいか小さいかを判断します。
その結果に応じて、探す範囲を半分に絞ります。

二分探索は効率のよい探索方法ですが、注意点があります。

それは、データがあらかじめ並べ替えられている必要があることです。

ソートされていないデータに対して二分探索を使うと、正しく探せない場合があります。


フローチャート穴埋め問題の解き方

まず処理の目的を確認する

フローチャート穴埋め問題では、最初にその処理が何を目的としているのかを確認します。

たとえば、次のような目的が考えられます。

  • 配列を小さい順に並べ替える
  • 配列を大きい順に並べ替える
  • 最大値を探す
  • 最小値を探す
  • 指定された値を探索する
  • 2つの値を交換する

目的が分からないまま空欄を考えると、選択肢で迷いやすくなります。

まずは問題文を読み、「最終的に何をしたい処理なのか」を押さえましょう。

空欄の前後を見る

穴埋め問題では、空欄だけを見るのではなく、前後の処理を確認することが大切です。

特に見るべきポイントは次の通りです。

  • 空欄の直前でどの変数が使われているか
  • 空欄の直後でどの変数が更新されるか
  • 判断条件のYesとNoがどちらに進むか
  • ループの中にある空欄かどうか
  • 最終的な出力にどう影響するか

空欄がループの中にある場合、その式は何度も実行されます。
そのため、1回だけでなく、複数回の変化を追う必要があります。

選択肢は実際に当てはめて確認する

空欄に入る式で迷った場合は、選択肢を眺めるだけで判断しようとしない方がよいです。

おすすめは、簡単な数字を使って実際に処理を追うことです。

例:

A = [3, 1, 2]

このように3つ程度のデータを使うと、処理の流れを手で確認しやすくなります。

あまり大きな配列を使うと確認が大変になるため、最初は3個程度の数字で十分です。


トレース法でアルゴリズムを攻略する

トレースとは値の変化を追うこと

トレースとは、フローチャートに沿って、変数や配列の値がどのように変化するかを順番に確認する方法です。

アルゴリズム名を知らなくても、トレースができれば正解に近づける問題は多くあります。

特に、フローチャート穴埋め問題では、トレースが強力な解き方になります。

トレースの基本手順

トレースは、次の手順で行うと分かりやすくなります。

  1. 簡単な配列を用意する
  2. 変数の初期値を書く
  3. フローチャートの矢印に沿って進む
  4. 処理ごとに値を更新する
  5. 条件分岐で進む方向を確認する
  6. 最終結果が目的通りか確認する

たとえば、余白に次のような表を書いておくと整理しやすいです。

回数ijtempAの状態
初期00[3, 1, 2]
1回目
2回目
3回目

トレースで確認すべきポイント

トレースするときは、次の点を意識しましょう。

  • 条件分岐でYesとNoのどちらに進むか
  • 変数の値がいつ変わるか
  • 配列の中身がどう変わるか
  • ループが何回繰り返されるか
  • 最終的に目的の処理ができているか

特に、ソートの問題では、配列の中身が交換によって変化します。

そのため、A[i]A[i+1] の値をメモしながら進めると、間違いに気づきやすくなります。


スワップ処理は必ず押さえる

スワップ処理とは

スワップ処理とは、2つの変数の値を入れ替える処理です。

たとえば、次のような状態があるとします。

X = 3
Y = 1

これを入れ替えて、次のようにする操作がスワップです。

X = 1
Y = 3

ソートアルゴリズムでは、値を並べ替えるためにスワップ処理がよく使われます。

tempを使ったスワップの流れ

値を入れ替えるときは、一時保存用の変数 temp を使います。

基本の流れは次の通りです。

temp = X
X = Y
Y = temp

tempを使ってXとYの値を入れ替えるスワップ処理

この順番にすることで、元の X の値を失わずに XY を入れ替えられます。

なぜtempが必要なのか

いきなり次のように代入すると、うまく入れ替わりません。

X = Y
Y = X

最初の X = Y の時点で、元の X の値が消えてしまいます。

具体例で確認します。

最初の状態:

X = 3
Y = 1

ここで X = Y を行うと、次のようになります。

X = 1
Y = 1

元の X = 3 が消えてしまいました。
そのため、Y = X を行っても、Y に入るのは 1 です。

正しく入れ替えるには、最初に元の Xtemp に退避しておく必要があります。

スワップ処理の覚え方

スワップ処理は、次のように覚えると分かりやすいです。

  1. まず退避する
  2. 次に上書きする
  3. 最後に戻す

つまり、

temp = X
X = Y
Y = temp

という順番です。

フローチャート穴埋め問題では、スワップ処理の一部が空欄になることがあります。
この流れは必ず押さえておきましょう。


よくある間違いと対策

YesとNoの分岐を逆に読む

フローチャートでは、判断条件の後にYesとNoで進む方向が分かれます。

ここを逆に読むと、処理全体の流れを間違えてしまいます。

対策として、ひし形の条件を見たら、必ず矢印の先を確認しましょう。

特に、条件式が次のような形の場合は注意が必要です。

A[i] > A[i+1]

この条件が成り立つ場合と成り立たない場合で、交換するかどうかが変わります。

変数の更新を見落とす

i = i + 1 のような処理を見落とすと、ループの回数や条件判定を誤ります。

トレース中は、更新された変数に印をつけるとミスを減らせます。

特に次のような変数はよく使われます。

  • i
  • j
  • n
  • temp
  • min
  • max

これらの値がどう変わるかを、表にして確認するとよいでしょう。

配列の添字を間違える

配列では、A[i]A[i+1] のように添字を使って要素を指定します。

問題によっては、添字が0から始まる場合と1から始まる場合があります。

たとえば、配列の先頭を A[0] とする場合もあれば、A[1] とする場合もあります。

問題文の前提を確認してからトレースしましょう。

二分探索をソート前のデータに使ってしまう

二分探索は、ソート済みのデータに使う方法です。

データが並んでいない場合は、中央の値で範囲を絞っても正しく探せない可能性があります。

「二分探索はソート済みが前提」と覚えておきましょう。

アルゴリズム名だけで判断してしまう

アルゴリズム名を見て、なんとなく選択肢を選ぶのは危険です。

同じソートでも、比較条件や並べ替えの向きによって、空欄に入る式は変わります。

必ず、実際のフローチャートの流れを確認しましょう。


FAQ

アルゴリズムが苦手でもフローチャート問題は解けますか?

はい、解ける可能性は十分にあります。

フローチャート問題では、難しい理論よりも、処理の流れを順番に追う力が重要です。
特に、簡単な数字を入れてトレースする練習をすると、少しずつ理解しやすくなります。

たとえば、配列を扱う問題では、いきなり大きなデータで考えるのではなく、

A = [3, 1, 2]

のような小さな配列を使うと、処理の流れを確認しやすくなります。


フローチャート穴埋め問題はどう解けばよいですか?

まず、処理の目的を確認しましょう。

たとえば、フローチャートが何をしようとしているのかを見ます。

  • データを並べ替える処理なのか
  • 最大値や最小値を探す処理なのか
  • 指定された値を探索する処理なのか
  • 2つの値を交換する処理なのか

目的を確認したうえで、空欄の前後の処理を見ます。

その後、簡単な配列や変数を用意し、選択肢の式を実際に当てはめてトレースします。
最終的に目的通りの結果になる選択肢を選ぶのが基本です。


技術士第一次試験ではどのアルゴリズムを優先すべきですか?

まずは、次の4つを優先するとよいです。

  • バブルソート
  • 選択ソート
  • 線形探索
  • 二分探索

これらは基本的な考え方を理解しやすく、フローチャート問題にもつながりやすい内容です。

特に、ソートでは「比較」と「交換」、探索では「順番に探す」「範囲を半分に絞る」という考え方を押さえておくと、問題文を読み取りやすくなります。


スワップ処理でtempを使う理由は何ですか?

2つの変数を直接代入で入れ替えようとすると、元の値が消えてしまうためです。

たとえば、次のような状態を考えます。

X = 3
Y = 1

ここで、いきなり X = Y とすると、次のようになります。

X = 1
Y = 1

元の X = 3 が消えてしまいます。

そのため、次のように temp を使って一時的に値を保存します。

temp = X
X = Y
Y = temp

この流れにすることで、元の値を失わずに入れ替えることができます。


トレースするときは何を書けばよいですか?

トレースするときは、変数と配列の状態を書きます。

たとえば、次のような項目を表にすると整理しやすいです。

回数ijtempAの状態
初期00[3, 1, 2]
1回目
2回目

特に確認したいのは、次のポイントです。

  • 変数 ij がどう変化するか
  • 条件分岐でYesとNoのどちらへ進むか
  • 配列の中身が交換によってどう変わるか
  • ループが何回繰り返されるか

頭の中だけで考えると混乱しやすいため、余白に書き出すのがおすすめです。


二分探索はどんなときに使えますか?

二分探索は、データがあらかじめソートされている場合に使える探索方法です。

たとえば、次のように小さい順に並んだデータであれば、二分探索を使えます。

[1, 3, 5, 8, 10]

二分探索では、中央の値と探したい値を比較し、探す範囲を半分ずつ狭めていきます。

ただし、次のように並び順がバラバラのデータでは注意が必要です。

[8, 1, 10, 3, 5]

この状態では、中央の値を基準に範囲を半分に絞っても、正しく探索できない場合があります。

そのため、二分探索は「ソート済みのデータに使う」と覚えておきましょう。


アルゴリズム名を覚えていないと不利ですか?

アルゴリズム名を知っていると理解しやすくなりますが、名前だけで解くわけではありません。

大切なのは、処理の流れを読み取れることです。

たとえば、バブルソートという名前を忘れていても、

  • 隣り合う要素を比較する
  • 順番が逆なら交換する
  • それを繰り返す

という流れを追えれば、問題を解ける可能性があります。

そのため、まずは名称の暗記よりも、簡単な例でトレースする練習を優先するとよいでしょう。


まとめ

アルゴリズムとフローチャートの問題は、初めて見ると難しく感じるかもしれません。

しかし、実際には高度なプログラミング知識よりも、処理の流れを順番に追う力が重要です。

特に、フローチャートの穴埋め問題では、次のポイントを押さえておくと解きやすくなります。

  • フローチャートの基本記号を理解する
  • ソートと探索の違いを押さえる
  • 条件分岐のYes / Noを正しく読む
  • 変数や配列の値をトレースする
  • スワップ処理の基本形を覚える

中でも重要なのは、簡単な数字を入れて手でなぞることです。

たとえば、ソートの問題なら、

A = [3, 1, 2]

のような小さな配列を使って、処理の流れを確認します。

選択肢を眺めるだけでは分かりにくい問題でも、実際に値を入れてトレースすると、正しい式や条件が見えてくることがあります。

技術士第一次試験などでアルゴリズム問題に苦手意識がある方は、まず次の4つから対策するとよいでしょう。

  • バブルソート
  • 選択ソート
  • 線形探索
  • 二分探索

さらに、ソートで頻出するスワップ処理、

temp = X
X = Y
Y = temp

の流れも必ず押さえておきましょう。

アルゴリズムやフローチャートは、最初から完璧に理解しようとしなくても大丈夫です。
まずは小さな例を使って、変数や配列の値がどう変わるかを一つずつ確認していきましょう。トレースに慣れてくると、フローチャート穴埋め問題も「難しい暗記問題」ではなく、流れを追って解く問題として取り組みやすくなります。

コメント

タイトルとURLをコピーしました