Author: Saim Khalid

  • C++ Basic Syntax

    When we consider a C++ program, it can be defined as a collection of objects that communicate via invoking each other’s methods. Let us now briefly look into what a class, object, methods, and instant variables mean.

    • Object − Objects have states and behaviors. Example: A dog has states – color, name, breed as well as behaviors – wagging, barking, eating. An object is an instance of a class.
    • Class − A class can be defined as a template/blueprint that describes the behaviors/states that object of its type support.
    • Methods − A method is basically a behavior. A class can contain many methods. It is in methods where the logics are written, data is manipulated and all the actions are executed.
    • Instance Variables − Each object has its unique set of instance variables. An object’s state is created by the values assigned to these instance variables.

    C++ Program Structure

    Let us look at a simple code that would print the words Hello World.

    #include <iostream>
    using namespace std;
    
    // main() is where program execution begins.
    int main() {
       cout << "Hello World"; // prints Hello World
       return 0;
    }

    Let us look at the various parts of the above program −

    • The C++ language defines several headers, which contain information that is either necessary or useful to your program. For this program, the header <iostream> is needed.
    • The line using namespace std; tells the compiler to use the std namespace. Namespaces are a relatively recent addition to C++.
    • The next line ‘// main() is where program execution begins.‘ is a single-line comment available in C++. Single-line comments begin with // and stop at the end of the line.
    • The line int main() is the main function where program execution begins.
    • The next line cout << “Hello World”; causes the message “Hello World” to be displayed on the screen.
    • The next line return 0; terminates main( )function and causes it to return the value 0 to the calling process.

    Compile and Execute C++ Program

    Let’s look at how to save the file, compile and run the program. Please follow the steps given below −

    • Open a text editor and add the code as above.
    • Save the file as: hello.cpp
    • Open a command prompt and go to the directory where you saved the file.
    • Type ‘g++ hello.cpp’ and press enter to compile your code. If there are no errors in your code the command prompt will take you to the next line and would generate a.out executable file.
    • Now, type ‘a.out’ to run your program.
    • You will be able to see ‘ Hello World ‘ printed on the window.
    $ g++ hello.cpp
    $ ./a.out
    Hello World
    

    Make sure that g++ is in your path and that you are running it in the directory containing file hello.cpp.

    You can compile C/C++ programs using makefile. For more details, you can check our ‘Makefile Tutorial’.

    Semicolons and Blocks in C++

    In C++, the semicolon is a statement terminator. That is, each individual statement must be ended with a semicolon. It indicates the end of one logical entity.

    For example, following are three different statements −

    x = y;
    y = y + 1;
    add(x, y);
    

    A block is a set of logically connected statements that are surrounded by opening and closing braces. For example −

    {
       cout << "Hello World"; // prints Hello World
       return 0;
    }
    

    C++ does not recognize the end of the line as a terminator. For this reason, it does not matter where you put a statement in a line. For example −

    x = y;
    y = y + 1;
    add(x, y);
    

    is the same as

    x = y; y = y + 1; add(x, y);
    

    C++ Identifiers

    A C++ identifier is a name used to identify a variable, function, class, module, or any other user-defined item. An identifier starts with a letter A to Z or a to z or an underscore (_) followed by zero or more letters, underscores, and digits (0 to 9).

    C++ does not allow punctuation characters such as @, $, and % within identifiers. C++ is a case-sensitive programming language. Thus, Manpower and manpower are two different identifiers in C++.

    Here are some examples of acceptable identifiers −

    mohd       zara    abc   move_name  a_123
    myname50   _temp   j     a23b9      retVal
    

    C++ Keywords

    The following list shows the reserved words in C++. These reserved words may not be used as constant or variable or any other identifier names.

    asmelsenewthis
    autoenumoperatorthrow
    boolexplicitprivatetrue
    breakexportprotectedtry
    caseexternpublictypedef
    catchfalseregistertypeid
    charfloatreinterpret_casttypename
    classforreturnunion
    constfriendshortunsigned
    const_castgotosignedusing
    continueifsizeofvirtual
    defaultinlinestaticvoid
    deleteintstatic_castvolatile
    dolongstructwchar_t
    doublemutableswitchwhile
    dynamic_castnamespacetemplate 

    Trigraphs

    A few characters have an alternative representation, called a trigraph sequence. A trigraph is a three-character sequence that represents a single character and the sequence always starts with two question marks.

    Trigraphs are expanded anywhere they appear, including within string literals and character literals, in comments, and in preprocessor directives.

    Following are most frequently used trigraph sequences −

    TrigraphReplacement
    ??=#
    ??/\
    ??’^
    ??([
    ??)]
    ??!|
    ??<{
    ??>}
    ??-~

    All the compilers do not support trigraphs and they are not advised to be used because of their confusing nature.

    Whitespace in C++

    A line containing only whitespace, possibly with a comment, is known as a blank line, and C++ compiler totally ignores it.

    Whitespace is the term used in C++ to describe blanks, tabs, newline characters and comments. Whitespace separates one part of a statement from another and enables the compiler to identify where one element in a statement, such as int, ends and the next element begins.

    Statement 1

    int age;
    

    In the above statement there must be at least one whitespace character (usually a space) between int and age for the compiler to be able to distinguish them.

    Statement 2

    fruit = apples + oranges;   // Get the total fruit
    

    In the above statement 2, no whitespace characters are necessary between fruit and =, or between = and apples, although you are free to include some if you wish for readability purpose.

  • C++ Environment Setup

    Local Environment Setup

    If you are still willing to set up your environment for C++, you need to have the following two softwares on your computer.

    Text Editor

    This will be used to type your program. Examples of few editors include Windows Notepad, OS Edit command, Brief, Epsilon, EMACS, and vim or vi.

    Name and version of text editor can vary on different operating systems. For example, Notepad will be used on Windows and vim or vi can be used on windows as well as Linux, or UNIX.

    The files you create with your editor are called source files and for C++ they typically are named with the extension .cpp, .cp, or .c.

    A text editor should be in place to start your C++ programming.

    C++ Compiler

    This is an actual C++ compiler, which will be used to compile your source code into final executable program.

    Most C++ compilers don’t care what extension you give to your source code, but if you don’t specify otherwise, many will use .cpp by default.

    Most frequently used and free available compiler is GNU C/C++ compiler, otherwise you can have compilers either from HP or Solaris if you have the respective Operating Systems.

    Installing GNU C/C++ Compiler

    UNIX/Linux Installation

    If you are using Linux or UNIX then check whether GCC is installed on your system by entering the following command from the command line −

    $ g++ -v
    

    If you have installed GCC, then it should print a message such as the following −

    Using built-in specs.
    Target: i386-redhat-linux
    Configured with: ../configure --prefix=/usr .......
    Thread model: posix
    gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
    

    If GCC is not installed, then you will have to install it yourself using the detailed instructions available at https://gcc.gnu.org/install/

    Mac OS X Installation

    If you use Mac OS X, the easiest way to obtain GCC is to download the Xcode development environment from Apple’s website and follow the simple installation instructions.

    Xcode is currently available at developer.apple.com/technologies/tools/.

    Windows Installation

    To install GCC at Windows you need to install MinGW. To install MinGW, go to the MinGW homepage, www.mingw.org, and follow the link to the MinGW download page. Download the latest version of the MinGW installation program which should be named MinGW-<version>.exe.

    While installing MinGW, at a minimum, you must install gcc-core, gcc-g++, binutils, and the MinGW runtime, but you may wish to install more.

    Add the bin subdirectory of your MinGW installation to your PATH environment variable so that you can specify these tools on the command line by their simple names.

    When the installation is complete, you will be able to run gcc, g++, ar, ranlib, dlltool, and several other GNU tools from the Windows command line.

  • Overview

    C++ is a statically typed, compiled, general-purpose, case-sensitive, free-form programming language that supports procedural, object-oriented, and generic programming.

    C++ is regarded as a middle-level language, as it comprises a combination of both high-level and low-level language features.

    C++ was developed by Bjarne Stroustrup starting in 1979 at Bell Labs in Murray Hill, New Jersey, as an enhancement to the C language and originally named C with Classes but later it was renamed C++ in 1983.

    C++ is a superset of C, and that virtually any legal C program is a legal C++ program.

    Note − A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time.

    Object-Oriented Programming

    C++ fully supports object-oriented programming, including the four pillars of object-oriented development −

    • Encapsulation
    • Data hiding
    • Inheritance
    • Polymorphism

    Standard Libraries

    Standard C++ consists of three important parts −

    • The core language giving all the building blocks including variables, data types and literals, etc.
    • The C++ Standard Library giving a rich set of functions manipulating files, strings, etc.
    • The Standard Template Library (STL) giving a rich set of methods manipulating data structures, etc.

    The ANSI Standard

    The ANSI standard is an attempt to ensure that C++ is portable; that code you write for Microsoft’s compiler will compile without errors, using a compiler on a Mac, UNIX, a Windows box, or an Alpha.

    The ANSI standard has been stable for a while, and all the major C++ compiler manufacturers support the ANSI standard.

    Learning C++

    The most important thing while learning C++ is to focus on concepts.

    The purpose of learning a programming language is to become a better programmer; that is, to become more effective at designing and implementing new systems and at maintaining old ones.

    C++ supports a variety of programming styles. You can write in the style of Fortran, C, Smalltalk, etc., in any language. Each style can achieve its aims effectively while maintaining runtime and space efficiency.

    Use of C++

    C++ is used by hundreds of thousands of programmers in essentially every application domain.

    C++ is being highly used to write device drivers and other software that rely on direct manipulation of hardware under realtime constraints.

    C++ is widely used for teaching and research because it is clean enough for successful teaching of basic concepts.

    Anyone who has used either an Apple Macintosh or a PC running Windows has indirectly used C++ because the primary user interfaces of these systems are written in C++.

  • String Handling

    String handling statements in COBOL are used to do multiple functional operations on strings. Following are the string handling statements −

    • Inspect
    • String
    • Unstring

    Inspect

    Inspect verb is used to count or replace the characters in a string. String operations can be performed on alphanumeric, numeric, or alphabetic values. Inspect operations are performed from left to right. The options used for the string operations are as follows −

    Tallying

    Tallying option is used to count the string characters.

    Syntax

    Following is the syntax of Tallying option −

    INSPECT input-string
    TALLYING output-count FOR ALL CHARACTERS
    

    The parameters used are −

    • input-string − The string whose characters are to be counted.
    • output-count − Data item to hold the count of characters.

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-CNT1 PIC 9(2) VALUE 0.
       01 WS-CNT2 PIC 9(2) VALUE 0.
       01 WS-STRING PIC X(15) VALUE 'ABCDACDADEAAAFF'.
       
    PROCEDURE DIVISION.
       INSPECT WS-STRING TALLYING WS-CNT1 FOR CHARACTER.
       DISPLAY "WS-CNT1 : "WS-CNT1.
       INSPECT WS-STRING TALLYING WS-CNT2 FOR ALL 'A'.
       DISPLAY "WS-CNT2 : "WS-CNT2
       
    STOP RUN.

    JCL to execute the above COBOL program.

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-CNT1 : 15
    WS-CNT2 : 06
    

    Replacing

    Replacing option is used to replace the string characters.

    Syntax

    Following is the syntax of Replacing option −

    INSPECT input-string REPLACING ALL char1 BY char2.
    

    The parameter used is −

    • input-string − The string whose characters are to be replaced from char1 to char2.

    Example

    Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-STRING PIC X(15) VALUE 'ABCDACDADEAAAFF'.
    
    PROCEDURE DIVISION.
       DISPLAY "OLD STRING : "WS-STRING.
       INSPECT WS-STRING REPLACING ALL 'A' BY 'X'.
       DISPLAY "NEW STRING : "WS-STRING.
       
    STOP RUN.

    JCL to execute the above COBOL program.

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    OLD STRING : ABCDACDADEAAAFF
    NEW STRING : XBCDXCDXDEXXXFF
    

    String

    String verb is used to concatenate the strings. Using STRING statement, two or more strings of characters can be combined to form a longer string. ‘Delimited By’ clause is compulsory.

    Syntax

    Following is the syntax of String verb −

    STRING ws-string1 DELIMITED BY SPACE
       ws-string2 DELIMITED BY SIZE
       INTO ws-destination-string
       WITH POINTER ws-count
       ON OVERFLOW DISPLAY message1
       NOT ON OVERFLOW DISPLAY message2
    END-STRING.

    Following are the details of the used parameters −

    • ws-string1 and ws-string2 : Input strings to be concatenated
    • ws-string : Output string
    • ws-count : Used to count the length of new concatenated string
    • Delimited specifies the end of string
    • Pointer and Overflow are optional

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-STRING PIC A(30).
       01 WS-STR1 PIC A(15) VALUE 'Tutorialspoint'.
       01 WS-STR2 PIC A(7) VALUE 'Welcome'.
       01 WS-STR3 PIC A(7) VALUE 'To AND'.
       01 WS-COUNT PIC 99 VALUE 1.
    
    PROCEDURE DIVISION.
       STRING WS-STR2 DELIMITED BY SIZE
    
      WS-STR3 DELIMITED BY SPACE
      WS-STR1 DELIMITED BY SIZE
      INTO WS-STRING 
      WITH POINTER WS-COUNT
      ON OVERFLOW DISPLAY 'OVERFLOW!' 
    END-STRING. DISPLAY 'WS-STRING : 'WS-STRING. DISPLAY 'WS-COUNT : 'WS-COUNT. STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-STRING : WelcomeToTutorialspoint       
    WS-COUNT : 25
    

    Unstring

    Unstring verb is used to split one string into multiple sub-strings. Delimited By clause is compulsory.

    Syntax

    Following is the syntax of Unstring verb −

    UNSTRING ws-string DELIMITED BY SPACE
    INTO ws-str1, ws-str2
    WITH POINTER ws-count
    ON OVERFLOW DISPLAY message
    NOT ON OVERFLOW DISPLAY message
    END-UNSTRING.

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-STRING PIC A(30) VALUE 'WELCOME TO TUTORIALSPOINT'.
       01 WS-STR1 PIC A(7).
       01 WS-STR2 PIC A(2).
       01 WS-STR3 PIC A(15).
       01 WS-COUNT PIC 99 VALUE 1.
    
    PROCEDURE DIVISION.
       UNSTRING WS-STRING DELIMITED BY SPACE
    
      INTO WS-STR1, WS-STR2, WS-STR3
    END-UNSTRING. DISPLAY 'WS-STR1 : 'WS-STR1. DISPLAY 'WS-STR2 : 'WS-STR2. DISPLAY 'WS-STR3 : 'WS-STR3. STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-STR1 : WELCOME
    WS-STR2 : TO
    WS-STR3 : TUTORIALSPOINT 
    
  • Loop Statements

    There are some tasks that need to be done over and over again like reading each record of a file till its end. The loop statements used in COBOL are −

    • Perform Thru
    • Perform Until
    • Perform Times
    • Perform Varying

    Perform Thru

    Perform Thru is used to execute a series of paragraph by giving the first and last paragraph names in the sequence. After executing the last paragraph, the control is returned back.

    In-line Perform

    Statements inside the PERFORM will be executed till END-PERFORM is reached.

    Syntax

    Following is the syntax of In-line perform −

    PERFORM 
       DISPLAY 'HELLO WORLD'
    END-PERFORM.
    

    Out-of-line Perform

    Here, a statement is executed in one paragraph and then the control is transferred to other paragraph or section.

    Syntax

    Following is the syntax of Out-of-line perform −

    PERFORM PARAGRAPH1 THRU PARAGRAPH2
    

    Example

    Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    PROCEDURE DIVISION.
       A-PARA.
       PERFORM DISPLAY 'IN A-PARA'
       END-PERFORM.
       PERFORM C-PARA THRU E-PARA.
       
       B-PARA.
       DISPLAY 'IN B-PARA'.
       STOP RUN.
       
       C-PARA.
       DISPLAY 'IN C-PARA'.
       
       D-PARA.
       DISPLAY 'IN D-PARA'.
       
       E-PARA.
       DISPLAY 'IN E-PARA'.

    JCL to execute the above COBOL program.

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    IN A-PARA
    IN C-PARA
    IN D-PARA
    IN E-PARA
    IN B-PARA
    

    Perform Until

    In ‘perform until’, a paragraph is executed until the given condition becomes true. ‘With test before’ is the default condition and it indicates that the condition is checked before the execution of statements in a paragraph.

    Syntax

    Following is the syntax of perform until −

    PERFORM A-PARA UNTIL COUNT=5
    
    PERFORM A-PARA WITH TEST BEFORE UNTIL COUNT=5
    
    PERFORM A-PARA WITH TEST AFTER UNTIL COUNT=5

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-CNT PIC 9(1) VALUE 0. 
    
    PROCEDURE DIVISION.
       A-PARA.
       PERFORM B-PARA WITH TEST AFTER UNTIL WS-CNT>3.
       STOP RUN.
       
       B-PARA.
       DISPLAY 'WS-CNT : 'WS-CNT.
       ADD 1 TO WS-CNT.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-CNT : 0
    WS-CNT : 1
    WS-CNT : 2
    WS-CNT : 3
    

    Perform Times

    In ‘perform times’, a paragraph will be executed the number of times specified.

    Syntax

    Following is the syntax of perform times −

    PERFORM A-PARA 5 TIMES.
    

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    PROCEDURE DIVISION.
       A-PARA.
       PERFORM B-PARA 3 TIMES.
       STOP RUN.
       
       B-PARA.
       DISPLAY 'IN B-PARA'.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    IN B-PARA
    IN B-PARA
    IN B-PARA
    

    Perform Varying

    In perform varying, a paragraph will be executed till the condition in Until phrase becomes true.

    Syntax

    Following is the syntax of perform varying −

    PERFORM A-PARA VARYING A FROM 1 BY 1 UNTIL A = 5.
    

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-A PIC 9 VALUE 0.
    
    PROCEDURE DIVISION.
       A-PARA.
       PERFORM B-PARA VARYING WS-A FROM 1 BY 1 UNTIL WS-A=5
       STOP RUN.
       
       B-PARA.
       DISPLAY 'IN B-PARA ' WS-A.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    IN B-PARA 1
    IN B-PARA 2
    IN B-PARA 3
    IN B-PARA 4
    

    GO TO Statement

    GO TO statement is used to change the flow of execution in a program. In GO TO statements, transfer goes only in the forward direction. It is used to exit a paragraph. The different types of GO TO statements used are as follows −

    Unconditional GO TO

    GO TO para-name.
    

    Conditional GO TO

    GO TO para-1 para-2 para-3 DEPENDING ON x.
    

    If ‘x’ is equal to 1, then the control will be transferred to the first paragraph; and if ‘x’ is equal to 2, then the control will be transferred to the second paragraph, and so on.

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-A PIC 9 VALUE 2.
       
    PROCEDURE DIVISION.
       A-PARA.
       DISPLAY 'IN A-PARA'
       GO TO B-PARA.
       
       B-PARA.
       DISPLAY 'IN B-PARA '.
       GO TO C-PARA D-PARA DEPENDING ON WS-A.
       
       C-PARA.
       DISPLAY 'IN C-PARA '.
       
       D-PARA.
       DISPLAY 'IN D-PARA '.
       STOP RUN.

    JCL to execute the above COBOL program:

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result:

    IN A-PARA
    IN B-PARA 
    IN D-PARA 
    
  • Conditional Statements

    Conditional statements are used to change the execution flow depending on certain conditions specified by the programmer. Conditional statements will always evaluate to true or false. Conditions are used in IF, Evaluate, and Perform statements. The different types of conditions are as follows −

    • IF Condition Statement
    • Relation Condition
    • Sign Condition
    • Class Condition
    • Condition-Name Condition
    • Negated Condition
    • Combined Condition

    IF Condition Statement

    IF statement checks for conditions. If a condition is true, the IF block is executed; and if the condition is false, the ELSE block is executed.

    END-IF is used to end the IF block. To end the IF block, a period can be used instead of END-IF. But it is always preferable to use END-IF for multiple IF blocks.

    Nested-IF − IF blocks appearing inside another IF block. There is no limit to the depth of nested IF statements.

    Syntax

    Following is the syntax of IF condition statements −

    IF [condition] THEN
       [COBOL statements]
    ELSE
       [COBOL statements]
    END-IF.
    

    Example

    Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM1 PIC 9(9).
       01 WS-NUM2 PIC 9(9).
       01 WS-NUM3 PIC 9(5).
       01 WS-NUM4 PIC 9(6).
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       MOVE 25 TO WS-NUM1 WS-NUM3.
       MOVE 15 TO WS-NUM2 WS-NUM4.
       
       IF WS-NUM1 > WS-NUM2 THEN
    
      DISPLAY 'IN LOOP 1 - IF BLOCK'
      
      IF WS-NUM3 = WS-NUM4 THEN
         DISPLAY 'IN LOOP 2 - IF BLOCK'
      ELSE
         DISPLAY 'IN LOOP 2 - ELSE BLOCK'
      END-IF
      
    ELSE
      DISPLAY 'IN LOOP 1 - ELSE BLOCK'
    END-IF. STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    IN LOOP 1 - IF BLOCK
    IN LOOP 2 - ELSE BLOCK
    

    Relation Condition

    Relation condition compares two operands, either of which can be an identifier, literal, or arithmetic expression. Algebraic comparison of numeric fields is done regardless of size and usage clause.

    For non-numeric operands

    If two non-numeric operands of equal size are compared, then the characters are compared from left with the corresponding positions till the end is reached. The operand containing greater number of characters is declared greater.

    If two non-numeric operands of unequal size are compared, then the shorter data item is appended with spaces at the end till the size of the operands becomes equal and then compared according to the rules mentioned in the previous point.

    Syntax

    Given below is the syntax of Relation condition statements −

    [Data Name/Arithmetic Operation]
    
       [IS] [NOT] 
    
    [Equal to (=),Greater than (>), Less than (<), 
    Greater than or Equal (>=), Less than or equal (<=) ]
    
    [Data Name/Arithmetic Operation] 
    

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM1 PIC 9(9).
       01 WS-NUM2 PIC 9(9).
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       MOVE 25 TO WS-NUM1.
       MOVE 15 TO WS-NUM2.
       
       IF WS-NUM1 IS GREATER THAN OR EQUAL TO WS-NUM2 THEN
    
      DISPLAY 'WS-NUM1 IS GREATER THAN WS-NUM2'
    ELSE
      DISPLAY 'WS-NUM1 IS LESS THAN WS-NUM2'
    END-IF. STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program it produces the following result −

    WS-NUM1 IS GREATER THAN WS-NUM2
    

    Sign Condition

    Sign condition is used to check the sign of a numeric operand. It determines whether a given numeric value is greater than, less than, or equal to ZERO.

    Syntax

    Following is the syntax of Sign condition statements −

    [Data Name/Arithmetic Operation] 
    
       [IS] [NOT] 
    
    [Positive, Negative or Zero]
    
    [Data Name/Arithmetic Operation]
    

    Example

    Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM1 PIC S9(9) VALUE -1234.
       01 WS-NUM2 PIC S9(9) VALUE 123456.
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       IF WS-NUM1 IS POSITIVE THEN
    
      DISPLAY 'WS-NUM1 IS POSITIVE'.
      
    IF WS-NUM1 IS NEGATIVE THEN
      DISPLAY 'WS-NUM1 IS NEGATIVE'.
      
    IF WS-NUM1 IS ZERO THEN
      DISPLAY 'WS-NUM1 IS ZERO'.
      
    IF WS-NUM2 IS POSITIVE THEN
      DISPLAY 'WS-NUM2 IS POSITIVE'.
    STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program it produces the following result −

    WS-NUM1 IS NEGATIVE
    WS-NUM2 IS POSITIVE
    

    Class Condition

    Class condition is used to check if an operand contains only alphabets or numeric data. Spaces are considered in ALPHABETIC, ALPHABETIC-LOWER, and ALPHABETIC-UPPER.

    Syntax

    Following is the syntax of Class condition statements −

    [Data Name/Arithmetic Operation>]
    
       [IS] [NOT] 
    
    [NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER]
    
    [Data Name/Arithmetic Operation]
    

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM1 PIC X(9) VALUE 'ABCD '.
       01 WS-NUM2 PIC 9(9) VALUE 123456789.
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       
       IF WS-NUM1 IS ALPHABETIC THEN
    
      DISPLAY 'WS-NUM1 IS ALPHABETIC'.
      
    IF WS-NUM1 IS NUMERIC THEN
      DISPLAY 'WS-NUM1 IS NUMERIC'.
      
    IF WS-NUM2 IS NUMERIC THEN
      DISPLAY 'WS-NUM2 IS NUMERIC'.
    STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-NUM1 IS ALPHABETIC
    WS-NUM2 IS NUMERIC
    

    Condition-name Condition

    A condition-name is a user-defined name. It contains a set of values specified by the user. It behaves like Boolean variables. They are defined with level number 88. It will not have a PIC clause.

    Syntax

    Following is the syntax of user-defined condition statements −

    88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
    

    Example

    Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM PIC 9(3).
       88 PASS VALUES ARE 041 THRU 100.
       88 FAIL VALUES ARE 000 THRU 40.
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       MOVE 65 TO WS-NUM.
       
       IF PASS 
    
      DISPLAY 'Passed with ' WS-NUM ' marks'.
      
    IF FAIL
      DISPLAY 'FAILED with ' WS-NUM 'marks'.
      
    STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    Passed with 065 marks
    

    Negated Condition

    Negated condition is given by using the NOT keyword. If a condition is true and we have given NOT in front of it, then its final value will be false.

    Syntax

    Following is the syntax of Negated condition statements −

    IF NOT [CONDITION] 
       COBOL Statements
    END-IF.
    

    Example

    Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM1 PIC 9(2) VALUE 20.
       01 WS-NUM2 PIC 9(9) VALUE 25.
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       
       IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THEN
    
      DISPLAY 'IF-BLOCK'
    ELSE
      DISPLAY 'ELSE-BLOCK'
    END-IF. STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    ELSE-BLOCK
    

    Combined Condition

    A combined condition contains two or more conditions connected using logical operators AND or OR.

    Syntax

    Following is the syntax of combined condition statements −

    IF [CONDITION] AND [CONDITION]
       COBOL Statements
    END-IF.
    

    Example

    Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM1 PIC 9(2) VALUE 20.
       01 WS-NUM2 PIC 9(2) VALUE 25.
       01 WS-NUM3 PIC 9(2) VALUE 20.
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       
       IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THEN
    
      DISPLAY 'Both condition OK'
    ELSE
      DISPLAY 'Error'
    END-IF. STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    Both condition OK
    

    Evaluate Verb

    Evaluate verb is a replacement of series of IF-ELSE statement. It can be used to evaluate more than one condition. It is similar to SWITCH statement in C programs.

    Example

    Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-A PIC 9 VALUE 0.
       
    PROCEDURE DIVISION.
       MOVE 3 TO WS-A.
       
       EVALUATE TRUE
    
      WHEN WS-A &gt; 2
         DISPLAY 'WS-A GREATER THAN 2'
      WHEN WS-A &lt; 0
         DISPLAY 'WS-A LESS THAN 0'
      WHEN OTHER
         DISPLAY 'INVALID VALUE OF WS-A'
    END-EVALUATE. STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-A GREATER THAN 2
    
  • Data Layout

    COBOL layout is the description of use of each field and the values present in it. Following are the data description entries used in COBOL −

    • Redefines Clause
    • Renames Clause
    • Usage Clause
    • Copybooks

    Redefines Clause

    Redefines clause is used to define a storage with different data description. If one or more data items are not used simultaneously, then the same storage can be utilized for another data item. So the same storage can be referred with different data items.

    Syntax

    Following is the syntax for Redefines clause −

    01 WS-OLD PIC X(10).
    01 WS-NEW1 REDEFINES WS-OLD PIC 9(8).
    01 WS-NEW2 REDEFINES WS-OLD PIC A(10).
    

    Following are the details of the used parameters −

    • WS-OLD is Redefined Item
    • WS-NEW1 and WS-NEW2 are Redefining Item

    Level numbers of redefined item and redefining item must be the same and it cannot be 66 or 88 level number. Do not use VALUE clause with a redefining item. In File Section, do not use a redefines clause with 01 level number. Redefines definition must be the next data description you want to redefine. A redefining item will always have the same value as a redefined item.

    ExampleLive Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-DESCRIPTION.
       05 WS-DATE1 VALUE '20140831'.
       10 WS-YEAR PIC X(4).
       10 WS-MONTH PIC X(2).
       10 WS-DATE PIC X(2).
       05 WS-DATE2 REDEFINES WS-DATE1 PIC 9(8).
    
    PROCEDURE DIVISION.
       DISPLAY "WS-DATE1 : "WS-DATE1.
       DISPLAY "WS-DATE2 : "WS-DATE2.
    
    STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program it produces the following result −

    WS-DATE1 : 20140831
    WS-DATE2 : 20140831
    

    Renames Clause

    Renames clause is used to give different names to existing data items. It is used to re-group the data names and give a new name to them. The new data names can rename across groups or elementary items. Level number 66 is reserved for renames.

    Syntax

    Following is the syntax for Renames clause −

    01 WS-OLD.
    10 WS-A PIC 9(12).
    10 WS-B PIC X(20).
    10 WS-C PIC A(25).
    10 WS-D PIC X(12).
    66 WS-NEW RENAMES WS-A THRU WS-C.
    

    Renaming is possible at same level only. In the above example, WS-A, WS-B, and WS-C are at the same level. Renames definition must be the next data description you want to rename. Do not use Renames with the level numbers 01 or, 77. The data names used for renames must come in sequence. Data items with occur clause cannot be renamed.

    Example

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-DESCRIPTION.
       05 WS-NUM.
       10 WS-NUM1 PIC 9(2) VALUE 20.
       10 WS-NUM2 PIC 9(2) VALUE 56.
       05 WS-CHAR.
       10 WS-CHAR1 PIC X(2) VALUE 'AA'.
       10 WS-CHAR2 PIC X(2) VALUE 'BB'.
       66 WS-RENAME RENAMES WS-NUM2 THRU WS-CHAR2.
    
    PROCEDURE DIVISION.
       DISPLAY "WS-RENAME : " WS-RENAME.
       
    STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-RENAME : 56AABB
    

    Usage Clause

    Usage clause specifies the operating system in which the format data is stored. It cannot be used with level numbers 66 or 88. If usage clause is specified on a group, then all the elementary items will have the same usage clause. The different options available with Usage clause are as follows −

    Display

    Data item is stored in ASCII format and each character will take 1 byte. It is default usage.

    The following example calculates the number of bytes required −

    01 WS-NUM PIC S9(5)V9(3) USAGE IS DISPLAY.
    It requires 8 bytes as sign and decimal doesn't require any byte.
    
    01 WS-NUM PIC 9(5) USAGE IS DISPLAY.
    It requires 5 bytes as sign.

    COMPUTATIONAL / COMP

    Data item is stored in binary format. Here, data items must be integer.

    The following example calculates the number of bytes required −

    01 WS-NUM PIC S9(n) USAGE IS COMP.
    
    If 'n' = 1 to 4, it takes 2 bytes.
    If 'n' = 5 to 9, it takes 4 bytes.
    If 'n' = 10 to 18, it takes 8 bytes.

    COMP-1

    Data item is similar to Real or Float and is represented as a single precision floating point number. Internally, data is stored in hexadecimal format. COMP-1 does not accept PIC clause. Here 1 word is equal to 4 bytes.

    COMP-2

    Data item is similar to Long or Double and is represented as double precision floating point number. Internally, data is stored in hexadecimal format. COMP-2 does not specify PIC clause. Here 2 word is equal to 8 bytes.

    COMP-3

    Data item is stored in packed decimal format. Each digit occupies half a byte (1 nibble) and the sign is stored at the rightmost nibble.

    The following example calculates the number of bytes required −

    01 WS-NUM PIC 9(n) USAGE IS COMP.
    Number of bytes = n/2 (If n is even)
    Number of bytes = n/2 + 1(If n is odd, consider only integer part)
    
    01 WS-NUM PIC 9(4) USAGE IS COMP-3 VALUE 21.
    It requires 2 bytes of storage as each digit occupies half a byte.
    
    01 WS-NUM PIC 9(5) USAGE IS COMP-3 VALUE 21.
    It requires 3 bytes of storage as each digit occupies half a byte.

    AD

    https://delivery.adrecover.com/recover.html?siteId=18107&dataDogLoggingEnabled=false&dataDogLoggingVersion=1

    Copybooks

    A COBOL copybook is a selection of code that defines data structures. If a particular data structure is used in many programs, then instead of writing the same data structure again, we can use copybooks. We use the COPY statement to include a copybook in a program. COPY statement is used in the WorkingStorage Section.

    The following example includes a copybook inside a COBOL program −

    DATA DIVISION.
    WORKING-STORAGE SECTION.
    COPY ABC.

    Here ABC is the copybook name. The following data items in ABC copybook can be used inside a program.

    01 WS-DESCRIPTION.
       05 WS-NUM.
    
      10 WS-NUM1 PIC 9(2) VALUE 20.
      10 WS-NUM2 PIC 9(2) VALUE 56.
    05 WS-CHAR.
      10 WS-CHAR1 PIC X(2) VALUE 'AA'.
      10 WS-CHAR2 PIC X(2) VALUE 'BB'.</code></pre>
  • Data Types

    Data Division is used to define the variables used in a program. To describe data in COBOL, one must understand the following terms −

    • Data Name
    • Level Number
    • Picture Clause
    • Value Clause
    01            TOTAL-STUDENTS            PIC9(5)            VALUE '125'.
    |                    |                    |                    |
    |                    |                    |                    |
    |                    |                    |                    | 
    Level Number     Data Name           Picture Clause       Value Clause
    

    Data Name

    Data names must be defined in the Data Division before using them in the Procedure Division. They must have a user-defined name; reserved words cannot be used. Data names give reference to the memory locations where actual data is stored. They can be elementary or group type.

    Example

    The following example shows valid and invalid data names −

    Valid:
       WS-NAME
       TOTAL-STUDENTS
       A100
       100B
    
    Invalid:
       MOVE            (Reserved Words)
       COMPUTE         (Reserved Words)
       100             (No Alphabet)
       100+B           (+ is not allowed) 

    Level Number

    Level number is used to specify the level of data in a record. They are used to differentiate between elementary items and group items. Elementary items can be grouped together to create group items.

    Sr.No.Level Number & Description
    101Record description entry
    202 to 49Group and Elementary items
    366Rename Clause items
    477Items which cannot be sub-divided
    588Condition name entry
    • Elementary items cannot be divided further. Level number, Data name, Picture clause, and Value clause (optional) are used to describe an elementary item.
    • Group items consist of one or more elementary items. Level number, Data name, and Value clause (optional) are used to describe a group item. Group level number is always 01.

    Example

    The following example shows Group and Elementary items −

    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 WS-NAME    PIC X(25).                               ---> ELEMENTARY ITEM 
    01 WS-CLASS   PIC 9(2)  VALUE  '10'.                   ---> ELEMENTARY ITEM
    
    01 WS-ADDRESS.                                         ---> GROUP ITEM   
       05 WS-HOUSE-NUMBER    PIC 9(3).                     ---> ELEMENTARY ITEM
       05 WS-STREET          PIC X(15).                    ---> ELEMENTARY ITEM
       05 WS-CITY            PIC X(15).                    ---> ELEMENTARY ITEM
       05 WS-COUNTRY         PIC X(15)  VALUE 'INDIA'.     ---> ELEMENTARY ITEM

    Picture Clause

    Picture clause is used to define the following items −

    • Data type can be numeric, alphabetic, or alphanumeric. Numeric type consists of only digits 0 to 9. Alphabetic type consists of letters A to Z and spaces. Alphanumeric type consists of digits, letters, and special characters.
    • Sign can be used with numeric data. It can be either + or –.
    • Decimal point position can be used with numeric data. Assumed position is the position of decimal point and not included in the data.
    • Length defines the number of bytes used by the data item.

    Symbols used in a Picture clause −

    Sr.No.Symbol & Description
    19Numeric
    2AAlphabetic
    3XAlphanumeric
    4VImplicit Decimal
    5SSign
    6PAssumed Decimal

    Example

    The following example shows the use of PIC clause −

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM1 PIC S9(3)V9(2).
       01 WS-NUM2 PIC PPP999.
       01 WS-NUM3 PIC S9(3)V9(2) VALUE -123.45.
       01 WS-NAME PIC A(6) VALUE 'ABCDEF'.
       01 WS-ID PIC X(5) VALUE 'A121$'.
    
    PROCEDURE DIVISION.
       DISPLAY "WS-NUM1 : "WS-NUM1.
       DISPLAY "WS-NUM2 : "WS-NUM2.
       DISPLAY "WS-NUM3 : "WS-NUM3.
       DISPLAY "WS-NAME : "WS-NAME.
       DISPLAY "WS-ID : "WS-ID.
    STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-NUM1 : +000.00
    WS-NUM2 : .000000
    WS-NUM3 : -123.45
    WS-NAME : ABCDEF
    WS-ID : A121$
    

    Value Clause

    Value clause is an optional clause which is used to initialize the data items. The values can be numeric literal, alphanumeric literal, or figurative constant. It can be used with both group and elementary items.

    Example

    The following example shows the use of VALUE clause −

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NUM1 PIC 99V9 VALUE IS 3.5.
       01 WS-NAME PIC A(6) VALUE 'ABCD'.
       01 WS-ID PIC 99 VALUE ZERO.
    
    PROCEDURE DIVISION.
       DISPLAY "WS-NUM1 : "WS-NUM1.
       DISPLAY "WS-NAME : "WS-NAME.
       DISPLAY "WS-ID   : "WS-ID.
    STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    WS-NUM1 : 03.5
    WS-NAME : ABCD
    WS-ID   : 00
    
  • Basic Syntax

    Character Set

    ‘Characters’ are lowest in the hierarchy and they cannot be divided further. The COBOL Character Set includes 78 characters which are shown below −

    Sr.No.Character & Description
    1A-ZAlphabets(Upper Case)
    2a-zAlphabets (Lower Case)
    30-9Numeric
    4 Space
    5+Plus Sign
    6Minus Sign or Hyphen
    7*Asterisk
    8/Forward Slash
    9$Currency Sign
    10,Comma
    11;Semicolon
    12.Decimal Point or Period
    13Quotation Marks
    14(Left Parenthesis
    15)Right Parenthesis
    16>Greater than
    17<Less than
    18:Colon
    19Apostrophe
    20=Equal Sign

    Coding Sheet

    The source program of COBOL must be written in a format acceptable to the compilers. COBOL programs are written on COBOL coding sheets. There are 80 character positions on each line of a coding sheet.

    Character positions are grouped into the following five fields −

    PositionsFieldDescription
    1-6Column NumbersReserved for line numbers.
    7IndicatorIt can have Asterisk (*) indicating comments, Hyphen (-) indicating continuation and Slash ( / ) indicating form feed.
    8-11Area AAll COBOL divisions, sections, paragraphs and some special entries must begin in Area A.
    12-72Area BAll COBOL statements must begin in area B.
    73-80Identification AreaIt can be used as needed by the programmer.

    Example

    The following example shows a COBOL coding sheet −

    000100 IDENTIFICATION DIVISION.                                         000100
    000200 PROGRAM-ID. HELLO.                                               000101
    000250* THIS IS A COMMENT LINE                                          000102
    000300 PROCEDURE DIVISION.                                              000103
    000350 A000-FIRST-PARA.                                                 000104
    000400     DISPLAY “Coding Sheet”.                                      000105
    000500 STOP RUN.                                                        000106

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    Coding Sheet
    

    Character Strings

    Character strings are formed by combining individual characters. A character string can be a

    • Comment,
    • Literal, or
    • COBOL word.

    All character strings must be ended with separators. A separator is used to separate character strings.

    Frequently used separators − Space, Comma, Period, Apostrophe, Left/Right Parenthesis, and Quotation mark.

    Comment

    A comment is a character string that does not affect the execution of a program. It can be any combination of characters.

    There are two types of comments −

    Comment Line

    A comment line can be written in any column. The compiler does not check a comment line for syntax and treats it for documentation.

    Comment Entry

    Comment entries are those that are included in the optional paragraphs of an Identification Division. They are written in Area B and programmers use it for reference.

    The text highlighted in Bold are the commented entries in the following example −

    000100 IDENTIFICATION DIVISION.                                         000100
    000150 PROGRAM-ID. HELLO.                                               000101 
    000200 AUTHOR. TUTORIALSPOINT.                                          000102
    000250* THIS IS A COMMENT LINE                                          000103
    000300 PROCEDURE DIVISION.                                              000104
    000350 A000-FIRST-PARA.                                                 000105  
    000360/ First Para Begins - Documentation Purpose                       000106
    000400     DISPLAY “Comment line”.                                      000107
    000500 STOP RUN.                                                        000108

    JCL to execute above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    Comment Line
    

    Literal

    Literal is a constant that is directly hard-coded in a program. In the following example, “Hello World” is a literal.

    PROCEDURE DIVISION.
    DISPLAY 'Hello World'.

    There are two types of literals as discussed below −

    Alphanumeric Literal

    Alphanumeric Literals are enclosed in quotes or apostrophe. Length can be up to 160 characters. An apostrophe or a quote can be a part of a literal only if it is paired. Starting and ending of the literal should be same, either apostrophe or quote.

    Example

    The following example shows valid and invalid Alphanumeric Literals −

    Valid:
       ‘This is valid’
       "This is valid"
       ‘This isn’’t invalid’
    
    Invalid:
       ‘This is invalid”
       ‘This isn’t valid’

    Numeric Literal

    A Numeric Literal is a combination of digits from 0 to 9, +, –, or decimal point. Length can be up to 18 characters. Sign cannot be the rightmost character. Decimal point should not appear at the end.

    Example

    The following example shows valid and invalid Numeric Literals −

    Valid:
       100
       +10.9
       -1.9
    
    Invalid:
       1,00
       10.
       10.9-

    COBOL Word

    COBOL Word is a character string that can be a reserved word or a user-defined word. Length can be up to 30 characters.

    User-Defined

    User-defined words are used for naming files, data, records, paragraph names, and sections. Alphabets, digits, and hyphens are allowed while forming userdefined words. You cannot use COBOL reserved words.

    Reserved Words

    Reserved words are predefined words in COBOL. Different types of reserved words that we use frequently are as follows −

    • Keywords like ADD, ACCEPT, MOVE, etc.
    • Special characters words like +, -, *, <, <=, etc
    • Figurative constants are constant values like ZERO, SPACES, etc. All the constant values of figurative constants are mentioned in the following table.

    Figurative Constants

    Sr.No.Figurative Constants & Description
    1HIGH-VALUESOne or more characters which will be at the highest position in descending order.
    2LOW-VALUESOne or more characters have zeros in binary representation.
    3ZERO/ZEROESOne or more zero depending on the size of the variable.
    4SPACESOne or more spaces.
    5QUOTESSingle or double quotes.
    6ALL literalFills the data-item with Literal.
  • Program Structure

    A COBOL program structure consists of divisions as shown in the following image −

    Program Structure

    A brief introduction of these divisions is given below −

    • Sections are the logical subdivision of program logic. A section is a collection of paragraphs.
    • Paragraphs are the subdivision of a section or division. It is either a user-defined or a predefined name followed by a period, and consists of zero or more sentences/entries.
    • Sentences are the combination of one or more statements. Sentences appear only in the Procedure division. A sentence must end with a period.
    • Statements are meaningful COBOL statements that perform some processing.
    • Characters are the lowest in the hierarchy and cannot be divisible.

    You can co-relate the above-mentioned terms with the COBOL program in the following example −

    PROCEDURE DIVISION.
    A0000-FIRST-PARA SECTION.
    FIRST-PARAGRAPH.
    ACCEPT WS-ID            - Statement-1  -----|
    MOVE '10' TO WS-ID      - Statement-2       |-- Sentence - 1
    DISPLAY WS-ID           - Statement-3  -----|
    .

    Divisions

    A COBOL program consists of four divisions.

    Identification Division

    It is the first and only mandatory division of every COBOL program. The programmer and the compiler use this division to identify the program. In this division, PROGRAM-ID is the only mandatory paragraph. PROGRAM-ID specifies the program name that can consist 1 to 30 characters.

    Try the following example using the Live Demo option online.Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    PROCEDURE DIVISION.
    DISPLAY 'Welcome to Tutorialspoint'.
    STOP RUN.

    Given below is the JCL to execute the above COBOL program.

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    Welcome to Tutorialspoint
    

    Environment Division

    Environment division is used to specify input and output files to the program. It consists of two sections −

    • Configuration section provides information about the system on which the program is written and executed. It consists of two paragraphs −
      • Source computer − System used to compile the program.
      • Object computer − System used to execute the program.
    • Input-Output section provides information about the files to be used in the program. It consists of two paragraphs −
      • File control − Provides information of external data sets used in the program.
      • I-O control − Provides information of files used in the program.
    ENVIRONMENT DIVISION.
    CONFIGURATION SECTION.
       SOURCE-COMPUTER. XXX-ZOS.
       OBJECT-COMPUTER. XXX-ZOS.
    
    INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT FILEN ASSIGN TO DDNAME
       ORGANIZATION IS SEQUENTIAL.

    Data Division

    Data division is used to define the variables used in the program. It consists of four sections −

    • File section is used to define the record structure of the file.
    • Working-Storage section is used to declare temporary variables and file structures which are used in the program.
    • Local-Storage section is similar to Working-Storage section. The only difference is that the variables will be allocated and initialized every time a program starts execution.
    • Linkage section is used to describe the data names that are received from an external program.

    COBOL Program

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT FILEN ASSIGN TO INPUT.
    
      ORGANIZATION IS SEQUENTIAL.
      ACCESS IS SEQUENTIAL.
    DATA DIVISION. FILE SECTION. FD FILEN 01 NAME PIC A(25). WORKING-STORAGE SECTION. 01 WS-STUDENT PIC A(30). 01 WS-ID PIC 9(5). LOCAL-STORAGE SECTION. 01 LS-CLASS PIC 9(3). LINKAGE SECTION. 01 LS-ID PIC 9(5). PROCEDURE DIVISION. DISPLAY 'Executing COBOL program using JCL'. STOP RUN.

    The JCL to execute the above COBOL program is as follows −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO
    //INPUT DD DSN = ABC.EFG.XYZ,DISP = SHR

    When you compile and execute the above program, it produces the following result −

    Executing COBOL program using JCL
    

    Procedure Division

    Procedure division is used to include the logic of the program. It consists of executable statements using variables defined in the data division. In this division, paragraph and section names are user-defined.

    There must be at least one statement in the procedure division. The last statement to end the execution in this division is either STOP RUN which is used in the calling programs or EXIT PROGRAM which is used in the called programs.Live Demo

    IDENTIFICATION DIVISION.
    PROGRAM-ID. HELLO.
    
    DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NAME PIC A(30).
       01 WS-ID PIC 9(5) VALUE 12345.
    
    PROCEDURE DIVISION.
       A000-FIRST-PARA.
       DISPLAY 'Hello World'.
       MOVE 'TutorialsPoint' TO WS-NAME.
       DISPLAY "My name is : "WS-NAME.
       DISPLAY "My ID is : "WS-ID.
    STOP RUN.

    JCL to execute the above COBOL program −

    //SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C
    //STEP1 EXEC PGM = HELLO

    When you compile and execute the above program, it produces the following result −

    Hello World
    My name is : TutorialsPoint
    My ID is : 12345