The THEN part and the ELSE part, if any, can contain one or more IF-THEN-ELSE-END IF statement in one of the three forms. That is, when you feel it is necessary, you can use as many IF-THEN-ELSE-END IF statements in the THEN part and the ELSE part as you want. However, please note that any such IF-THEN-ELSE-END IF must be fully contained in the THEN part or the ELSE part. If you follow the box trick, this requirement is automatically satisfied. The following is an example:
IF (logical-expression) THEN statements IF (logical-expression) THEN statements ELSE statements END IF statements ELSE statements IF (logical-expression) THEN statements END IF statements END IF
Let us start testing if x is positive. What we get is the following:
x > 0 | display + |
one down (i.e., +) two to go (i.e., - and 0) |
In the lower part, no decision can been reached. What we want to know is finding out is x is zero or negative (x cannot be positive here since it has been ruled out in the upper part). To determine whether a - or a 0 should be displayed, one more decision is required:
x < 0 | display - |
display 0) |
Since this is the work for the lower rectangle, let us put it there yielding the following:
x > 0 | display + | |
x < 0 | display - | |
display 0 |
Converting to a IF-THEN-ELSE-END IF construct is easy since the above box is almost identical to that. So, here is our answer:
IF (x > 0) THEN WRITE(*,*) '+' ELSE IF (x < 0) THEN WRITE(*,*) '-' ELSE WRITE(*,*) '0' END IF END IF
Obviously, this problem cannot be solved with a two-way IF and the box trick becomes useful. Let us start with x<0.
x < 0 | display -x |
here we have x >= 0 |
For the x >= 0 part, x may be in the range of 0 and 1; if not, x must be greater than 1 since x cannot be less than 0. Therefore, we have the following box for the case of x >= 0:
x <= 1 | x is in the range of 0 and 1. display x*x |
here we have x > 1. display 2*x |
Inserting this box into the previous one yields the following final result:
x < 0 | display -x | |
x <= 1 | display x*x | |
display 2*x |
Converting to using IF, we have the following:
IF (x < 0) THEN WRITE(*,*) -x ELSE IF (x <= 1) THEN WRITE(*,*) x*x ELSE WRITE(*,*) 2*x END IF END IF
There are many solutions to this problem; but, we shall use the box trick again. Let us pick two numbers, say a and b. Thus, we get the following:
a < b | a has the potential to be the smallest |
since b <= a, b has the potential to be the smallest |
Now we know a possible smallest number. To find the real smallest one, this "possible" number must be compared against c. If the possible one is a (the upper part), we need to do the following:
a < c | a is the smallest |
since c <= a and b <= a, c is the smallest |
Let us turn to the lower part, where b has the potential to be the smallest. Comparing with c yields:
b < c | b is the smallest |
since c <= b and b <= a, c is the smallest |
Inserting the above two boxes into the first one yields the following complete solution:
a < b | a < c | the smallest is a |
the smallest is c | ||
b < c | the smallest is b | |
the smallest is c |
Converting to the IF version, we have
The above code segment uses variable Result to hold the smallest value.IF (a < b) THEN IF (a < c) THEN Result = a ELSE Result = c END IF ELSE IF (b < c) THEN Result = b ELSE Result = c END IF END IF WRITE(*,*) 'The smallest is ', Result