火曜日3,4限

環境・建設計算機実習T


アルゴリズムの基礎(FORTRAN演習)

配列の概念



CONTENTS

    1.変数の限界

    2.配列の考え方

    3.配列の効用

    4.配列を用いたプログラム例

    5.前のページに戻る




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

 

    1.変数の限界

 配列の説明に入る前に簡単な問題を考える。6名の生徒に対して行われた国語と数学の試験の結果が、一人当たり1行分のデータとして入力されるとする。この場合、各受験生の合計得点を求めるプログラムは次のように記述される。

      program test1
      do 10 i=1,6
        read(5,*) a,b 
        t=a+b
        write(6,*) t
   10 continue
      stop
      end

      program test1
      do i=1,6
        read(5,*) a,b 
        t=a+b
        write(6,*) t
      end do
      stop
      end

図-1 各自の合計得点を求めるプログラム

 このプ ログラムにおいては、国語と数学の結果(データ)を受け入れる変数A,Bの内容は、一人分のデータを処理して終り、次のデータの処理に入ると消去され、保 存されない。したがって前回までの知識で、全てのデータを読み込み、最後の段階で6名の受験者に対する国語と数学の平均点を求めるようなプログラムを作成 しようとすると、次のように記述しなければならない。

      program test2
      read(5,*) a1,b1 
      read(5,*) a2,b2 
      read(5,*) a3,b3 
      read(5,*) a4,b4 
      read(5,*) a5,b5 
      read(5,*) a6,b6 
      h1=(a1+a2+a3+a4+a5+a6)/6
      h2=(b1+b2+b3+b4+b5+b6)/6
      write(6,*) h1,h2
      stop
      end

      program test2
      read(5,*) a1,b1 
      read(5,*) a2,b2 
      read(5,*) a3,b3 
      read(5,*) a4,b4 
      read(5,*) a5,b5 
      read(5,*) a6,b6 
      h1=(a1+a2+a3+a4+a5+a6)/6
      h2=(b1+b2+b3+b4+b5+b6)/6
      write(6,*) h1,h2
      stop
      end

図-2 各教科の平均点を求めるプログラム

 受験者が増加した場合、このプログラムでは増加人数分の国語と数学の結果に対して、変数を増加させなければならず、プログラム行が増加し、且つ見にくくなる。また、減少する場合には、変数を減らさなければならない。

 このように変数だけを用いている限り、受験者の増減に従って常に変数が増減しなければならず、実用的ではない。

 

2.配列の考え方

 前項で述べたような困難を解決する手段としてFORTANには配列が 用意されている。配列は、数学におけるベクトルやマトリックスの考え方と基本的には同じである。ベクトルやマトリックスは数量(スカラー)を各々列(1次 元)の形式及び表(2次元)の形式に並べたものである。それぞれの数量は列や表の要素として取り扱われ、その要素の集合にはベクトル名やマトリックス名が 付けられ、その名前は当該集合を代表している。

 配列はこのようなベクトルやマトリックスの考えに立脚している。1つの記憶場所を1つの要素とし、それらの要素を1次元、2次元あるいはそれ以上の次元に並べたものの集合が配列である。配列には配列名が付けられる。また、配列の要素は特に配列要素と呼ばれる。

 ベクトルやマトリックスの要素は、要素の右下にサフィックスを付けて区別するが、配列要素も同じ方法で区別する。配列ではサフィックスを添字と呼び、並 びの順を示す数字をカッコでくくったものである。個々の配列要素には配列要素名が付けられているが、配列要素名は配列名に添字を付加したものである。個々 の配列要素は変数と全く同じ働きをするので、”添字付き変数”と呼ぶこともできる。

 

 

3.配列の効用

 変数で は、その変数名を個別に記述することによって1つ1つの記憶場所を確保するのに対し、配列では、ただ1つの配列名とその大きさを宣言するだけで、必要な数 の記憶場所を一度に確保ができる。処理データの件数が増加した場合には、配列名はそのままとし、配列の多きさを宣言し直せば、更に新たな記憶場所を確保す ることができる。また、変数では記憶場所は個々に確保されるが、配列では一個所にまとまって確保され、その記憶場所は添字の順に並んでいる。このため、配 列とDO分を併用すると、強力なプログラムが作成可能となる。

 

 

 

4.配列を用いたプログラム例

配列の詳しい説明に入る前に、配列を用いたプログラムの例を紹介する。

 今回の演習の初めに述べた科目の平均点を求めるプログラムTEST2で、受験者数を6名から100名までの任意の数の受験者に拡張してみる。変数 A1,A2,A3…および変数B1,B2,B3…にそれぞれ取って代わる配列要素をA(1),A(2),A(3)…およびB(1),B(2),B(3)と すれば、用いる配列名はAとBである。そこで、プログラムTEST2は次のように書き換えることができる。なお、2行目の文の意味については後述する。ま た、6行目の算術代入文では受験者の数を数えている。

          program test3
          dimension a(100),b(100)
          h1=0
          h2=0
          kos=1
    c
          write(6,*) ' input data kos'
          read(5,*) kos
    c
          do 10 i=1,kos
            write(6,*) 'a(',i,')=?'
            read(5,*) a(i)
            write(6,*) 'b(',i,')=?'
            read(5,*) b(i)
       10 continue
          do 30 i=1,kos
            h1=h1+a(i)/kos
            h2=h2+b(i)/kos
       30 continue
          write(6,*) ' A no heikin=',h1,' B no heikin=',h2
          stop
          end
    

          program test3
          dimension a(100),b(100)
          h1=0
          h2=0
          kos=1
    c
          write(6,*) ' input data kos'
          read(5,*) kos
    c
          do i=1,kos
            write(6,*) 'a(',i,')=?'
            read(5,*) a(i)
            write(6,*) 'b(',i,')=?'
            read(5,*) b(i)
          end do
          do i=1,kos
            h1=h1+a(i)/kos
            h2=h2+b(i)/kos
          end do
          write(6,*) ' A no heikin=',h1,' B no heikin=',h2
          stop
          end
    

    図-3 各教科の平均点を求めるプログラム例
    (配列使用)



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


    前のページに戻る


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

GLESCO
( GLobe, EStuary and COast )

Copyright
Hydrauric Engineering Lab. Nagaoka University of Technology