CSHIFT

変形組込み関数 (総称):次元数 1 の配列に対して循環けた移動を実行します。次元数が 2 以上の配列に対しては,指定された次元に沿った 1 次元の部分配列のすべてにおいて要素の循環けた移動を行います。

部分配列の端から外にはみ出した要素は,反対側の端に送られます。それぞれの部分配列は,異なる方向に異なる量だけ移動することができます。

形式

result = CSHIFT (array, shift [, dim])

array
(入力) 配列。任意のデータ型を宣言できます。

shift
(入力) スカラ整数であるか,array よりも次元数が 1 だけ小さく,array の形状が (d1, d2, ..., dn) だとして,(d1, d2, ..., ddim-1, ddim+1, ..., dn) の形状を持つ配列。

dim
(省略可能,入力) 範囲 1 ~ n の値を持つスカラ整数。narray の次元数です。dim を省略した場合,値 1 が使用されます。

結果

結果は,array と同じ型,種別パラメタ,および形状を持つ配列です。

array の次元数が 1 の場合,結果の要素 iarray (1 + MODULO (i + shift - 1, SIZE (array))) です (すべての要素に同じけた移動が適用されます)。

array の次元数が 1 よりも大きい場合,結果の各部分配列 (s1, s2, ..., sdim-1, :, sdim+1, ..., sn) は以下のように移動されます。

shift の値は,循環けた移動の量と方向を決定します。正の shift 値は,左 (行の場合) または上 (列の場合) へ移動します。負の shift 値は,右 (行の場合) または下 (列の場合) へ移動します。ゼロの shift 値は移動しません。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

EOSHIFTISHFTISHFTC

V が配列 (1, 2, 3, 4, 5, 6) であるとします。

CSHIFT (V, SHIFT=2) は,V の中の要素を2 だけ循環けた移動し,値 (3, 4, 5, 6, 1, 2) を生成します。12 は先頭の外にはみ出し,末尾に挿入されます。

CSHIFT (V, SHIFT=-2) は,V の中の要素を2 だけ循環けた移動し,値 (5, 6, 1, 2, 3, 4) を生成します。56 は末尾の外にはみ出し,先頭に挿入されます。

M が配列

	[ 1  2  3 ]
	[ 4  5  6 ]
	[ 7  8  9 ]

であるとします。

CSHIFT (M, SHIFT = 1, DIM = 2) は結果

	[ 2  3  1 ]
	[ 5  6  4 ]
	[ 8  9  7 ]

を生成します。

行 1,2,および 3 の各要素は2 だけ移動されます。先頭の外にはみ出された要素は末尾に挿入されます。

CSHIFT (M, SHIFT = -1, DIM = 1) は結果

	[ 7  8  9 ]
	[ 1  2  3 ]
	[ 4  5  6 ]

を生成します。

列 1,2,および 3 の中の各要素は下に 1 だけ移動されます。末尾に移動された要素は先頭に挿入されます。

CSHIFT (M, SHIFT = (/1, -1, 0/), DIM = 2) は結果

	[ 2  3  1 ]
	[ 6  4  5 ]
	[ 7  8  9 ]

を生成します。

行 1 の各要素は1 だけ移動されます。行 2 の各要素は1 だけ移動されます。行 3 の要素はまったく移動されません。

以下に他の例を示します。

	INTEGER array (3, 3), AR1(3, 3), AR2 (3, 3)
	DATA array /1, 4, 7, 2, 5, 8, 3, 6, 9/
	! 配列は 1 2 3
	!        4 5 6
	!        7 8 9 です。
	AR1 = CSHIFT(array, 1, DIM = 1) 
				! すべての列を 1 けた移動します。
				! その結果,以下のようになります。
				! 4 5 6
				! 7 8 9
				! 1 2 3
	!
	AR2=CSHIFT(array,shift=(/-1, 1, 0/),DIM=2) 
				! 指定したけた移動量で行を個別
				! にけた移動します。
				! その結果,以下のようになります。
				! 3 1 2
				! 5 6 4
				! 7 8 9