View previous topic :: View next topic
|
Author |
Message |
RahulChaudhari
New User
Joined: 03 Nov 2010 Posts: 11 Location: India
|
|
|
|
Can anybody help me to generate magic square of 11*11 here is a code which works fine for 3*3,5*5,7*7 & 9*9.
Code: |
IDENTIFICATION DIVISION.
PROGRAM-ID. MAGIC5.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A PIC 9(2).
01 B PIC 9(2).
01 C PIC 9(2).
01 D PIC 9(2).
01 E PIC 9(2).
01 F PIC 9(2).
01 G PIC 9(2).
01 SQUAREDATA.
02 GETDATA OCCURS 0 TO 25 TIMES DEPENDING ON N.
03 GETDETAIL OCCURS 0 TO 25 TIMES DEPENDING ON N.
05 O PIC 9(2).
01 FILEDATA.
02 GETADATA OCCURS 0 TO 25 TIMES DEPENDING ON N INDEXED BY HY.
03 FILLER PIC X(2) VALUE '|'.
03 QFR PIC 9(3).
03 QDC PIC X(1).
01 FILEDATATR.
02 GETADATA1 OCCURS 0 TO 25 TIMES DEPENDING ON N INDEXED BY HY1.
03 QFR1 PIC X(6).
01 K PIC 9(2).
01 L PIC 9(2).
01 M PIC 9(2).
01 N PIC 9(2).
01 P PIC 9(3) VALUE 01.
01 X PIC 9(2).
01 Y PIC 9(2).
01 Z PIC 9(2).
01 NN PIC 9(2).
01 TEMP PIC 9(3).
PROCEDURE DIVISION.
ACCEPT N.
DISPLAY N.
COMPUTE NN = ( N * 3 / 2 ).
COMPUTE Z = N - 1.
DISPLAY Z.
PERFORM GETPARA.
PERFORM READPARA.
PERFORM ENDPARA.
STOP RUN.
GETPARA.
PERFORM VARYING E FROM 0 BY 1 UNTIL E > Z
PERFORM VARYING F FROM 0 BY 1 UNTIL F > Z
COMPUTE K = ( E * 2 - F + N )
DIVIDE K BY N GIVING A REMAINDER B
MOVE B TO X
COMPUTE L = ( F - E + NN )
DIVIDE L BY N GIVING C REMAINDER D
MOVE D TO Y
MOVE P TO O( X , Y )
MOVE O( X , Y ) TO TEMP
MOVE TEMP TO O( X , Y )
ADD 01 TO P
END-PERFORM
END-PERFORM.
READPARA.
PERFORM VARYING Q FROM 0 BY 1 UNTIL Q > Z
MOVE ' ______' TO QFR1(HY1)
SET HY1 UP BY 1
END-PERFORM.
DISPLAY FILEDATATR.
SET HY1 TO 1.
MOVE 00 TO X.
MOVE 00 TO Y.
PERFORM VARYING X FROM 0 BY 1 UNTIL X > Z
IF( X > 0 )
DISPLAY FILEDATA
DISPLAY FILEDATATR
SET HY TO 1
SET HY1 TO 1
END-IF
PERFORM VARYING Y FROM 0 BY 1 UNTIL Y > Z
MOVE O( X , Y ) TO QFR(HY)
IF( G = Z )
MOVE '|____|' TO QFR1(HY1)
MOVE '|' TO QDC(HY)
SET HY1 UP BY 1
ELSE IF (Y = Z)
MOVE '|____|' TO QFR1(HY1)
MOVE '|' TO QDC(HY)
SET HY1 UP BY 1
ELSE
MOVE '|____' TO QFR1(HY1)
SET HY1 UP BY 1
END-IF
END-IF
SET HY UP BY 1
END-PERFORM
END-PERFORM.
ENDPARA.
DISPLAY FILEDATA.
DISPLAY FILEDATATR.
DISPLAY 'END'. |
|
|
Back to top |
|
|
dick scherrer
Moderator Emeritus
Joined: 23 Nov 2006 Posts: 19244 Location: Inside the Matrix
|
|
|
|
Hello and welcome to the forum,
What do you want help with?
Is there some compiler error? Abend? Other?
If you don't post what is happening, we can't be much help. . . |
|
Back to top |
|
|
Robert Sample
Global Moderator
Joined: 06 Jun 2008 Posts: 8696 Location: Dubuque, Iowa, USA
|
|
|
|
One observation: a 9x9 magic square requires 81 numbers while an 11x11 requires 121 numbers -- and you use 9(2) for most of your variables. I suspect this alone will cause you problems. |
|
Back to top |
|
|
RahulChaudhari
New User
Joined: 03 Nov 2010 Posts: 11 Location: India
|
|
|
|
Thank you Robert |
|
Back to top |
|
|
|