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.