(since 2005/01)(更新 2008/05/01)

TNO:フローチャート入門[1]

情報系/IT系の広告を掲載しています。(広告一覧)
©Copyright 2005,2008 小野智章(小野情報設計)
無断転載を禁止します。
CASL入門[目次]
CASL入門[索引]

フローチャート入門[2]

フ ロ ー チ ャ ー ト 入 門


暫定版です。
追加・修正していきます。
メール・マガジン「TNO CASLII試験対策」の 開始に合わせ、 順次、充実させます。
尚、構成は変わることがあります。

(chapter1-page1)
0.はじめに

 このテキストでフローチャートについて学習してゆきますが、 特定用途のアルゴリズムや高度なアルゴリズムを学習するものではありません。 それらのアルゴリズムは、別途学習してください。
 又、このテキストでは、 CASLII等のアセンブリ言語の概要、 或いはCPU動作の基本の理解を想定しています。 「CASL入門」等で、 予め学習しておくことを薦めます。
 又、プログラム上では通常は半角文字を使う表記において、 掲載の都合上、全角文字で表している箇所があります。 更に数式部分では、「×」「÷」の記号に代えて、 多くのプログラム言語で使用される「*」「/」を使用しています。

その前にいくつかの注意事項があります。 次の注意とテキスト中での例示等の各表現方法を理解しておいて下さい。

◆各記述において 「強調文字」 「イタリック」や 「文字」等は、 注目すべき部分を示しており、 入力、表示形式が変わるものではありません。 又、各表示は重要部分を抜粋したもので、 実際の表示と完全に一致するものではありません。
◆次の様な枠で囲まれた部分は、 フローチャートを表します。
    
◆次の様な枠で囲まれた部分は、 フローチャートの変更部分や参照部分を表します。
    
◆次の様な枠で囲まれた部分は、 参考のために示した図表などを表します。
    

(chapter1)
1.フローチャートとは

フローチャート(流れ図)とは、 決められた記号要素を使って、 コンピュータで行う処理の手順を図で表したものです。
何かの機能を持つプログラムを作成したい場合に、 どの様な動作をすれば良いのかを先ずフローチャートで表しておいて、 プログラム言語へ書換えます。 つまり、フローチャートとは、 プログラムの設計図です。 (フローチャート以外を用いることも多いですが、 フローチャートが基本です。)

フローチャートの基本要素
メール・マガジンでは、文字で表記するため、多少形が変わります。 そこで、メール・マガジンでの表記を示しておきます。
メール・マガジンでは、ここまでの記号を使います。
この他、特定の処理専用、入出力、装置などを表す記号がありますが、 メール・マガジンでは表記の都合上、概ね「処理」で表します。

(chapter2)
2.変数

コンピュータの処理では、途中結果を格納する場所が必要です。 (アセンブリ言語では、レジスタにデータを格納出来ますが、 レジスタだけでは足りなくなることもあります。) そこで、メモリ上にデータを格納し、 その格納場所のことを、 値が変化すると言う意味で「変数(variable)」と呼びます。 (数学における「変数」とは異なります。)
 レジスタ           メモリ
┌───┐ コピー ┌───┐
│データ│ ──→ │      │;変数
└───┘        └───┘
 レジスタ           メモリ
┌───┐ コピー ┌───┐
│      │ ←── │データ│;変数
└───┘        └───┘
変数に格納したデータは、 コンピュータ自体はその変数のアドレスによってアクセスしますが、 そのアドレスの値をそのまま人間が利用するのは不便です。 そこで、変数には「変数名」と呼ぶ、人間が読める名前を付け、 その変数名で格納場所を指定します。 格納されたデータが変化していない間は、 変数名で格納されたデータ自体も表されます。
変数名
 ↓
   ┌───┐
  A│  5  │
   └───┘
   ┌───┐
  B│  7  │
   └───┘
  A+B
 ──→ 
変数名
 ↓
   ┌───┐
  C│ 12 │
   └───┘
変数名は、通常、英字で始まる1文字以上の英数字列です。 多くのプログラム言語では、小文字も使えます。 フローチャートなどの設計段階では、 読み易い様に、名詞(或いは名詞句)で代用することも多いです。 アセンブリ言語では、 変数名は、「ラベル」と同じものが使われます。
アセンブリ言語では、 変数と同様、レジスタにもデータを格納出来ます。 従って、アセンブリ言語用のフローチャートでは、 レジスタも変数も、ほぼ同様に扱うことが出来ます。

(chapter3)
3.配列

文字列は、1文字づつの文字コードが並んだものです。
 文字列
┌──┐
│'C' │
├──┤
│'A' │
├──┤
│'S' │
├──┤
│'L' │
└──┘
この様に同種類のデータが連続して並ぶ場合、 個々のデータの格納場所を別々の変数にして、 それぞれに変数名を付けるのはややこしいです。 そこで、連続したデータを一纏めにして、 その格納場所のことを、並んだものと言う意味で「配列(array)」と呼びます。
    変数
  ┌──┐
A0│'C' │
  └──┘
  ┌──┐
A1│'A' │
  └──┘
  ┌──┐
A2│'S' │
  └──┘
  ┌──┐
A3│'L' │
  └──┘
 配列
┌──┐
│'C' │
├──┤
│'A' │
├──┤
│'S' │
├──┤
│'L' │
└──┘
配列にも「配列名」が付けられ、 配列名によって格納場所や格納データを示すことが出来ます。 アセンブリ言語では、 配列名にも「ラベル」と同じものが使われます。
配列の場合は、データの列全体だけでなく、 個々のデータをアクセスしたい場合もあります。 そこで、配列中の何番目のデータと言う形で個々のデータを示し、 その格納場所や格納データを配列の「要素(element)」と呼びます。 そして、何番目かという数値を「添字(subscript)」と呼び、 個々の要素を通常、 「配列名[添字]」、或いは「配列名(添字)」の形で指定します。
 配列 A   要素
┌──┐   ↓
│'C' │ ;A[0]
├──┤
│'A' │ ;A[1]
├──┤
│'S' │ ;A[2]
├──┤
│'L' │ ;A[3]
└──┘
配列の要素をアクセスする場合、 コンピュータ自体は、実際にはその要素のアドレスによってアクセスします。 1つのアドレスに1個のデータが格納されている場合、 アセンブリ言語では、 「配列のアドレス+添字」がそのアドレスになります。 配列の先頭の要素は、当然、配列の先頭のアドレスに格納されます。 つまり、配列の先頭の要素のアドレスは 配列の先頭のアドレスと同じになり、 「配列のアドレス+先頭の添字=配列のアドレス」となります。
アドレス 配列 A   要素
   ↓   ┌──┐   ↓
  9000  │'C' │ ;A[0]
        ├──┤
  9001  │'A' │ ;A[1]
        ├──┤
  9002  │'S' │ ;A[2]
        ├──┤
  9003  │'L' │ ;A[3]
        └──┘
Aのアドレス=9000

A[0]のアドレス=9000+0
A[1]のアドレス=9000+1
A[2]のアドレス=9000+2
A[3]のアドレス=9000+3
これは、アセンブリ言語では、 添字が0から始まると言うことです。 配列に格納されるデータの個数がn個の場合、 添字は0からn−1と言うことになります。 一般的なプログラム言語でも、同様です。 ただし、人間に分かり易い様に、添字を1から始めるプログラム言語もあり、 その場合は、要素のアドレスをずらして求めることになります。
アセンブリ言語では、 配列名はラベルで、 添字は指標レジスタ(インデックス・レジスタ)で表記することが多いです。 こうすると、ラベルと指標レジスタを使って、 自然にその要素をアクセス出来ます。 指標レジスタの詳細は、「CASL入門」にて。
この他、1つのアドレスだけでは1個のデータを格納しきれない場合や、 表の形の配列、多次元の配列なども、考えて見てください。

(chapter4)
4.代入

コンピュータの処理では、 変数や配列の要素にデータを格納する作業が多発します。 この格納作業のことを「代入」と呼び、 「計算結果を変数に代入する」等と表現します。 この多発する代入を、 一々「代入する」「格納する」と表現していたのでは面倒です。 そこで、代入を簡潔に表記する次の様な方法が使われます。
配列要素への代入も、同様です。
変数名や配列要素は、式中でも使用可能です。

(chapter5)
5.基本の3パターン

フローチャートは、 基本の3パターン(逐次,選択,反復)の組合せで書くのが良いです。
この3パターンの書き方を外した場合、 プログラムの動作が分かり難くなることが多い。
実際のフローチャートでは、 パターン中で1つの処理で表記した部分を、 更に3パターンのどれかで置き換えている場合も多い。 置き換えは、更に繰り返している場合もある。
フローチャート入門[2]

CASL入門[目次]
CASL入門[索引]
学習室
トップ・ページへ

質問・ご意見等、お待ちしております。
小野智章(小野情報設計) 
Mail to Mail連絡先
©Copyright 2005,2008 小野智章(小野情報設計)
無断転載を禁止します。