The DO-loop should now be ended with the statement END DO and we no longer need any statement number. In addition, we can use the statement EXIT to jump out of the DO-loop and CYCLE in order to go to the next iteration of the present DO-loop. A DO-loop can be assigned a name, which is done by giving the name before the DO and followed by a colon. In addition the final END DO can be followed by the name of the DO-loop.
SUMMA = 0.0 ADAM : DO I = 1, 10 X = TAB(I) EVA : DO J = 1, 20 IF (X > TAB(J)) CYCLE ADAM X = X + TAB(J) END DO EVA SUMMA = SUMMA + X IF (SUMMA >= 17.0) EXIT ADAM END DO ADAMIn the example above, the execution of the inner loop will be interrupted with a jump to the next cycle of the outer loop, and thus the variable sum or SUMMA will not be increased, if X is greater than the given table value. As soon as the sum is at least 17 the outer loop is also interrupted.
If no name is given in the EXIT or CYCLE statements the present inner loop is automatically used. With the present inner loop I mean the one where the EXIT or CYCLE statements being executed are. These statements then replace the GOTO to the final statement, which was often used in the old DO-loop. This final statement usually was a CONTINUE statement.
An IF statement can also be given a name. In that case the corresponding END IF ought to be followed by that name.
A new construct in standard Fortran is CASE. It appeared, however, in many Fortran dialects before. It can choose a suitable case for a scalar argument of type INTEGER, LOGICAL or CHARACTER. A simple example is based on an integer IVAR.
SELECT CASE (IVAR) CASE (:-1) ! all negative numbers WRITE (*,*) 'Negative number' CASE (0) ! zero case WRITE (*,*) ' Zero' CASE (1:9) ! one-digit number WRITE (*,*) ' Digit ', IVAR CASE (10:99) ! two-digit number WRITE (*,*) ' Number ', IVAR CASE DEFAULT ! all remaining cases WRITE (*,*) ' Number too big' END SELECTIt is not permitted with overlapping arguments. This means that one single argument may not satisfy more than one of the cases of CASE. The default case does not have to be included. If no valid case is found the execution will continue with the first statement after the END SELECT. I recommend that you include a DEFAULT and then give an error message if an argument has a not permitted value.
It is recommended to use the CASE instead of an assigned or computed GOTO statement, or an arithmetic IF-statement.
(6.2) Write a DO-loop that adds the square roots of 100 given
numbers, but skips negative numbers and concludes the addition
if the present value is zero.