フローチャート 1
フローチャート0 | フローチャート2
SEになるためにはプログラミングを覚えコンピュータで出来る仕事を理解したうえで、当該業務のシステム設計を行うことが一般的です。
プログラムとは、コンピュータに理解できる個々の命令を実行順に並べたものですが、その実行手順(命令の流れ)を図式化したものがフローチャート(流れ図)です。
プログラマはフローチャートからプログラムを作成したり、プログラムからフローチャートを作成(逆フローといい、プログラムの流れを理解する必要がある時に行います)したり出来なければいけません。
また、フローチャートはプログラミング言語(C,JAVA等)にそれほど依存せずに作成出来ます。

そこでプログラム入門の第一歩はフローチャートの勉強です。
※今回のフローチャートでの勉強では、以下のシンボルを使用します。
端子:フローチャートの開始・終了を表す
開始はSTART、終了はEND等を記述
処理:行う処理(命令)を表す
分岐:条件により処理の流れが分岐する
以下の例に示すように、各シンボルの中に注釈を記入し各シンボルを線で結んだものが
フローチャートです。
例題1 A,B,Cそれぞれに数字が入っています。その合計をXに入れなさい。
  • ・解1、解2共に正解です。
  • ・A,B,C,Xの扱いですが、実際のプログラムでは、コンピュータメモリ上にAという名前の数値エリアを定義しておく必要があり、名前はA固定ですが、中身はいろいろな数値に変更可能なため、これを変数と呼びます。B,C,Xも同様ですが、フローチャートでは全ての変数は定義済みとみなし、改めて定義する必要はありません。
  • ・変数に対し、1とか2.5とか-100とかの数字は定数と呼びます。
  • ・例題ではAとかXなどの意味のない変数名を使用しましたが、実務ではageやtotal等のように意味が解るような名前にします。
  • ・変数の初期値は保障されませんので、最初に初期値を設定します。
  • ・解2には「X = X + A」という普段見慣れない数式がでてきます。これは「右辺の計算結果(X + A)を左辺(X)に代入する」という意味で 「X ← X + A」とも書きます。
  
例題2 A(数値が入っている)の絶対値をXに代入しなさい。
  • ・分岐はAと0を比較し、A > 0なら下のX = Aを実行し終了、A ≦ 0なら右のX = 0 - Aを実行し終了します。
  • ・分岐条件が不等号の場合、=が下か右かのどちらにくるか明確にします。(解では右にしてあります。)
  
例題3 1から100までの整数の合計をXに代入しなさい。
  • ・分岐はAと0を比較し、A > 0なら下のX = Aを実行し終了、A ≦ 0なら右のX = 0 - Aを実行し終了します。
  • ・分岐条件が不等号の場合、=が下か右かのどちらにくるか明確にします。(解では右にしてあります。)
  • ※解2の考え方(ループカウンタを利用した繰り返し)の説明です。
  • ・ループのフローチャートを作成する場合、一回毎の処理をどうするかが重要になります。そして一回毎の処理を100回繰り返す仕組を作る為にループカウンタ(CNT)を用意します。CNTは1から始まり、処理を一回行うごとに+1され、100回を超えた時点で終了します。
  • ・そこで一回目はX = X + 1、2回目はX = X + 2、・・・100回目はX = X + 100とする代わりに一回毎の処理を「X = X + CNT」と考えるとどうでしょうか。ループ1回目のCNTは1ですから、X = X + 1と同じになります。2回目のCCNTは2ですからX=X+2と同じになり、上手く制御できそうです。
  • ・つまり「X = X + CNT」の処理を100回(CNT = 1から100まで)繰り返す処理を作れば良さそうです。
  • ・ループ処理では、「一回毎の処理」を上手く作ることが解決の肝になります。
  • ※以下、解2の詳細説明です。
  • ・*1:フローの先頭で初期処理(この場合Xの値を0クリアしておく)を行います。
  • ・*2:ループを制御する為にループカウンタ(CNT)を用意します。(処理のために必要な変数は自分で勝手につくります。)1から100までの繰り返しと考えて初期値を1にセットします。
  • ・*3:永久ループとならないようにループ終了条件(CNT>100ならループ終了、CNT≦100ならループ続行)を設定します。
  • ・*4:繰り返しの対象となる「一回毎の処理」として「X=X+CNT」を記述します。複雑な処理の場合、*4は複数の処理で構成されます。
  • ・*5:ループ処理の最後はループカウンタUP(CNT=CNT+1)を行います。これを忘れると永久ループ(デッドループ)に入ってしまいます。
  • ・カウンタ利用のループフローでは*2、*3、*5のループ制御及び*4の一回毎の処理が必須となります。
  • <トレース>
  • ・フローチャートが出来たら出来上がったフローが正しいか確認が必要です。実際に数値を当てはめて正しい流れになっているか確認する作業をトレースといいます。
  • ・例題3を例にとりトレースの手順を説明します。
  • ・まず、100までの確認は大変ですから5までの合計をXに入れる処理で確認するので、終了条件はCNT > 5とします。最終的にはXが1 + 2 + 3 + 4 + 5 = 15になることが確認できればOKです。
  • ・下の表を用意しますが、CNT値とX値はまだ未記入です。ループ1回目から5回目までのCNT値とX値をフローを辿りながら表に記入する作業がトレース作業になります。
  • ・ではやってみましょう。
  • ループ終了判定の分岐のところで各値を表に記入します。
  • CNT値が6なので(>5)フローに従いループ終了となり、この時点のXが求める解になります。X = 15なので正しいことが確認できました。
  
例題4 1からの整数を順番に加算(1 + 2 + 3 + 4 +...)したとき
合計が10000を超えたときの加算値(整数)をXに代入しなさい。
  • ・ループや分岐でのフローチャートの注意点です。
  • ・ループは右回りに記述
  • ・ループは処理(*5)の下から出て線上(*3の上)に戻る
  • ・メインとなる処理は中央線上に記述
  • ・終了条件(分岐)は以下の記述方法がある
  • ⅰ.TTL:10000と記述し、>、≦を線上に記述
  • ⅱ.TTLと記述し、>10000、≦10000を線上に記述
  • ⅲ.TTL > 10000と記述し、Y、Nを線上に記述(あまり良くない)
  • ・終了条件(分岐)で=を終了条件にすると永久ループに陥ることがあるので不等号(≧、≦)のほうが良い。
  • ・トレースを行いフローの正否を確認する。
  
  
以下フローチャートの演習問題です。
1.1から連続した100個の奇数の合計をXに代入しなさい。
2.2から連続した100個の偶数の合計をXに代入しなさい。
3.下図で○となる数値100個(1,2,4,7,11,16,22...)の合計をXに代入しなさい。
 
 * 1行目は1からの整数、2行目は選択値に加算する数=次回選択値
 * 3行目○があれば1行目の整数が処理対象
4.X = A * Bを掛け算を使わないで求めなさい。(A、Bは整数、*は掛算記号)
5.X = A / Bを割り算を使わないで求めなさい。余りはYに代入しなさい。
 (A、Bは整数、/は割算記号)
6.変数A、Bの内容を入れ替えなさい。(A、Bは整数)
7.1からの整数を順次加算(1 + 2 + 3 + 4 +・・・)して合計が20000を超える
 直前の加算値(数値)及び合計を求めなさい。
フローチャート0 | フローチャート2