フローチャートのすすめ
目次
大学では教えてもらえない「フローチャート」
フローチャートリファレンス
基本制御構造をフローチャートで表す
フローチャートの例
フローチャートが扱えるツール
まとめ
大学では教えてもらえない「フローチャート」
3週目では制御構文を学んだ。これを組み合わせれば大抵の処理は書くことができるだろう。ここで問題となってくるのが、どのように処理を組み合わせると「望んだ処理」を生み出すことができるのかということだ。フローチャートは複雑な処理を考えるときに強力なツールになるだろう。
https://gyazo.com/945ac7fcedceee4251f1d6eafa2f12ea
↑筆者が所持しているフローチャートを書くための定規。今は電子的に書くことが多い。
授業ではプログラミングを教えるくせにフローチャートの書き方を教えてくれない(コースによっては教えるかもしれないが、全コースでは教えていない。ソースは俺。)。ということで今回はフローチャートを扱う。 フローチャートは名の通り処理の流れを示す図である。日本語では「流れ図」と呼ばれる。フローチャートは構造化定理に従って記述される。構造化定理の特徴は以下の2つである。
1つの入り口、1つの出口を持つ。
順次、選択(条件分岐)、繰り返し(ループ)の基本制御構造を持つ。
それでは実際にフローチャートを書いてみよう。
フローチャートリファレンス
たくさんあるので、代表的なものを紹介する。
端子
プログラムの開始と終了、関数の開始と終了に用いる。
https://gyazo.com/718de543a119429d0e5945386d849d6f
準備
定数定義や初期値の設定に用いる。
https://gyazo.com/a6ecde065a68e30316abc40a25492e5d
データ入出力
ユーザからの入力を受け取ったり、ユーザに何かを出力するときに用いる。
https://gyazo.com/d81b62eda3a6b8b7b0ed5959a1672f2f
処理
処理(演算、代入)を行う。中に処理内容を記述する。
https://gyazo.com/62a8df333b089a5d66bdf0f30675c6ca
判断
条件によって処理を変更するときに用いる。中に条件を記述する。
https://gyazo.com/443c960d446978db9a734790612f16d4
繰り返し(ループ)
何らかの処理を繰り返すときに用いる。始端と終端をセットにして使う。始端と終端に挟まれた処理を条件が整っている間、繰り返し処理する。
https://gyazo.com/a906d7475ecfc57b761fedbdefffacc8
結合子
フローチャートを分割するときに用いる。フローチャートは縦に長くなりやすいのでよく使う。
https://gyazo.com/ba9d54759e3b1a6308f6dd1026444271
中には識別子を入力し、同じ識別子の結合子をつなぎ合わせる。
https://gyazo.com/abb5449a491575520bf92c9ba669856d
関数呼び出し
関数(プログラムをひとまとめにしたもの)を呼び出す。
https://gyazo.com/14207fd87630d60b1174c166bb6eaba7
記憶データ
コンピュータ内に保存されているデータ(ファイルやデータベース)を読み書きするときに用いる。
https://gyazo.com/a5c1e01c3cd1df421b00d5a96d301548
基本制御構造をフローチャートで表す
順次、選択(条件分岐)、繰り返し(ループ)といった、3つの基本制御構造をフローチャートで表してみる。
順次構造
プログラムが上から下に実行されるように、フローチャートもまた上から下に実行される。例では、処理1 -> 処理2 -> 処理3と実行される。
https://gyazo.com/71aa1a9914c34db59287d9203e6310bf
選択構造
条件によって処理を2つまたはそれ以上に分岐する。2つの処理に分岐することを二分岐、3つ以上の処理に分岐することを多分岐という。条件ごとの処理を終えると、フローチャートはまた1つになる。
https://gyazo.com/944eb7be885d58e85c91513ea6fe00eb
↑これが二分岐
https://gyazo.com/e11988a84bbc65f644d8d0e687294615
↑これが多分岐
繰り返し構造
ループ。条件が成立してる間、始端と終端に挟まれた処理を繰り返す。条件が常に成り立っている(真・Trueと表現する)場合は無限ループとなる。ループが1回実行されるごとにカウントアップをし、指定した回数実行することも可能。この機能はfor文という構文で実現している言語が多い。なお、単に条件でループするのはwhile文(事前判定)やdo-while文(事後判定)という構文で実現しているケースが多い。
https://gyazo.com/611495ac0e04bc93231668b6e0a2846d
フローチャートの例
最後に、実践的なフローチャートを紹介する。今回は「-1が入力されるまで数値を入力し、合計が100を超えた場合は「強い」と表示し、そうでない場合は「弱い」と表示する」プログラムをフローチャートで表す。
https://gyazo.com/2980bb4daa1d95194e3da692db8a72c6
まず、合計の値を格納する「sum」変数と入力を受け取る「num」変数を0で初期化する。初期化しないと意図しない数字が変数に格納されてしまい、正常な動作をしない。numは処理の順番次第で初期化しなくてもよいが、今回はループ外で「numを入力」する処理を書きたくなかったため、初期化した。
左側で入力のループがまわり、右側で出力の条件判定を行っていることがわかるだろう。
フローチャートがかけるツール
word
フローチャートカテゴリが図形の中にあり、それを用いると基本的なフローチャートは完成する。でもなんか使いづらい。
draw.io
神。フローチャートだけでなく、プログラムを書くための図がほとんどこれでかける。これを使えると業務でもなにかと便利。最近VS Codeでも扱えるようになった。draw.io まとめ
今回はフローチャートについて述べた。おそらく、3週目までの内容についてこれている人の中には不必要に思う人もいるだろう。それは正しいと筆者も考える(プロジェクトリーダーにもそう言及された)。しかしながら、この話を知っているのと知らないのでは天と地の差だとも筆者は考える。確かにフローチャートを書くのは面倒だが、複雑な処理を整理したり、自分の考えを他のエンジニアに伝えたりするときにはフローチャートは有用である。プログラムを書くたびにフローチャートを書くべきとも思わないし、フローチャートの記号を必死に覚えるべきとも思わないが、エンジニアとして「フローチャートというものがあると知っている」、「必要なときに使える」ということが大事だと思う。