No.1 一番簡単な自動販売機

自動販売機の中を考える-フローチャートと構造化設計-

開始
簡単な仕組みの自動販売機
・100円玉を1枚だけ入れられる・商品は1つだけ・商品切れランプは無し
・お金返却ボタンは無し
・つり銭切れランプは無し
・お金を入れて一定時間たったら自動的にお金返却は無し

No

まず、始めの一番簡単な自動販売機について考えてみましょう。お金を入れることと製品のボタンを押すことしかできません。
このプログラムの動作をフローチャー
トで表すと右の図のようになります。

No

100円
円

自動販売機も中に入っているコンピュータで動作しています。
今回の授業では、どのようなプログラムが動いているか考えてみましょう。

自動販売機って、どこにでもあって便利だよね

金額 0000

お金が投入される
Yes

金額を100円にする

No

飲み物ボタンが押される
Yes

お金が100円入っている
Yes

飲み物缶を出す1

Ver 1.0 2014/04/28 © Go Ota, 2014

2

開始

フローチャートの書き方
ちょっとだけ複雑な自動販売機
プログラムの開始と終わり

商品がある

処理1

処理2

No

No

No

(開始)

(終了)

Yes

処理の流れの表記(アルゴリズム
処理の流れの表記 アルゴリズム)
アルゴリズム
逐次型(直線型)
分岐型

条件

条件
Yes

Yes

Yesの処理Yesの処理

100円
円

Noの処理

売り切れ

金額 0000

処理3

簡単な仕組みの自動販売機
・100円玉を1枚だけ入れられる・商品は1つだけ・商品切れランプは有り
・お金返却ボタンは無し
・つり銭切れランプは無し
・お金を入れて一定時間たったら自動的にお金返却無し

売切れランプOn

No

Yes

金額を100円にする
No

ループ型(繰返し型)

プログラムや人間の判断などのアルゴリズムは基
本的に、逐次型、分岐型、ループ型の組み合わせで表現できますね。

Yes

ループの処理終了条件
No

ループの処理No

終了条件

ループの処理Yes

無限ループ

後判断ループ前判断ループ

3

もう少し複雑な自動販売機を考えてみましょう。売切れランプを追加します。
フローチャートも少し複雑になりますね。ポイントは、開始直後と「飲み物缶を出す」の後の二か所に、商品の確認をして売切れランプの処理が入ることにあります。初めに品物が無い場合もありますからお金が投入される飲み物ボタンが押される
Yes

No

お金が100円入っている
Yes

飲み物缶を出す
No

商品がある
No

売切れランプOn

4

開始

演習:
演習 もうちょっとだけ複雑な自動販売機

解答例:
解答例 返却ボタンのある自動販売機

Yes
商品がある
No

120円
円

返却

売り切れ

金額 0000

簡単な仕組みの自動販売機
・100円玉を1枚だけ入れられる・商品は1つだけ・商品切れランプは有り
・お金返却ボタンは有り
・つり銭切れランプは無し
・お金を入れて一定時間たったら自動的にお金返却無し

売切れランプOn
No

お金が投入される

Yes

金額をxxx円にする
No

返却ボタンの追加では、お金が現在投入されたとか、金額表示を0円にするなどの処理も必要ですね。
このぐらいになるとフローチャートもごちゃごちゃして判りにくくなりますね。

もう少し複雑な自動販売機を考えてみましょう。お金返却ボタンを追加します。
この自動販売機のフローチャートを考えてみてください。
(早く終わった人は、つり銭切れランプがある場合のフローチャートも考えてみてください)

返却ボタンが押された
Yes
お金が投入されている
Yes
お金を返却する

No

金額を0円にする。

No

飲み物ボタンが押される
Yes
お金が100円
入っているYes
飲み物缶を出す

No

No
商品がある
No
売切れランプOn

5

サブルーチンでフローチャートをすっきり
メインルーチン

売切れランプの処理
Yes

売切れランプの処理
No

サブルーチンでもっとフローチャートをすっきり

サブルーチン1

開始

サブルーチン2

メインルーチンサブルーチン4

返却ボタンの処理開始

飲み物ボタンの処理
No

No
商品がある
No
売切れランプOn

お金が投入される
Yes

売切れランプの処理

返却ボタンが押された
Yes
お金が投入されている
Yes

No
お金投入の処理

飲み物ボタンが押される
Yes
お金が100円入っているYes

サブルーチン3
お金投入の処理NoNo

お金が投入される
Yes

金額をxxx円にする

戻る

戻る
飲み物缶を出す

お金を返却する

金額をxxx円にする

6

返却ボタンの処理
返却ボタンの処理

サブルーチンの終わりは「戻る」

売切れランプの処理

金額を0円にする。
飲み物ボタンの処理

NoNo

飲み物ボタンが押される
Yes
お金が100円入っている
Yes
飲み物缶を出す

フローチャートが複雑になってきたら、サブルーチンを使いましょう。これは、を使って、フローチャートを分けることができます。サブルーチンに対して、大元のものをメインルーチンと呼びます。

お金投入の処理

売切れランプの処理

人間は沢山の情報をいっぺんに扱うことができません。そこでチャンクという個別の情報の塊にして扱います。

サブルーチン3
つり銭切れを入れた場合

戻る

戻る

7

サブルーチンをもっと作るとメインルーチンがもっとすっきりします。こうすると、この時点の自動販売機のプログラムは1つのメインルーチンと4つのサブルーチンから構成されます。
また、つり銭切れの機能を入れる時は、とりあえず、お金の投入にサブルーチンを入れておいて、後で中身を考えることもできます。

No

お金が投入される
Yes

金額をxxx円にする
つり銭切れの処理

戻る

8構造化設計で考えてみる
ほぼ本物に近くなった自動販売機
上のモジュールが下のモジュールを利用している

お金を入れる前から「つり銭無」のランプがついていることがありますね。

3つの処理がループになっていることを表す

自動販売機

①
売切れランプの処理をする。

返却ボタンの処理をする。

お金投入後の処理をする。

120円
円

返却

売り切れ

つり銭なし

ほぼ本物に近い機能の販
売機のプログラムを構造化設計で考えてみましょう。

飲み物ボタンの処理する。
金額 0000①
つり銭切れの処理をする。

①につながって、「売切れランプ…」を利用
ほぼ本物に近い自動販売機
・硬貨と1000円札の使用が可能
・商品は1つだけ・商品切れランプは有り
・お金返却ボタンは有り
・つり銭切れランプは有り
・お金を入れて一定時間たったら自動的にお金返却有・製品を購入して、残りのお金が少なかったら自動的に有り

フローチャートはコンピュータのプログラムを設計する一つの手法ですが、あまり大きなプログラムには向いていません。現在では多くの設計手法がありますが、構造化設計は古いものですが、手軽に利用できます、また現在の設計手法の考え方のベースになっています。
フローチャートは処理の流れを中心に考えますが、構造化設計はモジュール(サブルーチン)の構造や関係を中心に表現します。この構造を考えると上図のようにシンプルなものになります。
910

参考図書:ソフトウェアの複合/構造化設計,G.J. マイヤーズ(1978)

解答例:
解答例 自動販売機のモジュール構成を構造化設計で考えてみる
ほぼ本物の自動販売機
自動販売機
売切れランプの処理
Yes
120円
円

開始時の処理をする。

お金投入後の処理をする。

返却ボタンの処理をする。

飲み物ボタンの処理する。

投入後の時間を監視する。

売り切れ120円
円
売り切れ120円
円
売り切れ120円
円
売り切れ

売切れランプ1On
金額 0000①
お金の確認をする。

商品が2あるNo②

売切れランプ2On③返金する。

①

飲み物缶を出す。

Yes

金額表示をする。

いままでと違って、複数の商品を扱えるようになれば、ほぼ本物の自動販売機ですね。
但し、個々の商品に対して処理を繰り返す必要が出てきます。売切れランプの処
理を単純に複数商品対応にすると右図のようになります。構造化設計でも同じですが、もっと簡略した方法を次にみましょう。

①
つり銭切れの処理をする

Yes

②①③ ②

売切れランプの処理をする。

商品1がある
No

返却
つり銭なし

投入開始タイマ処理をする。

はフローチャートのと同じ意味を持ち、特定の条件の時に下位のモジュールを利用します。

商品3があるNo
売切れランプ3On
Yes
商品3があるNo
売切れランプ4On
戻る

1112解答例:
解答例 自動販売機のモジュール構成を構造化設計で考えてみる
演習:
演習 身の回りの機器のしくみを考える。
「お金投入後の処理をする」「返却ボタンの処理をする」「投入後の時間を監視する」
は同じなので、ここでは省略しています

自動販売機開始時の処理をする。

お金投入後の処理をする。

返却ボタンの処理をする。

飲み物ボタンの処理する。

投入後の時間を監視する。

身の回りにはいろいろな道具や機械があります。現在では、多くのものがコンピュータ(マイコンxxxは絶対コンピュータ入っています)を内部に持ち、そのプログラムで動いています。
ここでは、身のまわりの機材を1つ選んで、その仕組みをフローチャート又は構造化設計で表現してみてください。

①
身の回りの機材の例:
・プリクラ
・携帯電話/スマホの電話機能
・カーナビ
・テレビ…..など

商品番号①
1の飲み物ボタンを処理する

つり銭切れの処理をする

売切れランプの処理をする。

返金する。

商品番号

飲み物出す。

商品番号

1つの売切れランプの処理同じような処理が繰り返し必要な場合は、まず、1個づつ処理するモジュールを定義することがポイントになります。また、上位のモジュールからどの対象を処理したらいいかの情報を渡してやる必要があります。
構造化設計では、上記のようにして情報を表します。

自動販売機さん、いつもご苦労様です13

何気ない自動販売機でも、中身は結構複雑ですね。

15

14