PRINT PRINT "何行何列の魔方陣?" 10 INPUT PROMPT "3〜9までの奇数を入力してください。":N PRINT IF N<3 OR N/2=INT(N/2) OR N<>INT(N) THEN GOTO 10 DIM A(N,N),B(N,N),C(N,N),D(N,N) LET P=(N+1)/2 LET G=INT(N/2) FOR w=P TO N LET qq=w-P FOR q=1 TO N LET A(q,w)=qq LET qq=qq+1 CALL HENKAN(qq,N) NEXT q NEXT w FOR w=P-1 TO 1 STEP -1 LET aa=w+G FOR q=1 TO N LET A(q,w)=aa LET aa=aa+1 CALL HENKAN(aa,N) NEXT q NEXT w FOR w=P TO N LET zz=1+2*(w-P) FOR q=1 TO N LET B(q,w)=zz LET zz=zz+1 CALL KANHEN(zz,N) NEXT q NEXT w FOR w=P-1 TO 1 STEP -1 LET ss=1+2*(w-P) CALL KANHEN(ss,N) FOR q=1 TO N LET B(q,w)=ss LET ss=ss+1 CALL KANHEN(ss,N) NEXT q NEXT w MAT C=N*A MAT D=C+B PRINT PRINT N;"×";n;"の魔方陣:" PRINT FOR i=1 TO N FOR j=1 TO N PRINT USING "#####":D(i,j); NEXT j PRINT PRINT NEXT i PRINT PRINT PRINT "商行列:" FOR i=1 TO N FOR j=1 TO N PRINT USING "###":A(i,j); NEXT j PRINT NEXT i PRINT PRINT "余り行列:" FOR i=1 TO N FOR j=1 TO N PRINT USING "###":B(i,j); NEXT j PRINT NEXT i PRINT END EXTERNAL SUB HENKAN(x,y) IF x=-1 THEN LET x=y-1 ELSEIF x=y THEN LET x=0 END IF END SUB EXTERNAL SUB KANHEN(x,y) IF x<1 THEN LET x=y+x ELSEIF x>y THEN LET x=x-y END IF END SUB