Fortran - 変数と定数

Fortranのデータ型には次のものがあります。

整数型 ( INTEGER)、浮動小数点型 ( REAL)、文字型 ( CHARACTER)、複素数型 ( COMPLEX)、論理変数 ( LOGICAL)
参考書: Peng Guolun. Fortran 95 Programming


Fortran では、変数を宣言するときに注意を払う必要があります。

  1. 変数名のプレフィックスは必须英字で、変数名には文字、アンダースコア、および数字を含めることができます。
  2. 変数名の長さ. Fortran 90 以降では、変数名は最大 31 文字をサポートしますが、Fortran 77 では最大 6 文字をサポートします。
  3. 変数名は、Fortran 実行コマンドと同じ名前にすることはできません。また、主プログラムまたは宣言された変数と同じ名前にすることもできません。
  4. Fortran で書かれている不区分大小ため、abc、ABC、および aBc はすべて同じ意味を持ちます。

変数

整数型 (INTEGER)

整数は、名前が示すように、整数を格納するために使用されます. C 言語ではint整数が宣言され、Fortran ではinteger整数が宣言されます。

1) 整数の宣言

integer a
A=10

の:

  • integer は整数型を表し、a は整数変数を表します
  • Fortran では大文字と小文字が区別されないため、a と A は同じ変数に対応します。

2) 長整数と短整数

整数型はさらに長整数と短整数に分けられ、それぞれの宣言方法は次のとおりです。

長整数:

integer(kind=4) a  !Fortran 90
INTEGER*4 b        !Fortran 77
INTEGER(4) C       !Fortran 77

短整数:

integer(kind=2) a  !Fortran 90
INTEGER*2 b        !Fortran 77
INTEGER(2) C       !Fortran 77

ここでの 4 と 2 は、それぞれ 4 バイトと 2 バイトのスペースを占有する長整数と短整数に対応します。サイズを宣言するときにサイズをバイト単位で指定しない場合、コンパイラは通常、デフォルトで長整数を使用します。

3) 複数の変数を一度に宣言する

C 言語と同様に、Fortran が同じ型の複数の変数を同時に宣言する場合、変数は逗号で区切ることができます。

integer a,b,c

上記の宣言方法に加えて、Fortran 90 は型 first の後に書き込み::、変数名を宣言することもできます。

integer :: a

**注:** C 言語と同様に、Fortran で 2 つの整数変数を除算する場合、結果に小数部分が含まれる場合、小数部分は省略され、整数部分の計算結果のみが保持されます。


浮動小数点数 (REAL)

C 言語では float と double を使用して単精度型と倍精度型を格納しますが、REAL は Fortran で浮動小数点数を表すために使用され、精度の異なる 10 進数は KIND 値を変更することによって格納されます。

1) 単精度浮動小数点数

real(kind=4) a 
real*4 b
real(4) c

2) 倍精度浮動小数点数

real(kind=8) a
real*8 b
real(4) c

3) 浮動小数点数の有効桁数

program test1
    	implicit none
    	integer(kind=4) a,b  
    	a=100000
    	b=0.1
    	write(*,*) a+b
    	pause
end program test1

上記のコードでは:

  • a=100000、b=0.1、a+b の結果は 100000.1 のはずですが、テスト結果は 100000 です
  • これは a と b が 4 バイトだからです. コンピュータは浮動小数点数を科学表記法で格納します. 単精度浮動小数点数の有効桁数は 6 桁です. 科学表記法に変換すると 6 桁を超える数字は無視されます.
  • 上記のコードの「kind=4」を「kind=8」に変更すると、正しい答えが得られます。倍精度浮動小数点数の有効桁数は 15 桁です。

さらに、Fortran には、三角関数などの複雑な数学関数がいくつかあります: sin、cos、tan. Fortran の三角関数で使用される単位は です。これは、ほとんどのプログラミング言語に当てはまります弧度パラメータを三角関数に渡す場合、受信パラメータは整数であってはならず、sin の結果は整数として受信されるべきではありません。これにより、小数部分が省略されるためです。

三角関数演算の例:

program test2
        implicit none
        real :: x,y
        x=3.1415926/2
        y=sin(x)
        write(*,*) "sin(",x,")=",y
end program test2

Fortranでの累乗計算を**使って計算したり、べき乗の数を小数に変えて根にしたり、sqrt関数を使って計算したりできます

平方根の例:

program test3
         implicit none
         real :: a=100
         write(*,*) "2^3=", 2**3
         write(*,*) "sqrt(",a,")=", sqrt(a)
         write(*,*) "sqrt(",a,")=", 100**0.5
end program test3

結果は次のとおりです。

2^3= 8
平方根 ( 100.000000 ) = 10.0000000
平方根 ( 100.000000 ) = 10.0000000


複数 (COMPLEX)

Fortran は複素数を提供するまれな言語です. Fortran では, 実部と虚部を格納するために 2 つの浮動小数点数が使用されます. したがって, 複素数も 単精度 と 倍精度 に分けられます.

1) 複数形の宣言:

complex aまたcomplex :: a

同様に、kind複素数が単精度か倍精度かを値で制御するには、次のメソッドを使用します。

!单精度
complex(kind=4) a   !fortran 90
complex*4  a        !fortran 77
complex(4) a  	    !fortran 77
!双精度
complex(kind=8) a   !fortran 90
complex*8  a        !fortran 77
complex(8) a  	    !fortran 77

複素数の割り当て方法:a=(x,y)、たとえば: をa=(1.5,1.0)意味するa=1.5+1.0i; 複素数に 3 つの浮動小数点数が必要であることを理解するのは難しくありません。

2) 複素数の計算例:

program test4
		complex :: a,b
		a=(1.0,1.0)
		b=(2.0,-1.0)
		write(*,*) a,"+",b,"=",a+b
		write(*,*) a,"*",b,"=",a*b
end program test4

結果は次のとおりです。

( 1.00000000 , 1.00000000 ) + ( 2.00000000 , -1.00000000 ) = ( 3.00000000 , 0.00000000 ) ( 1.00000000
, 1.00000000 ) * ( 2.0000000 0 , -1.00000000 ) = ( 3.00000000 , 1.00000000 )


文字と文字列 (CHARACTER)

Fortran では大文字と小文字が区別されませんが、文字列の内容では大文字と小文字が区別されます。たとえば、"Hello World!" と "hello world!" は 2 つの異なる文字列です。

次のように、len文字列のサイズを制御できます。

1) 文字と文​​字列の宣言

character a !单个字符a
character(len=10) a !用于存放十个字符 90写法
character*=10 a      !77写法
character(10) a

2) 文字列の割り当て

  1. 二重引用符による代入 (Fortran 90 表記)
a="Hello World!"
a="每天都要学习""Fortran"""

二重引用符を使用して文字列をカプセル化する場合、二重引用符を出力する場合は、2 つの二重引用符を使用する必要があります""

  1. 一重引用符による代入 (Fortran 77 の記述)
a='Hello World!'
a='每天都要学习''Fortran'''

同様に、文字列をシングル クォーテーションでカプセル化する場合、シングル クォーテーションを出力したい場合は、シングル クォーテーションを 2 つ続けて使用する必要があります。''

3) 文字列の指定内容を変更する

文字列への直接代入に加えて、Fortran は文字列内の特定の位置の内容の変更もサポートしています。

例えば:

program test5
		character(len=20) a
		a="I love you!" 
		write(*,*) a
		a(3:6)="hate"
		a(11:11)"?"
		write(*,*) a
end program test5

愛してます!

あなたが嫌い​​です?

このうち、 はa(3:6)="hate"3 文字目から 6 文字目までの内容を toヘイトに変更することを意味し、a(11:11)"?"11 文字目のみクエスチョン マークに変更することを意味します。

4) 文字列追加

デジタル的な意味での弦の相加追加ではなく、2本の弦を前後につなぎ合わせています。

文字列加算形式:arr=A//B、例は次のとおりです。

program test6
		character(len=6) a
		character(len=10) b
		character(len=20) c
		a="Hello" 
		b="World!"
		c= a//b
		write(*,*) c
end program test6

**次の点に注意してください:** 文字列abここにはスペースはありませんが、印刷結果にはHello World! スペースが含まれています. これは、aの長さが 6 であり、文字列がHello5 文字しかないためです. スプライシング時に、 more の場所はスペースで表示されます。//最初の文字列が最大文字数に応じて大まかに接続されることは容易にわかります。

5) 文字列に関する機能

関数 例証する
文字(数値) num は整数でなければなりません。ASCII コード値に対応する文字を返します
チャー 文字 char に対応する ASCII コード値を返します
len(文字列) 文字列 string の宣言された長さを返します。戻り値は整数です
len_trim(文字列) 末尾のスペースを削除した後の文字列の実際の長さを返します
インデックス(文字列,キー) 文字列とキーはどちらも文字列であり、文字列キーが文字列で最初に現れる位置を見つけるために使用されます
トリム(文字列) 末尾のスペースを削除した後の文字列 string を返します。残りの文字列の内容は

例:

program test7
        character(len=20) a="hello world!   "
        write(*,*)"ASCII码97的字符是:",char(97)
        write(*,*)"a的ASCII码值是:",ichar('a')
        write(*,*)"a的长度是:",len(a)
        write(*,*)"a的实际长度:",len_trim(a)
        write(*,*)"word第一次出现位置是:",index(a)
        write(*,*)"a去掉尾端空格后的内容:",trim(a)
end program test7

印刷結果は次のとおりです。

ASCII コード 97 の文字: a
a の ASCII コード値: 97
a の長さ: 20
a の実際の長さ: 11単語
の最初の出現位置: 7
a: ハローワールドの終わり

デフォルトのフォーマットが使用されるため、印刷結果は少し見苦しくなります。


論理変数 (LOGICAL)

論理変数は主に論理判定に使用され、.true.論理変数.false.は 1 バイトしか占有しないため、論理変数の空間サイズを種類で設定することもできますが、実際にはほとんど意味がありません。

論理変数宣言:logical a

論理変数を設定する方法は次のとおりです。

program test7
		implicit none
		logical a
		a=.true.
		write(*,*) a
		a=.false.
		write(*,*) a
end program test7

write を使用して論理変数を出力すると、T次のいずれかのみが表示されますF

T
F


絶え間ない

定数の宣言方法

フォーマット:parameter(变量名=变量值)

例えば:

real pi
parameter(pi=3.1415926)

Fortran90 では、パラメータは形容詞として使用でき、変数宣言と一緒に記述できます。

real,parameter :: pi=3,1415926

なお、変数の前のコロンは省略できず、コロンは形容詞が記述されていることを示します。

定数を設定する利点

  1. 定数に設定された値を保護する
  2. プログラムの実行速度を上げます。変数を使用する場合: CPU は最初にそのメモリ位置から値を取り出し、次に使用するために CPU のレジスタに入れます。定数を使用する場合、実行中に数値をバッファに直接書き込むことができるため、変数データをメモリから「キャッチ」する時間を節約できます。

変数の初期値を設定する

上記では、変数値を設定する例がありました。詳細な分析は次のとおりです。

変数の内容は、プログラムの実行時に設定する必要はありませんが、宣言時に割り当てることができます。Fortran90 では、宣言時に変数に値を直接代入することが許可されていますが、中間のコロンは省略できません。たとえば、次のようになります。

integer :: a=10
real    :: b=10.5
complex :: c=(1.0,2.0)
character(len=20) :: d="hello world!"

Fortran 77 では DATA コマンドを使用して初期値を設定しますが、この方法は面倒ですが、この文言の意味を理解する必要があります。

integer a
real b
complex c
character*(20) d
DATA a.b.c.d /10,10.5,(1.0,2.0),'hello world!'

DATAコマンドは、変数の順番に従って一気に値を代入します。


同等性ステートメント

2 つ以上の変数を入れて、メモリ アドレスを使用するように宣言することは、同等の宣言です。

同じメモリブロックを使用するため、1 つの変数の値を変更すると、他の変数の値も変更されます。

同等の宣言形式:equivalence(a,b)

等価宣言の利点:

  1. メモリの節約: 同じ同等の宣言内の変数は、同じメモリ ブロックを占有し、同時にその内容を変更します。この関数は、メモリ使用量を節約するために一時的に使用される変数を宣言できます。
  2. arr簡略化されたコード: 配列の特定の値を複数回使用する必要がある 3 次元配列があると仮定すると、この値は変数 a と同等であると宣言し、コードを記述するときに a のみを呼び出す必要がありますequivalence(arr(1,1,5),a)

プログラムで宣言された構造体

宣言の位置は、プログラムコードの実行可能記述の前に置く必要があり、プログラムが数値計算や入出力コマンドを表示し始めると、変数は宣言できなくなります。

宣言部分のプログラムコードをコンパイルすると、マシンコードは生成されません。このステートメントは、プログラムが使用するメモリ領域を予約するようコンパイラに要求するためにのみ使用されるため、実行可能な記述とは見なされません。

DATA コマンドを使用する場合、DATA も宣言の一部であり、コマンドを実行する前にのみ配置できます。また、初期値を設定する変数については、最初にその型を宣言することをお勧めします。

おすすめ

転載: blog.csdn.net/why1472587/article/details/128556135