Mainframes 360
The one stop destination for System Z professionals

Wednesday, October 6, 2010

Crack the code!


Here is a list of objective questions on COBOL. The list is exhaustive. To know the answer, just click on the question.
Assess where you stand. It’ll help you crack the interview.

What does COBOL stand for? How was it developed?
COBOL stands for COmmon Business Oriented Language.  COBOL was first developed by Conference On Data
Systems Language(CODASYL) committee in 1960.

The four divisions in a COBOL Program are __________, __________, ________ and _______.
The four divisions in a COBOL Program are IDENTIFICATION DIVISION, ENVIRONMENT DIVISION,
DATA DIVISION and PROCEDURE DIVISION.

The _______ paragraph under the IDENTIFICATION DIVISION establishes the identity of the Program
and assigns a unique name to the program.

The PROGRAM-ID paragraph assigns a unique name to the program.

EDIT       SYSADM.DEMO.SRCLIB(PROG01) - 01.07              Columns 00001 00066
Command ===> __________________________________________    Scroll ===> CSR 
****** ***************************** Top of Data ******************************
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+-     
000100 000100 IDENTIFICATION DIVISION.                                        
000200 000200 PROGRAM-ID. PROGRAM1.
                                           

   

The _______ DIVISION declares the platform on which COBOL Program is tested and run. It also declares the
Input-Output files for the program.

The ENVIRONMENT DIVISION is broken down into CONFIGURATION SECTION and INPUT-OUTPUT SECTION.

Under the CONFIGURATION SECTION, the SOURCE-COMPUTER paragraph declares the machine on which the
program is written and compiled. The OBJECT-COMPUTER declares the machine on which the program is executed.

Under the INPUT-OUTPUT SECTION, the FILE-CONTROL paragraph declares the input-file to the COBOL Program,
from where the raw data is read. The program processes the data. The FILE-CONTROL paragraph also declares
the Output-file, where the results are stored.

EDIT       SYSADM.DEMO.SRCLIB(PROG01) - 01.07              Columns 00001 00066
Command ===>                                                  Scroll ===> CSR 
****** ***************************** Top of Data ******************************
=COLS> ----+----1----+----2----+----3----+----4----+----5----+----6----+-     
000100 000100 IDENTIFICATION DIVISION.                                        
000200 000200 PROGRAM-ID. PROGRAM1.                                           
000300 000300 AUTHOR. QUASAR.                                                 
000400 000400                                                                 
000500 000500 ENVIRONMENT DIVISION.                                           
000510 000510 CONFIGURATION SECTION.                                          
000511 000511 SOURCE-COMPUTER. IBM-390.                                       
000512 000512 OBJECT-COMPUTER. IBM-390.                                       
000513 000513                                                                 
000520 000520 INPUT-OUTPUT SECTION.                                           
000600 000600 FILE-CONTROL.                                                   
000610 000610     SELECT INPUT-FILE  ASSIGN TO INDD.                          
000620 000620     SELECT OUTPUT-FILE ASSIGN TO OUTDD.                         



01. Name the divisions in a COBOL Program.
The four divisions in a COBOL Program are IDENTIFICATION DIVISION, ENVIRONMENT DIVISION, DATA DIVISION and PROCEDURE DIVISION.
02. Tell us briefly about each division. 
IDENTIFICATION DIVISION is used to establish the Identity of the program, and assigns a unique name to the Program.

ENVIRONMENT DIVISION tells the environment – SOURCE-COMPUTER and OBJECT-COMPUTER on which the COBOL Program would run. It also declares the Input and Output file-names, accessed by the COBOL Program. 

DATA DIVISION is the place in the COBOL Program, that creates Storage areas(COBOL Variables) for storing Data. Generally, COBOL Programs read data-records from Input-File, or Write records to Output-file. When the data-record from the Input-file is read, there's got to be a place in the COBOL Program, where the Input File Data arrives, its received and it has to be stored. COBOL Programs may do some rough-work. Such variables which act like a temporary scratch-pad, where you could do some rough-work, and which are there only as long as the COBOL Program runs are called WORKING-STORAGE Areas.

PROCEDURE DIVISION is the starting-point of the COBOL Program, where the Program begins to run. You code the Instructions that you to perform one-by-one in the PROCEDURE DIVISION.
03. What are the different data-types in COBOL?

Alpha-numeric (X), alphabetic (A) and numeric (9).

04. What does the INITIALIZE Verb do?
Alphabetic, Alpha-numeric fields and alpha-numeric edited items are initialized to SPACES.
Numeric and Numeric-edited items are set to ZEROES. FILLER and OCCURS Clause items are left untouched.

Image238

In the above code, WS-NAME variable would be filled up with SPACES. WS-PHONE variable would be zeroed out. The output of the above code is shown in the picture below.

Image239
05. What is 77 level used for ?
Say, that you want to store the details about the Employees working in the Company. Each EMPLOYEE-RECORD detail is generally 56 characters. To store Employee data in the COBOL Program, I create an EMPLOYEE-RECORD Storage Area as follows.

Image242

I know that, EMPLOYEE-RECORD data contains the Name of the Employee(30 chars) and the address of the employee(26 chars). I break down EMPLOYEE-RECORD into NAME and EMP-ADDRESS Fields as follows.

Image243

But, the name itself consists of First-name(10), Middle-name(10) and Last-name(10). Employee-Address Data consists of Street(10), City(10) and Pin-code(06). I can provide an extra-level of detailed breakup.

Image240

This way, you can take a 01-Level Data-item, and break it down further into smaller storage-areas, depending on the granularity-of-detail, you wish to capture.
 
77-level storage-areas are independent data-items, they cannot be broken down further into smaller storage areas. Moreover, they cannot participate under a bigger storage area.

If EMPLOYEE-RECORD were to be an 77-Level Independent Variable, it would look like this. Note that, now you can’t chop it!

Image241

06. Is there a difference between PIC 9.9 and PIC 9V9?

When you use PIC 9V9, COBOL assumes a decimal-point, and treats the number as a real(fractional) number with Integer-part before the decimal-pt and Fractional-part after the decimal-pt in all Arithmetic-Operations

When you use PIC 9.9, COBOL does not treat it like a Real(Decimal) Number. The decimal-Point is merely used for display-formatting purposes, the '.' character is simply force-inserted in between the 2-digits. It does not tell COBOL to treat the number as Decimal-number.

Image244

In the above code, COBOL treats WS-A as 2.3, but WS-B as 23, in all
arithmetic-Operations. When WS-A is displayed on the screen, it shows up as 23. WS-B shows up as 2.3, as you have forced a '.' symbol to be display between 2 and 3.

Image245

Also note that, WS-A occupies just 2-bytes of Storage space. WS-B on the other hand occupies 3-bytes of storage space, as you have force-inserted the decimal-point '.' character(which occupies 1 byte).

07. What is 88-Level used for?

Used for assigning labels to data-values that a COBOL-Variable can take. Very useful in detecting special-conditions. They work like flags or switches.

01 TEMPERATURE PIC 9(03).
   88 HIGH-TEMPERATURE VALUES 75 THRU 100.
  
88 MEDIUM-TEMPERATURE VALUES 50 THRU 74.
   88 LOW-TEMPERATURE VALUES 32 THRU 49.

MOVE 60 TO TEMPERATURE

IF MEDIUM-TEMPERATURE(You need not write TEMPERATURE=60)
...
END-IF

08. Can you pass an Index to another COBOL Program, via LINKAGE SECTION?

No, an INDEX is not a Working-storage area. It is maintained by the System. You can only send the data which is in Working-storage areas(Rough-work area) or in File Input-Output Areas to a COBOL Program.

You can pass a Subscript to another COBOL Program.

09. What is the difference between STOP RUN, GO BACK and EXIT PROGRAM?

STOP RUN terminates the entire run-unit – the Main Driver Program along with all its sub-programs. GO BACK returns the control back to the calling program. GO BACK when used the Main Driver Program, returns the control back to the OS. EXIT PROGRAM only works in sub-programs, and transfers control to the calling Program. If used in the Main Driver Program, it causes 4038 Abend.

10. 01 WS-I USAGE IS INDEX. Is this a valid Working-storage definition?

Yes this is a valid working-storage definition of an Index.

11. What are HIGH-VALUES and LOW-VALUES in COBOL?

How does the Mainframe Computer store data and information? Every character or alphabet is represented as a unique 8-bit pattern of 0s and 1s. For example, A is stored as 1100 0001 or X'C1' in hex. B is stored as 1100 0010 or X'C2' in Hex. Similarly, the LOW-VALUE character is stored as 0000 0000 or X'00' in Hex. The HIGH-VALUE Character is stored as 1111 1111 or X'FF' in Hex. Understand, that these are non-displayable characters.

Image246

In the picture above, the first 5 characters are HIGH-VALUES. The next 5 characters are LOW-VALUES. HIGH-VALUES and LOW-VALUES characters are used in COBOL, to represent Infinitely large or Infinitely small data.

12. What is level 66 used for ?

Level-66 Data-item is used for RENAMES Clause. RENAMES clause is used to regroup(Re-arrange), club together existing fields under a new name.

01 RECORDS.
  
05 GROUP-A.
     
10 FIELD-1 PIC 9(02).
     
10 FIELD-2 PIC 9(02).
  
05 GROUP-B.
     
10 FIELD-3 PIC 9(02).
     
10 FIELD-4 PIC 9(02).
   66 GROUP-C RENAMES FIELD-2 THRU FIELD-3.

13. What does the IS NUMERIC clause establish ?

IS NUMERIC is used to check if the data is numeric or not.

01 WS-TEXT PIC X(05).
MOVE '15623' TO WS-TEXT.
IF WS-TEXT IS
NUMERIC
DISPLAY 'NUMBER'
ELSE
DISPLAY 'TEXTUAL CHARACTERS’
END-IF.

Output:
NUMBER
MOVE 'HE123' TO WS-TEXT

IF WS-TEXT IS NUMERIC
DISPLAY 'NUMBER'
ELSE
DISPLAY 'TEXTUAL CHARACTERS’
END-IF.

Output:
TEXTUAL CHARACTERS

14. How do you define a table or array in COBOL?

01 CONTACT-LIST.
  
05 CONTACT-RECORD OCCURS 5 TIMES.
     
10 NAME PIC X(10).
      10 PHONE PIC 9(08).

15. Can the OCCURS clause be at the 01 level?

No.

16. At a minimum, what are the divisions you are required to code in COBOL?

IDENTIFICATION DIVISION entry is required at a minimum to build a working COBOL Program.

17. What is the difference between Index and Sub-script?

Subscript is the slot-no. or position in the table. Index is the displacement (in no of bytes)/actual address from the beginning of the array. Indexes are much faster than subscripts. Subscripts have to be converted internally to the address.

For example,

01 WS-TABLE.
  
05 WS-NAME OCCURS 5 TIMES PIC X(10).

-----------------------
Subscript Index
-----------------------
  
0        0
   1        10
  
2        20
  
3        30
  
..       ..
-----------------------

Since index is much more efficient, you should declare a table and Index it.

01 WS-TABLE.
   05 WS-NAME OCCURS 5 TIMES PIC X(3) INDEXED BY I.

You use indexes just like subscripts, except for the fact that they are much faster and efficient.

PERFORM 1000-DISPLAY-DATA VARYING I FROM 1 BY 1 UNTIL I > 5

1000-DISPLAY-DATA.
   DISPLAY WS-NAME(I).

To increment or decrement an Index, SET Verb is used.
SET I UP BY WS-LIT-ONE.
SET I TO 1.

You cannot MOVE data to Indexes. You also cannot perform Arithmetic Operations on an Index.

18. What is the difference between SEARCH and SEARCH ALL?

SEARCH - is a Linear(sequential) search. It performs a full top-to-bottom scan for the data.
*---------------------------------------------------------------*
* PRE-FILLED CONTACT-LIST COBOL ARRAY *
*---------------------------------------------------------------*
01 WS-CONTACT-LIST-VALUES.
  
05 FILLER PIC X(10) VALUE 'QUASAR'.
  
05 FILLER PIC X(08) VALUE '28941365'.
  
05 FILLER PIC X(10) VALUE 'MUMBAI'.
  
05 FILLER PIC X(10) VALUE 'RAMESH'.
  
05 FILLER PIC X(08) VALUE '28941305'.
  
05 FILLER PIC X(10) VALUE 'PUNE'.
  
05 FILLER PIC X(10) VALUE 'ARJUN'.
  
05 FILLER PIC X(08) VALUE '42334160'.
  
05 FILLER PIC X(10) VALUE 'DELHI'.

01 WS-CONTACT-LIST REDEFINES WS-CONTACT-LIST-VALUES.
  
05 WS-CONTACT-RECORD OCCURS 3 TIMES INDEXED BY I.
     
10 WS-NAME    PIC X(10).
     
10 WS-PHONE   PIC X(08).
      10 WS-CITY    PIC X(10).

To search the Contact-List, by names you have to code -
SEARCH WS-CONTACT-RECORD VARYING I
 
   AT END
      GO TO 2000-SEARCH-EXIT
   WHEN WS-NAME(I) =
'RAMESH'
      DISPLAY 'NAME : ' WS-NAME(I)
     
DISPLAY 'PHONE : ' WS-PHONE(I)
     
DISPLAY 'CITY : ' WS-CITY(I)
END-SEARCH.

SEARCH ALL - is a binary search & the table must be sorted ( ASCENDING/DESCENDING KEY clause to be used & data loaded in this order) before using SEARCH ALL.

19. What should be the sorting order for SEARCH ALL?
It can be either ASCENDING or DESCENDING. ASCENDING is default. If you want the search to be done on an array sorted in descending order, then while defining the array, you should give DESCENDING KEY clause. (You must load the table in the specified order).
20. What is binary search?

Search on a sorted array. Compare the item to be searched with the item at the center. If it matches, fine else repeat the process with the left half or the right half depending on where the item lies.

21. My program has an array defined to have 10 items. Due to a bug, I find that even if the program access the 11th item in this array, the program does not abend. What is wrong with it?
Use the compiler option SSRANGE if you want array bounds checking. Default is NOSSRANGE.
22. How do you access SYSIN Data and PARM Parameters passed to a COBOL Program?

You can access SYSIN Data in a COBOL Program using the ACCEPT Verb. To access the PARM Data, you code a LINKAGE SECTION Entry after the Working Storage Areas.
For example,
//STEP010 EXEC PGM=PROG01,PARMS='GEMIMG8LN

LINKAGE SECTION.
01 JCL-PARMS.
   05 JCL-PARMS-LENGTH      PIC 9(04) COMP. <--First 2bytes store length
   05 JCL-PARMS-STEPID      PIC X(08).
   05 JCL-PARM-DEBUG-SWITCH PIC X.

23. There are 2 files A and B. A contains a few records like 1,2,4,5,7,9,10,11. B contains a few records like 1,3,5,6,7,8,12. Write a Program to create an Output File C, That contains the matching records from the 2 files.
----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
           READ FILE-1
           READ FILE-2
           PERFORM UNTIL AT-END-FILE1 OR AT-END-FILE2
           EVALUATE TRUE
              WHEN KEY-1 > KEY-2
                 DISPLAY 'COMPARE' KEY-1 '>' KEY-2
                 READ FILE-2
                    AT END
                       SET AT-END-FILE2 TO TRUE
                    NOT AT END
                       CONTINUE
                 END-READ
              WHEN KEY-1 < KEY-2
                 DISPLAY 'COMPARE' KEY-1 '<' KEY-2
                 READ FILE-1
                    AT END
                       SET AT-END-FILE1 TO TRUE
                    NOT AT END
                       CONTINUE
                 END-READ
              WHEN KEY-1 = KEY-2
                 DISPLAY 'COMPARE' KEY-1 '=' KEY-2
                 MOVE INPUT-RECORD1
                 TO   OUTPUT-RECORD
                 WRITE OUTPUT-RECORD
                 READ FILE-1
                    AT END
                       SET AT-END-FILE1 TO TRUE
                 END-READ
                 READ FILE-2
                    AT END
                       SET AT-END-FILE2 TO TRUE
                 END-READ
           END-EVALUATE
           END-PERFORM
24. How do you sort in a COBOL program? Give sort file definition, sort statement syntax and meaning?

SORT file-1 ON ASCENDING/DESCENDING KEY key....
USING file-2
GIVING file-3.

USING can be substituted by INPUT PROCEDURE IS para-1 THRU para-2
GIVING can be substituted by OUTPUT PROCEDURE IS para-1 THRU para-2.
file-1 is the sort workfile and must be described using SD entry in FILE SECTION.
file-2 is the input file for the SORT and must be described using an FD entry in FILE SECTION and SELECT clause in FILE CONTROL.
file-3 is the outfile from the SORT and must be described using an FD entry in FILE SECTION and SELECT clause in FILE CONTROL.

25. What is the difference between performing a SECTION and a PARAGRAPH?
Performing a SECTION will cause all the paragraphs that are part of the section, to be performed. Performing a PARAGRAPH will cause only that paragraph to be performed.
26. What is the use of EVALUATE statement?
Evaluate is like a case statement and can be used to replace nested Ifs. The difference between EVALUATE and case is that no 'break' is required for EVALUATE i.e. control comes out of the EVALUATE as soon as one match is made.
27. How do you come out of an EVALUATE statement?

After the execution of one of the when clauses, the control is automatically passed on to the next sentence after the EVALUATE statement. There is no need of any extra code.

28. In an EVALUATE statement, can I give a complex condition on a when clause?

Yes.

29. How do you do in-line PERFORM?

PERFORM [varying I from 1 BY 1] [UNTIL Boundary-condition|5 TIMES]  
   Instruction-1
   Instruction-2
   ...
END PERFORM

30. What is the difference between CONTINUE & NEXT SENTENCE ?
CONTINUE is like a null statement (do nothing) , while NEXT SENTENCE transfers control to the next sentence (!!) (A sentence is terminated by a period)

    IF WS-NUMBER > 3
       NEXT SENTENCE
    ELSE
       DISPLAY 'WS-NUMBER IS MORE THAN 3'
    END-IF

    DISPLAY 'SENTENCE-1'.
    DISPLAY 'SENTENCE-2'.
    STOP RUN.

Output:
SENTENCE-2

    IF WS-NUMBER > 3
       CONTINUE
    ELSE
       DISPLAY 'WS-NUMBER IS MORE THAN 3'
    END-IF

    DISPLAY 'SENTENCE-1'.
    DISPLAY 'SENTENCE-2'.
    STOP RUN.

Output:
SENTENCE-1
SENTENCE-2

31. What does EXIT do?
Does nothing! If used, must be the only sentence within a paragraph. It is generally used as an exit-point for the Paragraphs.
32. Can I redefine an X(100) field with a field of X(200)?
Yes. Redefines just causes both fields to start at the same location. For example:

01 WS-TOP PIC X(1)
01 WS-TOP-RED REDEFINES WS-TOP PIC X(2).

If you MOVE '12' to WS-TOP-RED,
DISPLAY WS-TOP will show 1 while
DISPLAY WS-TOP-RED will show 12.

33. Can I redefine an X(200) field with a field of X(100) ?
Yes.
34. What are S0C1, S0C4, S0C7, S0CB Errors in COBOL?
S0C1 error is an Operation-Exception. This happens when you attempt to execute an invalid machine-instruction. S0C1 errors occur in COBOL, due to:
- Table-handling overlay(MOVEs to table/sub-scripts out of range – and which over-write PROCEDURE DIVISION Instructions).
- Statements referencing LINKAGE SECTION Fields incorrectly.
- CALLs to an invalid or un-available module-name.

S0C4 error is an Address-Exception. You try to access Storage-area, which is restricted. Any storage-access violation results in S0C4 Error.

S0C7 error is a Data-Exception. This generally happens when you try to perform an Arithmetic-Operation on non-numeric data.

S0CB error is a Divide-by-Zero exception. This generally occurs when you try to divide by zero in COBOL.
35. How do you resolve S0C7 Error? 
When a COBOL Program terminates pre-maturely, due to Bad-data, most installations provide you a dump for run time abend. These dumps provide the offset of the last instruction at which the abend occurred.

Image247

Once you have the offset of the abending-Instruction +00000440, you must lookup this in the Compile-Listing to find out, at which COBOL Line-of-code or COBOL-Instruction, the program was terminated. I have generated the Compile-Listing with the following options 'SSRANGE,XREF,MAP,OFFSET,FLAG(W,W)'.

In the Compile-Listing, jump to Condensed-Verbs Listing. You can hit a
F ALL 'HEXLOC' in the Compile-Listing to locate this. The
condensed-Verbs Listing gives the COBOL Line-no.(LINE), COBOL Verb coded on that line(VERB), Hex-address of the COBOL Verb from the origin of the Program(HEXLOC).

Image248

Hex-address 440 lies between Line# 33 ADD and Line# 34 DISPLAY Instructions. This implies, the ADD instruction was last instruction, at which the Program failed due some error. Now, note down the name of the fields occurring in the Abending COBOL Line. The abending COBOL Instruction is -

ADD +1 TO WS-NUMBER

WS-NUMBER is populated from NUMBER-IN of the file. We need to establish where these fields are located in the Memory. To do this, you can use the Data Division Map in the Compile Listing.

Image249
36. Explain the different USAGEs in COBOL. 
The Memory Space calculation – how much storage space, a COBOL Variable occupies – 1 byte, 2 bytes, 3 bytes, how much - is done by looking at the USAGE Clause.

In COBOL, you generally process two types of data – (i) Textual Character Strings like 'Hello','RAM MUMBAI','1000.00' and (ii) Numeric Data that is used in arithmetic computations such as 1456, –123.28.

In the picture, the COBOL storage area WS-TEXT stores the Textual String-data 'HELLO' and the COBOL Storage Area WS-NUMBER stores the Number 67542. The question is to tell, how much space in bytes does WS-TEXT and WS-NUMBER occupy in the Memory?

Image250

1) USAGE IS DISPLAY : In the above declaration, no USAGE Clause has been specified. When no explicit-usage is mentioned, it defaults to DISPLAY Format. You can also tell explicitly, "I want the data to be stored in DISPLAY Format, by writing USAGE IS DISPLAY Clause." 

Image 252

What’s DISPLAY Format? When you store data in DISPLAY Format, the data is stored or represented on the Mainframe Computer, as it is DISPLAYed – 1 Byte for each character. In EBCDIC System, the character 'H' is represented as 1100 0100 or x'C8'. The character 'E' is stored as 1100 0101 or x'C5'. The character 'L' is represented as 1101 0101 or x'D3', 'O' is stored as 1101 0110 or x'D6'.

In EBCDIC System, the numeric-character '1' is stored as 1111 0001 or x'F1',the character '2' is stored as 1111 0010 or x'f2' and so on. Note that, the numeric character '1' is not the same as numeric Digit 1. This way each character is stored in 1 byte – simple – stored as it is DISPLAY'ed. This is how it looks, when you store data like 'HELLO' or 67542 on a Mainframe. So, 'HELLO' occupies 5 bytes, 67542 also occupies 5 Bytes.

Image251

2) COMP : Whilst DISPLAY Format is easy-to-use, when numeric data like 67542 is stored in DISPLAY-Format, it is not very computationally-efficient. So, when storing Integer-data in COBOL, which is used in arithmetic-Computations, you should store them in COMPUTATIONAL Format. The COMPUTATIONAL or COMP format, stores the entire-Number in pure-binary Format. In other words, find out what is the Binary-equivalent for the Decimal number 67542. For example, 67542 is stored as 0000 0000 0000 0001 0000 0111 1101 0110 or x'000107D6'. This occupies 4 bytes only. Here’s how you store 67542 in COMP-Format.

Image253

This is how 67542 looks, when you store it in WS-NUMBER COBOL Variable –
a PIC 9(05) COMP.

Image254

By looking at the below chart, you can tell how much storage space a COMP-Variable will occupy. Now, say you are storing the number 12345678 in
PIC 9(08). This occupies 8 Bytes. As opposed to this if you store the number 12345678 in PIC 9(08) COMP, it occupies far lesser space, just 4-Bytes.

Image255

3) COMP-3 – COMP-3 Format provides the maximum packing-ability or compression of data. Its packing-density is very good. COMP-3 Format can pack upto 2 digits in one single-byte of space. COMP-3 Format stores the number as BCD(Binary Coded Decimal). What’s BCD? The idea stems from the fact that, to store any numeric-digit(from 0-9) on a computer you just need half-byte(nibble).

Image256

What’s the BCD for 67542? Here’s how you calculate it. Look-up the Binary-code for each digit of the number separately.
       6    7     5    4     2
0000 0110  0111 0101  0100 0010 (3-Bytes)

When 67542 is stored in COMP-3 Format, it occupies even lesser space – just 3 Bytes. Here’s, how you code it in COBOL -

Image257 
This is how 67542 would look, when you store it COMP-3 Format.

Image258
37. What is COMP-1 and COMP-2?
COMP-1 and COMP-2 Formats are meant for storing numbers with a Decimal Point – Real Numbers(Floating-Pt. Numbers). COMP-1 is Single-precision  Floating Point Format. It always occupies 4 Bytes. COMP-2 is Double-precision Floating Point Format. COMP-2 occupies 8 Bytes.

Image259
38. How many bytes does S9(07) COMP-3 occupy?
In COMP-3 Format, since two digits can be packed into one byte, 7 digits can be packed into 4 bytes. In general, the space occupied by a PIC 9(n) COMP-3 Variable is (n+1)/2.
39. How many bytes does PIC S9(07) occupy?
PIC S9(07) would occupy 7 bytes of storage space.
40. How many bytes does a S9(7) SIGN TRAILING SEPARATE field occupy ?
S9(07) SIGN TRAILING SEPARATE Field occupies 8 bytes(1 extra byte for the sign).
41. What is COMP SYNC?
SYNC Keyword is used in COBOL to align the data(storage-area) to a Word-Boundary(Any address which is a multiple of 4). This is because, on Mainframes reading data from a word-boundary is computationally efficient.


Image260
42. How is Sign stored in a COMP-3 Field?
In the COMP-3 Format, the sign is stored in the last nibble. Positive numbers contain 1100 or x'C' in the Last nibble. Negative numbers contain 1101 or x'D' in the last nibble. The below picture shows, how +67542 and –67542 looks, when stored in the COMP-3 Format.

Image261

To many people who are thrown to work at a mainframe computer on their first job, they feel lost. Mainframe people seem to speak a completely different language and that doesn't make life easy. What's more, the books and manuals are incredibly hard to comprehend.

"What on earth is a Mainframe?" is an absolute beginner's guide to mainframe computers. We'll introduce you to the hardware and peripherals. We'll talk about the operating system, the software installed on a mainframe. We'll also talk about the different people who work on a mainframe. In a nutshell, we'll de-mystify the mainframe.

Readers based in India, can buy the e-book for Rs. 50 only or the print book. International readers based in the US and other countries can click here to purchase the e-book.