6章:構造型とポインタ
6.1 構造型
ここでは、構造型について説明する。構造型を使用すると、型が異なる複数の変数を一括して扱うことができる。
6.1.1 構造型の定義と宣言
構造型の定義
構造型は以下のように定義する。
TYPE 型名
宣言1
宣言2
・・・
END TYPE 型名
■型名
型名の付け方は通常の変数名と同じである。
■ 宣言1,宣言2,・・・
個々の要素(成分)の定義。構造型の中に構造型を含めることも可能である。
(例)
ユーザー情報を管理するための構造体USERの定義
TYPE USER
CHARACTER(20) :: USERNAME
CHARACTER(8) :: PASSWORD
INTEGER :: ID
END TYPE USER
上記以外の有用な例として、光の三元素(R, G, B)や座標(X, Y, Z)、表示ウィンドウ情報(表示位置、大きさ等)などがある。
構造体の宣言
構造体は以下のように宣言する。
TYPE (型名) :: 変数名1, 変数名2・・・
■型名
あらかじめ定義した構造型の型名。
■変数名
変数名の付け方は通常の変数名と同じである。
(例1)
上で定義した構造型を利用して、構造体DEFAULT_USERを宣言する
TYPE (USER) :: DEFAULT_USER
(例2)
上で定義した構造型を利用して、構造体MYUSER(1)〜MYUSER(10)を宣言する
TYPE (USER) :: MYUSER(1:10)
6.1.2 演算
ここでは、構造体を用いた演算について説明する。構造体そのものの演算と、各成分の演算とが存在するので注意が必要である。
(例1)
MYUSER(1)に定数を代入する
MYUSER(1) = USER(‘SUZUKI TARO’, ‘MYPASSWD’, 1234)
(例2)
MYUSER(2)のPASSWORDを変更する
MYUSER(2)%PASSWORD = ‘FORGETIT’
(例3)
MYUSER(3)をDEFAULT_USERに指定する
DEFAULT_USER = MYUSER(3)
例3のような代入を行う場合、2つの構造体は同じ型である必要がある。
■構造体の演算例
(例)年齢、身長、体重を表示する。
PROGRAM KENKOU_SHINDAN
TYPE JOUHOU
INTEGER NENREI,SHINCHOU,TAIJUU
END TYPE JOUHOU
TYPE(JOUHOU) SHOKUIN(3)
SHOKUIN(1)=JOUHOU(36,173,67)
SHOKUIN(2)=JOUHOU(51,164,61)
SHOKUIN(3)%NENREI=27
SHOKUIN(3)%SHINCHOU=157
SHOKUIN(3)%TAIJUU=47
PRINT *,SHOKUIN(1)
PRINT *,SHOKUIN(2)
PRINT *,SHOKUIN(3)
STOP
END PROGRAM KENKOU_SHINDAN
■モジュールとの併用
構造型は、モジュールと併用することで、保守が容易となる。
(例)モジュール内で年齢、身長、体重の構造型を定義し、職員に割り付け、結果を表示する。
MODULE TEIGI
IMPLICIT NONE
TYPE JOUHOU
INTEGER NENREI
INTEGER SHINCHOU
INTEGER TAIJUU
END TYPE
END MODULE TEIGI
SUBROUTINE WARITSUKE(SHOKUIN)
! 構造型 JOUHOU が定義されているモジュール TEIGI を参照
USE TEIGI
IMPLICIT NONE
TYPE(JOUHOU) SHOKUIN
SHOKUIN%NENREI=36
SHOKUIN%SHINCHOU=173
SHOKUIN%TAIJUU=67
END SUBROUTINE WARITSUKE
PROGRAM KENKOU_SHINDAN
! 構造型 JOUHOU が定義されているモジュール TEIGI を参照
USE TEIGI
IMPLICIT NONE
TYPE(JOUHOU) SHOKUIN
CALL WARITSUKE(SHOKUIN)
PRINT *,SHOKUIN%NENREI
PRINT *,SHOKUIN%SHINCHOU
PRINT *,SHOKUIN%TAIJUU
END PROGRAM KENKOU_SHINDAN
このようにしておくと、後で何らかの新しい情報を追加したい場合も、モジュール「TEIGI」内の構造型の宣言ひとつだけを追加すればよくなる。
Copyright ©2008 JAMSTEC All Rights Reserved.