AOBA's Information Processing Education
1997/11/23
注意1:このページは、回線を切断した後でゆっくりご覧になってください(テキストを印刷する場合は、その取り扱いに注意してくださるようお願いします)。
注意2:背景が白地の画面を長時間見つめていると頭が痛くなってしまいますので、ここは背景をグレーにしています。
先週まででプログラム流れ図(以下流れ図)の”処理”と”判断”を学習しました。プログラムらしい処理を作るには、この他に今週行う”繰り返し”を理解する必要があります(これをプログラムの基本3構造といいます)。
まずは以下の二つの図を見てください。これらはどちらも、MにNをかけた値をAに求める流れ図です(Nは正の整数と仮定。なお通常はこんな面倒なことをしなくても、M*N→Aでいいのですが)。
![]()
(注)直感的には図1の方が分かりやすいと思います。もちろんこれはこれで正しい流れ図なのですが、現実は図2の書式を要求されますので、図2の書式で覚えてください。
これらの流れ図は、MをN回加算することによってM*Nの値を求めています。例えば、M=6,N=3の場合は6+6+6を行うことでAに18を得ます。分かりましたか?。
では図1に注目してください。図1には判断がありますね。ここでiとNを比較して、i=Nになった時に流れ図が終了します。
もしi≠Nならば”M+A→A”と”i+1→i”の処理を行った後、前方(つまり判断の部分)に戻り、再度判断を行います。つまりi=Nになるまで何回も同じ処理を行います。これが”繰り返し”です。
以下の表に、判断時点における変数の内容の遷移(M=6,N=3の場合)を示しますので、これを参考にして考えてみてください。
i N A 判断(1回目) 1 3 6 判断(2回目) 2 3 12 判断(3回目) 3 3 18 判断(3回目)でi=N(3=3)になって繰り返しを脱出し、その時のAの値は期待通り18です。
さて次に図2の説明です。
図2も図1と書式が異なるだけで行っている処理は図1とまったく同じです。つまり2つの台形(本当は六角形ですが、台形ということにしておきます)の間に挟まれたところが繰り返し処理の部分で、台形の中で示す条件(ここではi=N)が繰り返しの脱出条件(繰り返しを抜ける条件)です。
また台形の中に”計算”と書いてありますが、ここは繰り返しの部分で行っている処理を書けばなんでもよく、特にこれといった規定はありません(自由です)。
なお、図2では繰り返しの中はすべて”処理”でしたが、”判断”があってもかまいませんし、さらに”繰り返し”があってもかまいません。(参考)図2は繰り返しを脱出するかどうかの判定を、繰り返しの前で行っていますが、繰り返しの後で行うこともできます。その場合はその脱出条件を下の台形の中に書きましょう(図3と図4を参照)。
![]()
「演習」
以下は、1〜Nまでの数を累積し(1+2+3+...+N)、その結果を変数Aに求める流れ図である。空欄を埋めて流れ図を完成させよ(例えばNが10の場合はAの値が55になる)。
![]()
演習の解答 空欄 i + A → A (A + i → Aでも可)
最終的な結果を変数Aに求めるのに、問題の流れ図中では最初に1を代入したきり変数Aの変化がありません。すると空欄は変数Aに対する代入処理であることが分かります。
また変数Aは数を累積しなくてはなりませんので、”●+A→A”というような処理になるはずです。空欄の直前の処理でiをカウントアップしており、これとAを加算することで期待する結果が得られます。
したがって求める答えは”i + A → A”です。
流れ図の基本は”処理”,”判断”,”繰り返し”だけです。Prolog等の論理型言語でない限り、どんなプログラム言語を用いてプログラムを作成しても、この三つさえきちんと理解していればプログラムを作成するのは難しいことではありません(ホントか?)。すべてのプログラムは、この三つが何重にも積み重なったものと考えて結構です。
プログラムなんてみんなが考えるより、ずっと単純なものですよ。ではまた来週。