IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Cobol magic square code


IBM Mainframe Forums -> COBOL Programming
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
RahulChaudhari

New User


Joined: 03 Nov 2010
Posts: 11
Location: India

PostPosted: Mon Nov 15, 2010 7:55 pm
Reply with quote

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
View user's profile Send private message
dick scherrer

Moderator Emeritus


Joined: 23 Nov 2006
Posts: 19244
Location: Inside the Matrix

PostPosted: Mon Nov 15, 2010 10:00 pm
Reply with quote

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
View user's profile Send private message
Robert Sample

Global Moderator


Joined: 06 Jun 2008
Posts: 8696
Location: Dubuque, Iowa, USA

PostPosted: Mon Nov 15, 2010 10:08 pm
Reply with quote

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
View user's profile Send private message
RahulChaudhari

New User


Joined: 03 Nov 2010
Posts: 11
Location: India

PostPosted: Tue Nov 16, 2010 4:39 pm
Reply with quote

Thank you Robert
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> COBOL Programming

 


Similar Topics
Topic Forum Replies
No new posts Replace each space in cobol string wi... COBOL Programming 3
No new posts COBOL -Linkage Section-Case Sensitive COBOL Programming 1
No new posts run rexx code with jcl CLIST & REXX 15
No new posts COBOL ZOS Web Enablement Toolkit HTTP... COBOL Programming 0
No new posts Compile rexx code with jcl CLIST & REXX 6
Search our Forums:

Back to Top