植物 植物
初心者講座:プログラム流れ図(処理)

AOBA's Information Processing Education



1997/11/02

注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してください)。

注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。


 プログラム流れ図とはその名の通り、プログラムの処理をその流れに沿って記述した図のことをいいます。そしてこのプログラム流れ図(以下流れ図)は、何らかのプログラムを作成する場合に、プログラム作成の前に先立って、プログラマ(プログラムを作成する人)自らが作成する場合が一般的です。
 プログラム言語は様々な種類がありますが、流れ図の書式は一しかありません。つまり流れ図はどんなプログラム言語を用いて作成しようとも、その基本となる重要な図であり、これが理解さえできればプログラムを理解するのは難しくはありません(と言っておきます)。

 では次の図1を見てください。これは1辺がA,もう1辺がBの長方形の面積をCに求める流れ図です。

図1

 例えば、Aに10,Bに5が入っている(代入されている)とした場合、この流れ図(に沿って作成したプログラム)を実行すると、Cに50が入ります(代入されます。以下この呼び方に統一)。図1は面積の計算を行うだけの処理の流れ図ですが、実際は、AとBに数値を代入する処理と、Cをディスプレイ(画面)上に表示する等の処理が必要です。しかしここでは、それは意識しないでください。面積の計算を行うだけの流れ図であっても、それはそれでりっぱな流れ図であり、この処理だけを行うプログラムを作成することもありえます。

 図1に注目してください。最初のstartと、最後のendは隅が丸くなった四角で囲まれていますね。これは端子といいます。この端子でもって流れ図の開始部分と終了部分を表します(開始部分を表す端子を始端、終了部分を表す端子を終端という)流れ図にはこの端子が必ず必要です。そしてその端子の中に記述するのは、プログラムの開始と終了を示すものであれば何でもよく、特にこれといった規定はありません。

 次に始端と終端の間の、"A * B → C"に注目してください。これは四角で囲まれているのが分かりますね。この四角の部分を処理といいます。図1の流れ図は処理が一つだけでしたが、複数あってもかまいません(というよりも、複数あるのが普通)。
 もし処理が複数あれば、始端の直下の処理から順に、下へ向かって処理が実行され、終端でもって流れ図が終了するのです。早い話、最終的に求める結果が得られるように、処理の手順を順に規定したものが流れ図なのです。

 さて、ここまでA,B,Cという三つの記号が出てきました。この記号は変数といって、流れ図(ひいてはプログラム)を理解する上での重要な要素です。
 とりあえずここでは、変数とは、”何でも代入できる自由な入れ物”と考えてください。変数をどのように使おうと、それはプログラマの自由です。また変数は一度値を代入されると、再度代入されない限り値を保持し続けます。
 また変数の名前を変数名といい、変数名もプログラマが自由に付けることができます。したがって、図1の流れ図の処理は、"A * B → C"ではなく、"TATE * YOKO → MENSEKI"とした方がよいかもしれません。

 ここでもう一度、図1の処理を以下に示します。

A * B → C

 処理の多くは上記に示すように"→"があります。この→の左側を左辺("A * B"の部分)、右側を右辺("C"の部分)と言います。そして"→"は、”左辺を計算して右辺に代入する”という意味です(矢元と矢先が逆ならば、右辺を計算して左辺に代入する、の意味)。  だからこの処理は、”変数A(の内容)に変数B(の内容)を乗じた値(*は乗算を表す)を、変数Cに代入する”ということになります。左辺の計算式はどんなものであってもよく、例えば"( TEIHEN * TAKASA ) / 2"とすれば、三角形の面積を求める処理になりますし("/"は除算を表す)、"HANKEI2 * π"とすれば、円の面積を求める処理になります。
 逆に右辺は、必ず単独の変数でなければなりません。つまり右辺が"A + B"や"MENSEKI * 2"のような計算式や、(注)に記載した定数になることはありません。なぜなら、左辺を計算した値の代入先は、必ず一つの変数だからです。

(注)左辺は単独の変数や定数であってもかまいません。定数とは、"10"とか"-300"とか、値そのもののことをいいます。したがって、"A → B"や" 10 → C"の処理は許されます。

 ここまでを整理します。代入を行う処理として許されるのは、次のパターンです。

 計算式 → 変数   例)A + B → C (Aの内容にBの内容を加算してCに代入)
 変数  → 変数   例)A → B (Aの内容をBに代入...AとBは同じ値になる)
 定数  → 変数   例)0 → A (Aに0を代入...Aの内容が0になる)

「演習」

 以下は、変数Aの内容と変数Bの内容を入れ替える流れ図である。空欄を埋めて流れ図を完成させよ(例えば、Aの内容が10でBの内容が20の時、この流れ図を実行すると、Aの内容が20になり、Bの内容が10になる)。

図2


演習の解答

空欄ア A     空欄イ C → B

 例として、Aの内容が10でBの内容が20の場合を考えます。

流れ図実行前の状態 A:10  B:20  C:不定(値が定まっていない状態)

1番目の処理("A → C")実行後の状態 A:10  B:20  C:10

2番目の処理("B → A")実行後の状態 A:20  B:20  C:10

3番目の処理("C → B")実行後の状態 A:20  B:10  C:10

 ということで、めでたくAとBの内容が入れ替わりました。
 二つのコップにジュースが入っていたとして、このコップの中身を入れ替えるとき、もう一つコップが必要なはずです。このもう一つのコップの役目を果たすのが変数Cに当たります。

 なお、本演習では出てきませんでしたが、左辺と右辺で同じ変数を使用することもできます。例えば、"A + 1 → A"のような処理が許されます。
 この例は、Aの内容に1を加えて、それを同じAに代入する処理です。もしAに3が代入されていれば、この処理を実行するとAに4が代入され、Aに100が代入されていれば、実行後のAの値は101です。つまりこれは変数Aを1カウントアップさせる処理ですが、これをインクリメントと呼ぶ場合もあります(減算はデクリメント)。
 変数をカウントアップ(インクリメント)またはカウントダウン(デクリメント)する処理は頻繁に使用しますので、よく理解しておいてください。

 ではまた来週。