| CSHIFT |
CSHIFT| 書式 | CSHIFT(ARRAY,SHIFT[,DIM]) | ||||||
| 機能 |
次元数が1である配列上で要素の循環移動(Circular Shift)を行うか、
または次元数が2以上である配列式の指定された次元に沿った1次元の
部分配列のすべてにおいて要素の循環移動を行う。 部分配列の端から外にはみ出した要素は、反対側の端に送られる。 それぞれの部分配列は、異なる方向に異なる量だけ移動してもよい。 (1)ARRAYが1次元配列であるとき、結果のi番目の要素は、 ARRAY(1+MODULO(i+SHIFT-1,SIZE(ARRAY)))とする。 (2)ARRAYが2次元以上の配列であるとき、結果の部分配列 (s1,s2,…,sDIM-1,:,sDIM+1, …,sn)の値は、CSHIFT(ARRAY(s1,s2, …,sDIM-1,:,sDIM+1,…,sn),sh,1)とする。 ここでshは、SHIFTまたはSHIFT(s1,s2, …,sDIM-1,sDIM+1,…,sn) とする。 nはARRAYの次元数とする。 | ||||||
| 引数 |
| ||||||
| 戻り値 | 型、種別型パラメタおよび形状は引数ARRAYと同じである。 |
サンプルプログラム
┌─┬─┬─┐ ┌─┬─┬─┐
v │1│2│3│ v │1│2│3├──┐
├─┼─┼─┤ ├─┼─┼─┤ │
│4│5│6│ ┌────┤4│5│6│ │
└┬┴┬┴┬┘ │左へ1 └─┴─┴─┘ │
└┐│ │ ↓ 右へ1↓
┌┼┼─┘ ┌─┬─┬─┐ ┌─┬─┬─┐
││└─┐ │5│6│4│ │3│1│2│
│└┐ │ └─┴┬┴─┘ └─┴┬┴─┘
↓ ↓ ↓ │ │
┌─┬─┬─┐ │ ┌─┬─┬─┐ │
v1│3│1│2│ │v2│3│1│2│ │
├─┼─┼─┤ │ ├─┼─┼─┤ │
│6│4│5│ └─→│5│6│4│←┘
└─┴─┴─┘ └─┴─┴─┘
INTEGER :: i
INTEGER,DIMENSION(2,3) :: v,v1,v2
v(1,:)=(/1, 2, 3/)
v(2,:)=(/4, 5, 6/)
v1=CSHIFT(v,-1,2) !SHIFT=-1は右へ1
v2=CSHIFT(v,(/-1,1/),2) !-1は右へ1,1は左へ1
WRITE(*,'(3I2)') (v1(i,:),i=1,2)
WRITE(*,'(3I2)') (v2(i,:),i=1,2)
| 実行例 |