Portal | Manuals | References | Downloads | Info | Programs | JCLs | Master the Mainframes
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Usergroups Profile Log in to check your private messages Log in
 

 

Cobol magic square code

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> COBOL Programming
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    Post subject: Cobol magic square code
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

Site Director


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

PostPosted: Mon Nov 15, 2010 10:00 pm    Post subject:
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: 8057
Location: East Dubuque, Illinois, USA

PostPosted: Mon Nov 15, 2010 10:08 pm    Post subject:
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    Post subject:
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    IBMMAINFRAMES.com Support Forums -> COBOL Programming All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts DB2 Program abending without giving a... rahulgarg14 DB2 1 Mon May 29, 2017 8:10 pm
No new posts Job failing with USER = 4093 REASON C... Pradeepa S ABENDS & Debugging 1 Wed May 17, 2017 3:35 pm
This topic is locked: you cannot edit posts or make replies. Cobol GUI (like Editor) Kala Mainframe COBOL Programming 14 Wed May 10, 2017 12:30 pm
No new posts IMS T-Pipe queue counts in a COBOL Pr... Siva NKK Kothamasu IMS DB/DC 0 Tue May 09, 2017 6:31 pm
No new posts COBOL Code Parsers and Lineage Establ... balimanja COBOL Programming 2 Tue May 02, 2017 3:30 am


Facebook
Back to Top
 
Mainframe Wiki | Forum Rules | Bookmarks | Subscriptions | FAQ | Tutorials | Contact Us