FUNCTION ARRAYTO()
PARAMETER A_TXT
SET TALK OFF
CLEAR &&確定文件名格式
IF EMPTY(A_TXT)
LFILE='array.txt'
ELSE
SNO=ATC('.TXT',A_TXT)
IF (SNO=0)
FILE=A_TXT+'.TXT'
ELSE
FILE=A_TXT
ENDIF
ENDIF
IF !FILE(LFILE)
print'默認目錄下名為arrayto.txt的文件不存在!!!'
RETURN 0
ENDIF
GFILE = FOPEN(LFILE,12)
IF GFILE<0
print '打開文件出錯!!!'
FCLOSE(GFILE)
RETURN 0
ELSE
LCNT=0
DO WHILE !FEOF(GFILE)
LCNT=LCNT+1 &&統計文件行數
STR1=FGET(GFILE)
ENDDO
FCLOSE(GFILE)
ENDIF
DECLARE ARR(LCNT)
GFILE = FOPEN(LFILE,12)
IF GFILE<0
print '打開文件出錯!!!'
FCLOSE(GFILE)
RETURN 0
ELSE
K=1
DO WHILE !FEOF(GFILE)
ARR(K)=ALLTRIM(FGET(GFILE))
K=K+1
ENDDO
FCLOSE(GFILE)
ENDIF
IF MOD(LCNT,2)<>1
print '此變換,行列,必須為基數!!!'
RETURN 0
ENDIF
DECLARE TEMP(LCNT,LCNT)
FOR I=1 TO LCNT
STR2=ARR(I)
FOR J=1 TO LCNT
S=SUBSTR(STR2,1,2)
TEMP(I,J)=ALLTRIM(S)
STR2=ALLTRIM(SUBSTR(STR2,3)) &&讀取字符串
NEXT J
NEXT I
DECLARE RST(LCNT,LCNT))
RST='0'
CMID=INT(LCNT/2)+1 &&取中間值
FOR I=1 TO LCNT
FOR J=1 TO LCNT
DO CASE &&中心數據不變
CASE I=CMID AND J=CMID
RST(I,J)=TEMP(I,J)
CASE I<CMID AND J<=CMID &&第一象限變換
K=CMID-I
AI=I+1
BJ=J-1
IF BJ<1
BJ=1
AI=AI-1+2*K
ENDIF
RST(I,J)=TEMP(AI,BJ)
CASE I<=CMID AND J>=CMID &&第二象限變換
K=J-CMID
AI=I-1
BJ=J-1
IF AI<1
AI=1
BJ=BJ+1-2*K
ENDIF
RST(I,J)=TEMP(AI,BJ)
CASE I>=CMID AND J<CMID &&第三象限變換
K=CMID-J
AI=I+1
BJ=J+1
IF AI>LCNT
AI=LCNT
BJ=BJ-1+2*K
ENDIF
RST(I,J)=TEMP(AI,BJ)
CASE I>CMID AND J>=CMID &&第四象限變換
K=I-CMID
AI=I-1
BJ=J+1
IF BJ>LCNT
BJ=LCNT
AI=AI+1-2*K
ENDIF
RST(I,J)=TEMP(AI,BJ)
ENDCASE
NEXT J
NEXT I
FOR I=1 TO LCNT
FOR J=1 TO LCNT
printprint TEMP(I,J)+SPACE(2) &&輸出原始數據
NEXT J
print
NEXT I
print
FOR I=1 TO LCNT
FOR J=1 TO LCNT
printprint RST(I,J)+SPACE(2) &&輸出轉換后的數據
NEXT J
print
NEXT I
ENDFUNC
1485

被折叠的 条评论
为什么被折叠?



