トラック2・🧭プログラミング的思考

擬似コードで書いてみる

読む目安 約12分・ゴール:擬似コードの書き方を知り、日本語まじりで手順を表現できるようになる

アプリでこのトピックを学ぶ(無料・登録不要)

このトピックの要点

頭の中の手順を、そのままC言語で書こうとすると大変です。文法の心配と、手順の心配を同時にすることになるからです。人間の頭は、2つのことを同時に考えるのが苦手です。

そこで使うのが擬似コードです。プログラムの形をした日本語、と考えてください。文法エラーの存在しない世界で、手順だけに集中できます。

書き方の作法

決まった規格はありませんが、次の作法で書くと読みやすくなります。

例: 点数の平均を求める

合計 ← 0
個数 ← 0

点数リストの各要素 x について繰り返す:
    合計 ← 合計 + x
    個数 ← 個数 + 1

もし 個数 が 0 ならば:
    「データがありません」と表示する
そうでなければ:
    平均 ← 合計 ÷ 個数
    平均 を表示する

文法を1つも知らないのに、何をしているか読めるはずです。これが擬似コードの威力です。しかも、前回学んだ順次・分岐・反復がそのまま形になっています。

ビット字下げがあるだけで、どこからどこまでが繰り返しか分かるよね。この感覚、Cでもそのまま使うよ。

なぜ先に擬似コードを書くのか

理由は3つあります。

  1. 手順の間違いを、文法の間違いと切り離して見つけられる
  2. 人に見せて相談できる(Cを知らない人にも読める)
  3. そのままコードに置き換えられる — 1行が1行に対応することが多い

実際、上の擬似コードは、C言語の for と if にほぼ機械的に置き換えられます。あとの第1部で文法を覚えたとき、「あ、あの擬似コードの形だ」と気づく瞬間が来ます。

Cに置き換えるとどうなるか

少し先取りして、対応だけ見ておきましょう(今は分からなくて大丈夫です)。

記号は違いますが、形はそっくりです。字下げしていた部分が { } で囲まれる、という対応も見えるでしょうか。つまりアルゴリズムさえ固まっていれば、C言語の学習は「この対応表を覚える作業」にかなり近づきます。逆に手順が固まっていなければ、文法をいくら覚えても書けません。

やってはいけないこと

擬似コードだからといって、曖昧な言葉を書いてはいけません。

曖昧なまま擬似コードに書いた部分は、必ず実装のときに詰まります。 逆に言えば、擬似コードで詰まる場所を先に見つけられるのが、この道具の価値です。手が止まったら、その部分をもう一段分解しましょう。

アプリでこのトピックを学ぶ(無料・登録不要)

確認問題

確認問題 1

擬似コードを使う目的として、最も適切なものはどれでしょう。

  1. 文法の心配をせずに、手順そのものだけに集中して考えるため
  2. そのままコンパイルして実行するため
  3. C言語で書くより速いプログラムにするため
  4. コードの見た目を短くするため
答えを見る

正解:A(文法の心配をせずに、手順そのものだけに集中して考えるため)

擬似コードは「プログラムの形をした日本語」で、文法エラーの存在しない世界で手順だけを詰められます。実行はできませんが、そのぶん手順の誤りと文法の誤りを切り離して見つけられるのが利点です。人に見せて相談できるのも大きな利点です。

確認問題 2

点数リストの平均を求める擬似コードです。正しい順に並べ替えましょう。

    合計 ← 合計 + x
合計 ← 0
平均 ← 合計 ÷ 個数
平均 を表示する
点数リストの各要素 x について繰り返す:
答えを見る

正しい順番:

合計 ← 0
点数リストの各要素 x について繰り返す:
    合計 ← 合計 + x
平均 ← 合計 ÷ 個数
平均 を表示する

足し算を始める前に、貯めるための箱を0にしておく必要があります(これを忘れると、前に入っていた値に足し込まれてしまいます)。割り算は、すべて足し終わってから1回だけ行います。繰り返しの中に割り算を入れてしまうと、途中経過を何度も割ることになります。

「プログラミング的思考」の目次

  1. 問題を分解する(Decomposition)
  2. パターンを見つける(Pattern Recognition)
  3. 抽象化——捨てる勇気
  4. アルゴリズム——手順を組み立てる
  5. 擬似コードで書いてみる
  6. フローチャート入門
  7. 日常の問題をアルゴリズム化する
  8. 良い手順・悪い手順——効率の予感

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版の販売ページは準備中です。

ほかのトラック

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版