火曜日3,4限

環境建設計算機実習



アルゴリズムの基礎(FORTRAN演習)  条件判断と分岐


 プログラムを作成していると、計算結果の符号や2つの式の値の大小関係によって別々の処理をしたり、その後また流れを1つにまとめて、以後の処理を続けるというように、条件判断をおこないその後の処理を変更することがよくある。ここでは、条件判断により処理内容を変更する方法を学習する。以下に学習項目について記す。

  1. プログラム作成前に考えをまとめるのに使用される流れ図(フローチャート)について学習する。
  2. 条件判断時に必要となる論理演算子について学習する。
  3. 条件判断(IF)と処理の分岐(THEN)をしたり、計算の流れを飛越し(GO TO)をおこなう方法について学習する。

 

 

  1. 流れ図(フローチャート)
  2. 計算機で問題を処理するには、どういう問題のもとで考えるのか、どんなデータに対してどんな答えを出したらいいのか十分に吟味する必要がある。そこで、考えを整理したり明瞭にする等の為に開始から終了までのおおよその処理の流れ図(フローチャート)を作成する。おおまかなフローチャートが完成したら、次に解に達するまでのアルゴリズムを詳細に記述し、フローチャートを完成させる。


    流 れ 図 記 号 の 例

     

  3. 論理演算子

論理演算とは、データ間の論理的な関係と取り扱う計算である。その結果は「真」か「偽」のどちらかで表現される。FORTRANでは、論理演算や複素数に関する演算も容易に行えるようになっている。

2つの算術式または文字式の値を比較するのに用い、評価した結果は、真または偽の値をもつ論理型になる。論理式の中にしか記入はできない。また、関係演算子の間に優先順位はない。

関係演算子

.GT.

大きい

a > b であれば真、そうでなければ偽

.GE.

大きいか等しい

a = b であれば真、そうでなければ偽

.NE.

等しくない

a |= b であれば真、そうでなければ偽

.EQ.

等しい

a = b であれば真、そうでなければ偽

.LE.

小さいか等しい

a <= b であれば真、そうでなければ偽

.LT.

小さい

a < b であれば真、そうでなければ偽

 

※算術式の値と文字式を比較してはならない。

論理式は論理演算を表現するのに用い、評価した結果は、真または偽の値を持つ論理型になる。

論理演算子

.NOT.

否定

.NOT. b

真が真ならば偽、bが偽ならば真

.AND.

論理積

a.AND.b

a,bがともに真のときのみ真、それ以外は偽

.OR.

論理和

a.OR.B

a,bがともに偽のときのみ真、それ以外は真

.EQV.

論理等価

a.EQV.b

a,bがともに真かともに偽のとき真、それ以外は偽

.NEQV.

論理非等価

a.NEQV.b

a,bがともに真かともに偽のとき偽、それ以外は真

※優先順位は上が高い(例:NOTが一番優先順位が高い)

 

3.IFブロック

ブロックIF文は一般にIF (b) THEN
と書き、END IF文と対にして、条件によって次におこなう処理を与えるために持ちいる。 また、必要に応じて、ELSE IF文と共に用いる。Bは理論式である。Bが真のとき、このブロックIF文のブロックを実行し、対応するEND IF文に行く。bが偽のとき、対応するEND IF文の手前にELSE文(又はELSE IF文)が存在するならば、それらに続く文(ELSE ブロック又はELSE IFブロック)を実行する。もし存在しなければ、何も実行しないで、END IF文に進む。

図 IFブロックの例

4.プログラム例

大きい値と小さい値

n個のデータX1,X2,X3...,Xnと定数aが与えられているとき、Xi>=aであるものの個数を求めなさい。

考え方
定数aのためにKUGIRI,a以上のデータの個数とaより小さいデータの個数を数えるために、それぞれ、DAI.SHOを用いる。初めにKUGIRIに値aを読み込み、DAI,SHOには初期値として0を入れる。データXiを1個読み込む度に、Xi>=aであればDAIに1を加え、Xi<aであればSHOに1を加える。これをデータが終わるまで繰り返す。

 

流れ図(フローチャート)

 

プログラム例


データの終わりを示すには、そのことを意味する特別な記号、例えばCNTRL-D(CNTRLキーを押しながらDキーを押す)を入力する。この記号をファイル終了記録、またはエンドマークとよぶ。

※プログラムのコンパイルと実行はUNIXの基礎、プログラムの実行手順を参考にすること


プロセスの管理・確認
プログラムを作成していると、不要なプロセスがバックグラウンドに残っている 場合がある。OSの不調やCPUへの不必要な負荷となるので、こまめに確認をし、不要なプロセスはkillして終了させる。


質問・意見等
    940-2188 新潟県長岡市上富岡町1603-1 長岡技術科学大学 環境・建設系
    環境・建設計算機実習T 一部担当
    犬飼 直之 (内線 9624) inu@nagaokaut.ac.jp

GLESCO
( GLobe, EStuary and COast )

Copyright
Hydrauric Engineering Lab. Nagaoka University of Technology