実験物理と計算機

3学期 Fortran Tips 2

参考書
Unix計算機を使った物理学実験」(新井/板倉)
第2章、変数の周辺 戻る 次へ

2-1、FORTRANの変数の種類

構造としては
に分類される。
型としては
に分類される。
FORTRANの変数は必ず<特定の構造と型>を持つ。

2-2、変数の構造とその定義

スカラー

  1. スカラー量を表す
  2. 整数型や実数型の変数は、プログラムの任意の行で定義/設定できる
    変数名に関する暗黙の取り決めに従う!
  3. 複素数型、文字型、論理型はプログラムの先頭部分で定義する
    最初の実行文以前;COMPLEX文、CHARACTER文、LOGICAL文

配列

  1. ベクトル/テンソル量(多次元/多数成分を持つ量)を表す
  2. 次数に対応した添字(整数)を持つ
  3. プログラムの先頭部分(最初の実行文以前)で定義
    最初の実行文以前;DIMENSION文、COMPLEX文、CHARACTER文、LOGICAL文

2-3、変数の型とその定義

整数型

  1. 整数値を格納する変数
  2. 暗黙の取り決め
    変数名がI〜Nで始まる場合、自動的に整数型となる
  3. プログラムの先頭部分で定義
    INTEGER I, J
    INTEGER K(10,10), L(100)
    DIMENSION M(1000)

実数型

  1. 実数値を格納する変数
  2. 暗黙の取り決め
    変数名がA〜H、O〜Zで始まる場合、自動的に実数型となる
  3. プログラムの先頭部分で定義
    REAL X, Y
    REAL U(10,10), V(100)
    DIMENSION R(1000)

複素数型

  1. 複素数値を格納する変数
  2. プログラムの先頭部分で定義
    COMPLEX C, D
    COMPLEX E(10,10), F(100)

文字型

  1. 文字を格納する変数
  2. プログラムの先頭部分で定義
    CHARACTER*80 LINE1, LINE2

論理型

  1. 論理値("真"または"偽")を格納する変数
  2. プログラムの先頭部分で定義
    LOGICAL T, F

2-4、変数の値の設定

DATA文で設定

  1. 設定する前に変数を定義する
  2. プログラムの先頭部分で設定
    INTEGER COUNT(3)
    DATA COUNT/ 0, 100, 1/

=文で設定

  1. 左辺:変数
  2. 右辺:参照値
    定数、他の変数の値、それらを用いた計算結果を参照
    計算のいろいろ(2項演算)
    加減乗除(+, -, *, /)、巾乗(**)、剰余(%)、その他
    計算のいろいろ(標準関数)
    三角関数(sin, cos, tan)、平方根(sqrt)、 対数関数(alog)、指数関数(exp)、その他
  3. プログラムの任意の場所で設定
    INTEGER COUNT(3)
    ...
    ...
    COUNT(1)=0
    COUNT(2)=100
    COUNT(3)=1

2-5、変数のスコープ(有効範囲)

一般の変数

  1. 各構成単位の内部でのみ有効
    メインプログラム、サブルーチン、関数はそれぞれ独立の変数空間を持つ
  2. 同じ名前でも所属する構成単位が違えば、全く異なる変数

引数

  1. サブルーチンや関数を呼び出すときに引き渡す変数
  2. 呼び出し側の変数と一時的に同一になる「変数の窓」
    サブルーチンや関数の中で引数の値を変えると、対応する呼び出し側 の変数も変わる!
  3. 引数と呼び出し側の変数は構造と型を同一にする

  4. PROGRAM MAIN
    ...
    ...
    CALL ADD(A, B, S)
    ...
    ...
    END
    SUBROUTINE ADD(X, Y, Z)
    Z=X+Y
    RETURN
    END

共通変数

  1. COMMON文によって定義された変数
  2. 各構成単位の間で共用できる
    各構成単位毎に、先頭部分で必要な共通変数を定義する
  3. COMMONブロック名が同じであれば、変数名は異なっていてもよい

  4. PROGRAM MAIN
    COMMON /ADD/ A, B, S
    ...
    CALL ADD()
    ...
    ...
    END
    SUBROUTINE ADD()
    COMMON /ADD/ X, Y, Z
    Z=X+Y
    RETURN
    END