頭の中の手順を、そのままC言語で書こうとすると大変です。文法の心配と、手順の心配を同時にすることになるからです。人間の頭は、2つのことを同時に考えるのが苦手です。
そこで使うのが擬似コードです。プログラムの形をした日本語、と考えてください。文法エラーの存在しない世界で、手順だけに集中できます。
書き方の作法
決まった規格はありませんが、次の作法で書くと読みやすくなります。
- 1行に1つの動作を書く
- 代入は
←で表す(合計 ← 0は「合計に0を入れる」) - 条件や繰り返しの中身は、字下げ(インデント)して段差をつける
- 日本語と記号を混ぜてよい。読めればよい
例: 点数の平均を求める
合計 ← 0
個数 ← 0
点数リストの各要素 x について繰り返す:
合計 ← 合計 + x
個数 ← 個数 + 1
もし 個数 が 0 ならば:
「データがありません」と表示する
そうでなければ:
平均 ← 合計 ÷ 個数
平均 を表示する文法を1つも知らないのに、何をしているか読めるはずです。これが擬似コードの威力です。しかも、前回学んだ順次・分岐・反復がそのまま形になっています。
なぜ先に擬似コードを書くのか
理由は3つあります。
- 手順の間違いを、文法の間違いと切り離して見つけられる
- 人に見せて相談できる(Cを知らない人にも読める)
- そのままコードに置き換えられる — 1行が1行に対応することが多い
実際、上の擬似コードは、C言語の for と if にほぼ機械的に置き換えられます。あとの第1部で文法を覚えたとき、「あ、あの擬似コードの形だ」と気づく瞬間が来ます。
Cに置き換えるとどうなるか
少し先取りして、対応だけ見ておきましょう(今は分からなくて大丈夫です)。
合計 ← 0はsum = 0;〜について繰り返すはfor (...) { ... }もし 〜 ならばはif (...) { ... }そうでなければはelse { ... }表示するはprintf(...)
記号は違いますが、形はそっくりです。字下げしていた部分が { } で囲まれる、という対応も見えるでしょうか。つまりアルゴリズムさえ固まっていれば、C言語の学習は「この対応表を覚える作業」にかなり近づきます。逆に手順が固まっていなければ、文法をいくら覚えても書けません。
やってはいけないこと
擬似コードだからといって、曖昧な言葉を書いてはいけません。
- ✗
いい感じに並べ替える - ○
小さい順に並べ替える(大きさを比べて入れ替えるのを、入れ替えが起きなくなるまで繰り返す)
曖昧なまま擬似コードに書いた部分は、必ず実装のときに詰まります。 逆に言えば、擬似コードで詰まる場所を先に見つけられるのが、この道具の価値です。手が止まったら、その部分をもう一段分解しましょう。