反転操作によるブロック移動

 投稿者:山中和義  投稿日:2009年11月10日(火)09時29分32秒
  あれ~ぇ! カードの並び順を反転しているのに、、、

!反転操作によるブロック移動

LET N=15 !枚数
DIM A(N) !カードの並び

PRINT "2分割の場合"
FOR i=1 TO N !整列
   LET A(i)=i
NEXT i
MAT PRINT A;

LET p=5 !位置
CALL reverse(A,1,p-1) !前半部分のみ
MAT PRINT A;
CALL reverse(A,p,N) !後半部分のみ
MAT PRINT A;
CALL reverse(A,1,N) !全体で
MAT PRINT A;

PRINT



PRINT "3分割の場合"

FOR i=1 TO N !整列
   LET A(i)=i
NEXT i
MAT PRINT A;

LET p=7 !位置
LET q=12
CALL reverse(A,1,p-1) !前半部分のみ
MAT PRINT A;
CALL reverse(A,p,q-1) !中央部分のみ
MAT PRINT A;
CALL reverse(A,q,N) !後半部分のみ
MAT PRINT A;
CALL reverse(A,1,N) !全体で
MAT PRINT A;


END


EXTERNAL SUB reverse(A(),L,R) !指定された範囲の並びを逆順にする
LET i=L !左端
LET j=R !右端

DO WHILE i<j !交換位置は半分まで ※全部すると元に戻る
   LET t=A(i) !swap it
   LET A(i)=A(j)
   LET A(j)=t

   LET i=i+1 !次へ
   LET j=j-1
LOOP
END SUB
 

戻る