数強塾代表の藤原進之介です。『最強120講義』第47講はアルゴリズムと流れ図。共通テスト『情報Ⅰ』のプログラム問題は、ここが分かっていない状態で挑むと、コードを1行ずつ読んでいるうちに時間が消えます。逆に、この講の内容が入っていれば、初見のプログラムでも「構造」から読めるようになります。重要度は最上位のSです。
1. この講の問い
「やり方は分かっている」のに、それをどう書けば他人とコンピュータの両方に同じ意味で伝わるのか。これがこの講の問いです。
2. 結論
アルゴリズムとは、入力から出力までの手順を、有限回で終わり、どの一歩も一通りにしか読めない形で書き切ったものです。
そしてその手順は、例外なく順次・分岐・反復の3つだけで書けます。
だから流れ図は「記号を暗記する図」ではなく、この3構造を目に見える形にした図であり、共通テスト用プログラム表記もPythonも、同じ3構造を別の書式で写しただけのものです。
3. なぜそうなるのか
3-1 「手順ならなんでもアルゴリズム」ではない
文部科学省の「情報Ⅰ」教員研修用教材は、アルゴリズムを「問題を解決するための方法や手順」、プログラムを「アルゴリズムをコンピュータが実行できる形式であらわしたもの」と定義しています。教科書もだいたい同じ書き方です。
ただし、これだけだと「手順ならなんでもアルゴリズム」に読めてしまいます。実際には、アルゴリズムが満たすべき条件として古くから次の4つが挙げられます。
- 有限性 … 必ず有限回のステップで停止する
- 明確性(一意性) … 各ステップの意味が一通りに決まり、誰が実行しても結果が変わらない
- 入力 … 外から与えられる値(0個以上)が定まっている
- 出力 … 少なくとも1つの結果が得られる
この4つが、この講のすべての土台です。「いい感じに並べ替える」は明確性を欠くのでアルゴリズムではありません。「1から順に足していく」は停止条件がなければ有限性を欠きます。共通テストで「このプログラムは終わらない」「この条件だと想定と違う結果になる」を突いてくる設問は、要するに毎回この4条件のどれかを試しているのです。
3-2 なぜ「共通の書き方」が必要なのか
日本語で「大きい方を残す」と書けば人間には伝わりますが、二人が書けば二通りの日本語になります。しかも高校の授業で使うプログラミング言語は学校ごとにバラバラです。
大学入試センターは、共通テストで独自のプログラム表記を使う理由をまさにここに置いています。「高等学校の『情報Ⅰ』の授業で使用するプログラミング言語は多様であることから」共通テスト用の表記を使う、と資料に明記しているのです(「令和7年度大学入学共通テスト 試作問題『情報』の概要」2022年11月9日一部修正版)。
流れ図が生まれた理由も同じです。流れ図の記号は JIS X 0121「情報処理用流れ図・プログラム網図・システム資源図記号」という日本産業規格で決まっています。1970年制定・1986年改正で、対応国際規格は ISO 5807:1985(一致)。日本規格協会の規格票情報によれば、直近の確認公示は2026年6月22日で、2026年8月時点でも状態は「有効」です(2026年8月3日確認)。
つまり流れ図は誰かの流儀ではなく、国際規格に一致した国家規格として55年以上維持されている共通語です。「フローチャートなんて古い」と切り捨てる声もありますが、規格として現役であることは押さえておいてください。
| 記号の形 | 名称 | 意味 |
|---|---|---|
| 角の丸い長方形 | 端子 | 流れの始まりと終わり |
| 長方形 | 処理 | 任意の種類の処理 |
| ひし形 | 判断 | 条件によって出口を選ぶ |
| 平行四辺形 | データ | 入力・出力 |
| 角を落とした帯(上下2つ) | ループ端 | 繰返しの始端と終端 |
| 矢印 | 線 | 制御の流れ |
ただし、覚えるべきは形ではありません。「ひし形からは必ず2本以上の線が出る」「端子は入口と出口に1つずつ」という、線のつながり方のルールです。共通テストの流れ図は、記号の名前ではなく線のつながりを問います。
3-3 なぜ3つの構造だけで足りるのか
同じ教員研修用教材は、こう言い切っています。「どのようなアルゴリズムでも,処理の流れは,順次,分岐,反復の3つの構造の組み合わせで構成されている。このような処理の流れを制御構造という」。
これは「だいたいそう」という経験則ではありません。任意の計算可能な手続きは順次・選択(分岐)・反復の3つの組合せだけで書き直せる、という構造化定理として知られる事実です。好きな場所へ飛ぶ命令は、理屈のうえでは一切要りません。
ではこれがなぜ受験に効くのか。共通テストで「見たことのない処理」が出ても、それは必ずこの3つの入れ子でできているからです。長いコードで固まってしまう受験生は、コードを「文が並んだもの」として読もうとしています。そうではなく、まずインデント(字下げ)を頼りに、どこからどこまでが1つの反復で、その中のどこが分岐なのかという入れ子構造を先につかむ。そこまで見えれば、あとは中身を1行ずつ確かめるだけの作業になります。
流れ図は、この入れ子を平面上の図形の包含関係として見せてくれる表現です。だから最初に学ぶときは流れ図が圧倒的に強い。逆に処理が数十行を超えると紙面上で扱いづらくなり、実務ではコードや別の図に主役が移ります。これは第6ブロックへの伏線です。
3-4 流れ図が唯一の表現ではない
教科書がさらっと流すところですが、ここは強調しておきます。同じ教員研修用教材は続けて、「アルゴリズムを表現する方法は多様である。ここでは,フローチャートを紹介したが,目的や内容に応じて適切なものを使い分けるようにしたい」と書き、状態遷移図・状態遷移表、UMLのアクティビティ図やシーケンス図を挙げています。
信号機や自動販売機のように「いま自分がどの状態にいるか」が本質のものは、状態遷移図の方が素直に書けます。目的が変われば道具も変わる、という当たり前のことです。
4. 手で確かめる
同じ処理を ①流れ図 ②共通テスト用プログラム表記 ③Python の3通りで書き並べます。題材は「配列の中の最大値と、その最大値が最初に現れた添字を求める」。順次・分岐・反復が全部入る、最小の例です。
配列は Data = [42, 17, 93, 58, 93, 6]。93が2回入っているのがミソです。
① 流れ図
図:最大値と、その最初の位置を求める流れ図。端子・処理・判断・ループ端・データの5種類しか使っていません。流れ図の中では代入を「←」で書きます(大学入試センターの資料に載っている流れ図もこの書き方です)。次に見るプログラム表記では「=」に変わるので、そこを見比べてください。
② 共通テスト用プログラム表記
(1) Data = [42,17,93,58,93,6]
(2) kazu = 要素数(Data)
(3) saidai = Data[0]
(4) ichi = 0
(5) i を 1 から kazu-1 まで 1 ずつ増やしながら繰り返す:
(6) | もし Data[i] > saidai ならば:
(7) | | saidai = Data[i]
(8) | ⎿ ichi = i
(9) 表示する("最大値は",saidai,"添字は",ichi)
縦棒(|)と鉤(⎿)で制御範囲を表し、⎿ が制御文の終わりを示す——これは大学入試センターの例示どおりの書き方です。要素数() は配列の要素数を返す関数として例示に載っています。
ここが最重要です。代入は「=」であって「←」ではありません。
ネット上の解説や古い問題集には saidai ← Data[0] のように矢印で書かれたものが大量にあります。これは旧課程「情報関係基礎」向けの DNCL(共通テスト手順記述標準言語)の書き方で、共通テスト『情報Ⅰ』の共通テスト用プログラム表記とは別物です。大学入試センターの例示(第5節「3 代入文」)に載っているのは kosu = 3、namae = "Komaba" のようなイコールの形だけです。
そのうえで、同じ資料の中でも流れ図の側は「←」で書かれています。矛盾ではなく、役割分担です。
| 代入(値を入れる) | 比較(等しいか調べる) | |
|---|---|---|
| 流れ図 | ← | = |
| 共通テスト用プログラム表記 | = | == |
流れ図では矢印が空いているので比較に = を使えます。プログラム表記では代入が = を取ってしまったので、比較は == と2つ重ねる。同じ「=」という記号が、どちらの世界にいるかで意味が反転する——ここが第48講以降でいちばん事故る場所です。
③ Python(実際に実行して確認しました)
Data = [42, 17, 93, 58, 93, 6]
kazu = len(Data)
saidai = Data[0]
ichi = 0
for i in range(1, kazu, 1):
if Data[i] > saidai:
saidai = Data[i]
ichi = i
print("最大値は", saidai, "添字は", ichi)
実行結果はこうなります。
最大値は 93 添字は 2
トレース表(この講の心臓部)
変数の値が1行ずつどう変わるかを追うのがトレースです。これができるかどうかで、共通テストのプログラム問題の得点はほぼ決まります。
| i | Data[i] | Data[i] > saidai | saidai | ichi |
|---|---|---|---|---|
| 開始前 | — | — | 42 | 0 |
| 1 | 17 | 偽 | 42 | 0 |
| 2 | 93 | 真 | 93 | 2 |
| 3 | 58 | 偽 | 93 | 2 |
| 4 | 93 | 偽 | 93 | 2 |
| 5 | 6 | 偽 | 93 | 2 |
i = 4 の行がこの講のすべてです。 Data[4] は 93、saidai も 93。> は「より大きい」なので条件は偽になり、ichi は 2 のまま。つまり答えは「最初に現れた位置」になります。
ここを >= に変えると、まったく同じ配列で ichi は 4 になります(Pythonで両方実行して確かめました)。比較演算子を1文字変えただけで、答えの意味が「最初の位置」から「最後の位置」に変わる。共通テストが > と >= を選択肢に並べてくるのは、ここを見ているからです。
5. 共通テストではこう出る(重要度 S)
5-1 使われるのは「DNCL」ではありません
まず用語を正確にしておきます。よくある誤解ですが、共通テスト『情報Ⅰ』で使われるのは DNCL そのものではありません。
「共通テスト手順記述標準言語(DNCL)」は旧課程の「情報関係基礎」向けに大学入試センターが公開してきた仕様です。それとは別に、情報Ⅰ向けには「共通テスト用プログラム表記」が用意されました。試作問題と併せて2022年11月9日に公表された「試作問題『情報』の概要」の第5節が、その例示にあたります。全24ページの資料で、例示は「1 変数/2 文字列/3 代入文/4 算術演算/5 比較演算/6 論理演算/7 関数/8 制御文(条件分岐)/9 制御文(繰返し)/10 コメント」の10項目で構成されています。
しかも、ここが最重要なのですが、この例示は「文法書」ではありません。資料自身が、問題文の記述を簡潔にするなどの理由でこの説明文書の記述内容に従わない形式で出題することもあると断り、受験に際しては当該問題文中の説明や指示に注意してそれに沿って解答するように、と求めています。
ここから受験戦略が決まります。
- 表記を丸暗記しても意味がない(本番で違う書き方が出る可能性を、出題者自身が明言している)
- 問題文中の関数説明や注記を読み落とさないことが最優先
- 読むべきは書式ではなく構造(どこが反復で、どこが分岐か)
なおこの例示の第5節には、同じ二分探索を流れ図・共通テスト用プログラム表記・Python3・JavaScript・VBA・Scratchの6通りで並べた対比が載っています。「学校で習った言語が何であれ橋を架ける」という設計思想が、資料の作りそのものに表れています。受験生は一度、自分の目でこの資料を見ておくべきです(URLは記事末に載せました)。
5-2 旧DNCLとの違い(他サイトを見るときの注意)
ここは受験生が本当に損をしているところなので、両方のPDFを突き合わせて表にしました。左が旧課程「情報関係基礎」向けの DNCL(2022年1月公開の説明)、右が情報Ⅰ向けの共通テスト用プログラム表記(2022年11月公表の例示)です。
| 旧DNCL(情報関係基礎) | 共通テスト用プログラム表記(情報Ⅰ) | |
|---|---|---|
| 代入 | ←(kosu ← 3) |
=(kosu = 3) |
| 四則演算 | 全角の + − × / | 半角の + – * /(商は ÷、余りは %、べき乗は **) |
| 「1増やす」構文 | あり(「kosu を 1 増やす」) | 例示に無い。x = x + 1 の形だけ |
| 定数の規定 | あり(すべて大文字の変数は変化しない値) | 例示に無い(規定は「配列名は先頭文字が大文字」のみ) |
| 文字列のくくり方 | 「 」と ” ” の2通り | ダブルクォーテーション ” の1通りのみ |
| 配列の添字 | 問題によっては1以上のみ | 特に説明がなければ0から |
とくに効くのが3行目です。旧課程では「kosu を 1 増やす」と日本語で書けたので、代入の向きを間違えようがありませんでした。いまはその逃げ道が無く、x = x + 1 を「x に x+1 を入れる」と読めるかどうかが直接得点になります。数学の等式だと思って「x = x + 1 なんて成り立たない」と固まる人が毎年います。イコールは等号ではなく矢印の代わりだと思ってください。
5-3 出題のされ方
流れ図・アルゴリズムが単独で1問まるごと出るというより、プログラム大問の入口として機能します。典型は次の流れです。
- 日常の場面(買い物、待ち時間、投票など)が示され、処理の方針が文章で説明される
- その方針が流れ図または表記で与えられ、空欄を埋める
- 条件やデータを変えたとき結果がどう変わるかを答える
- 処理を改良する(効率化・例外への対応)
5-4 落とすところ(引っかけ一覧)
- = と == … 代入か比較か。流れ図の
=は比較、プログラム表記の=は代入 - > と >= … この講のトレース表そのもの。「最初/最後」「以上/より大きい」が入れ替わる
- 添字の開始 … 例示では「特に説明がない場合,配列の要素を指定する添字は0から始まる」とされています。0始まりか1始まりかは、問題文の指示が絶対
- ループの終端 …
kazu-1までかkazuまでか。1つずれると範囲外か、最後の1個の取りこぼし - 判断の「はい/いいえ」の向き … 流れ図でひし形の出口ラベルを取り違える事故が本当に多い
- 初期値の置き方 … saidai を 0 で初期化すると、全要素が負の配列で答えが壊れます。なぜ Data[0] で初期化するのかを説明できるかが本質
- 止まらない条件 … 反復の中でカウンタの更新を忘れる形。有限性の条件に戻ってきます
5-5 対策
新しいプログラムを見たら、必ず自分の手でトレース表を書く。3〜5要素の小さな配列で十分です。頭の中で追うのは慣れてからでいい。ここを飛ばして「なんとなく読む」練習をしている限り、本番の見慣れないコードでは必ず止まります。
6. 情報Ⅱではこうなる
情報Ⅰの流れ図は、「1本の手続きの中身」を描く道具でした。情報Ⅱに入ると、描く対象そのものが変わります。
文部科学省「情報Ⅱ」教員研修用教材の第4章「情報システムとプログラミング」は、学習19 情報システム全体の情報の流れ/20 情報システムの情報セキュリティ/21 情報システムの表し方/22 情報システムの分割と設計/23 分割したシステムの制作とテスト/24 分割したシステムの結合とテスト/25 情報システムの評価・改善、の7学習で構成されています。
注目すべきは学習21「情報システムの表し方」です。ここで扱われる図は流れ図ではありません。要件定義(業務要件定義と機能要件定義)を図表化する手法として、UMLのユースケース図・シーケンス図、および DFD(Data Flow Diagram)とアクティビティ図が並びます。DFDの記号は、データフロー/プロセス(処理)/データストア(ファイル)/データの源泉と吸収です。
| 情報Ⅰ(流れ図) | 情報Ⅱ(ユースケース図・シーケンス図・DFD) | |
|---|---|---|
| 描く対象 | 1本の手続きの内部 | 利用者を含むシステム全体 |
| 主役 | 処理の順序 | 誰が何をするか/データがどこから来てどこへ行くか |
| 目的 | プログラムにすること | 関係者と要件を合意すること |
| 前提 | 手順はすでに決まっている | 何を作るかがまだ決まっていない |
つまり情報Ⅱでの主題は「決まった手順をどう書くか」から「そもそも何を作るべきかをどう決め、どう分割し、どうテストするか」へ移ります。第4章が学習22〜24で「分割して作り、結合してテストする」に大きく紙面を割いているのは、システムが1人で1本のプログラムを書く規模ではなくなるからです。
もうひとつの接続が、アルゴリズムの選び方です。じつは情報Ⅰ側にも芽があります。同じ「情報Ⅰ」教員研修用教材の第3章 学習15「アルゴリズムの比較」は、線形探索と二分探索、選択ソートとクイックソートを比べたうえで、「最大探索回数だけを比較すると,回数の少ない二分探索がよいアルゴリズムと考えがちだが,二分探索には事前にデータを並べ替えておく必要があり,一概によいアルゴリズムとは言い切れない」と釘を刺しています。「速い=良い」ではないという判断は、情報Ⅰの段階から求められているのです。情報Ⅱの「情報とデータサイエンス」では扱うデータ量が桁違いになるので、この判断が実際の成否を分けます。
本書では、計算量そのものは第57講、システム開発の中でのアルゴリズムの位置づけは第117講、データサイエンスにおけるアルゴリズムの選択は第116講で扱います。この講は、その全部の出発点です。
この講のまとめ
- アルゴリズムは「有限性・明確性・入力・出力」を満たした手順のこと
- どんなアルゴリズムも順次・分岐・反復の3構造で書ける
- 流れ図の記号は JIS X 0121(ISO 5807:1985 と一致)。2026年8月時点で有効な現行規格
- 共通テストで使われるのは DNCL ではなく共通テスト用プログラム表記。しかも例示どおりに出るとは限らないと出題者自身が明言している
- 代入は流れ図では「←」、プログラム表記では「=」。矢印で書いてある解説は旧DNCL(情報関係基礎用)なので、そのまま覚えない
- だから覚えるべきは書式ではなく構造。そしてトレース表を手で書く訓練
- 情報Ⅱでは、描く図が流れ図からユースケース図・シーケンス図・DFDへ変わる。対象が「手続き」から「システム」になるから
もっと深く学ぶために
- 連載の一覧はこちら → 情報Ⅰ 最強120講義(記事一覧)
- 入試問題そのものの解き方はこちら → 大学入試 過去問解説
- 数強塾の指導の進め方 → 指導システム
- 担当する講師陣 → 講師紹介
この記事で使った一次資料(すべて2026年8月3日に確認)
- 大学入試センター「令和7年度大学入学共通テスト 試作問題『情報』の概要」(2022年11月2日作成/2022年11月9日一部修正。第5節「共通テスト用プログラム表記の例示」)
https://www.dnc.ac.jp/albums/abm.php?d=744&f=abm00003141.pdf - 大学入試センター「共通テスト手順記述標準言語 (DNCL) の説明」(2022年1月。旧課程「情報関係基礎」向け。代入が「←」なのはこちら)
https://www.dnc.ac.jp/albums/abm.php?d=666&f=abm00000819.pdf - 文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第3章 コンピュータとプログラミング
https://www.mext.go.jp/content/20200722-mxt_jogai02-100013300_005.pdf - 文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第4章 情報システムとプログラミング
https://www.mext.go.jp/content/20200609-mxt_jogai01-000007843_005.pdf - 日本規格協会 規格票情報「JIS X 0121:1986 情報処理用流れ図・プログラム網図・システム資源図記号」
https://webdesk.jsa.or.jp/books/W11M0090/index/?bunsyo_id=JIS+X+0121%3A1986
