IDENTIFICATION DIVISION.
PROGRAM-ID. IF-STRUCTURES-AND-CONDITIONS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STUDENT-AVERAGE PIC 999V9 VALUE 89.4.
01 LETTER-GRADE PIC X.
01 I
PIC 9.
PROCEDURE DIVISION.
100-start-program.
200-CHECK-IF-STMT.
* IF STATEMENT
* the word THEN
after
the condition is optional
* execution - if
condition is true execute statement(s),
* go to end
of structure and continue.
* question - where
is
the end of the structure?!
IF
STUDENT-AVERAGE >= 90 MOVE "A" TO LETTER-GRADE.
IF
STUDENT-AVERAGE >=80 AND < 90 MOVE "B" TO LETTER-GRADE.
IF
STUDENT-AVERAGE >=70 AND <80 MOVE "C" TO LETTER-GRADE.
IF
STUDENT-AVERAGE >=60 AND < 70 MOVE "D" TO LETTER-GRADE.
IF
STUDENT-AVERAGE < 60 MOVE "E" TO LETTER-GRADE.
DISPLAY
"LETTER-GRADE = " LETTER-GRADE.
ACCEPT
OMITTED.
* period on just
stop
run - does not work without periods!
* period on display,
accept omitted, and stop run only (delete
* periods on
IF stmts - no output, but does top for
* accept
omitted
* period after every
statement - works perfect!
* end-if after every
IF, no periods - works perfect
* what would output
if no AND portion on conditions?
******************************************************************
300-CHECK-IF-ELSE-STMT.
* IF-ELSE STATEMENT
* execution - if
condition is true execute statement(s) between
* condition
and else; if condition is
false, execute
* statements in
the else portion; only one set of statements
* is
executed; once executed, go to end
of structure and
* continue.
* match ELSE to
closest IF above it
* match end of
structure from inside out!
IF
STUDENT-AVERAGE >= 90
MOVE
"A" TO LETTER-GRADE
else
IF
STUDENT-AVERAGE >=80 AND < 90
MOVE "B" TO LETTER-GRADE
else
IF STUDENT-AVERAGE >=70 AND <80
MOVE "C" TO LETTER-GRADE
else
IF STUDENT-AVERAGE >=60 AND < 70
MOVE "D" TO LETTER-GRADE
else
IF STUDENT-AVERAGE < 60
MOVE
"E" TO LETTER-GRADE
end-if
end-if
end-if
end-if
end-if
DISPLAY
"LETTER-GRADE = " LETTER-GRADE
ACCEPT
OMITTED.
* if put one end-if
-
no output
* if put one end-if
and a period - will work
* delete AND portion
and will still work
* indentation does
NOT matter, but makes more readable!
******************************************************************
400-CHECK-IF-INSIDE-PERFORM.
PERFORM
3 TIMES
IF
STUDENT-AVERAGE >= 90
MOVE "A" TO LETTER-GRADE
END-IF
IF
STUDENT-AVERAGE >=80 AND < 90
MOVE "B" TO LETTER-GRADE
END-IF
IF
STUDENT-AVERAGE >=70 AND <80
MOVE "C" TO LETTER-GRADE
END-IF
IF
STUDENT-AVERAGE >=60 AND < 70
MOVE "D" TO LETTER-GRADE
END-IF
IF STUDENT-AVERAGE < 60
MOVE "E" TO LETTER-GRADE
END-IF
DISPLAY "LETTER-GRADE = " LETTER-GRADE
END-PERFORM.
ACCEPT
OMITTED.
* what if put one
period after first end-if?
* syntax error! end-perform
required, unmatched end-perform
* what if put a
period after display and no end-perform?
* syntax error! end-perform required
500-ONE-MORE-TIME.
MOVE 1 TO I.
PERFORM
600-DO-IF-STRUCTURE UNTIL I > 3.
ACCEPT
OMITTED.
STOP
RUN.
600-DO-IF-STRUCTURE.
IF
STUDENT-AVERAGE >= 90 MOVE "A" TO LETTER-GRADE.
IF
STUDENT-AVERAGE >=80 AND < 90 MOVE "B" TO LETTER-GRADE.
IF
STUDENT-AVERAGE >=70 AND <80 MOVE "C" TO LETTER-GRADE.
IF
STUDENT-AVERAGE >=60 AND < 70 MOVE "D" TO LETTER-GRADE.
IF
STUDENT-AVERAGE < 60 MOVE "E" TO LETTER-GRADE.
DISPLAY
"LETTER-GRADE = " LETTER-GRADE.
ADD 1 TO
I.
* what if forget
above statement?! infinite loop
* what if no period
after perform/until? works fine
* what forgot ACCEPT
OMITTED and STOP RUN at bottom of 500 para?