integer i, n, sum sum = 0 do 10 i = 1, n sum = sum + i write(*,*) 'i =', i write(*,*) 'sum =', sum 10 continueThe number 10 is a statement label. Typically, there will be many loops and other statements in a single program that require a statement label. The programmer is responsible for assigning a unique number to each label in each program (or subprogram). Recall that column positions 2-5 are reserved for statement labels. The numerical value of statement labels have no significance, so any integer numbers can be used. Typically, most programmers increment labels by 10 at a time.
The variable defined in the do-statement is incremented by 1 by default. However, you can define any other integer to be the step. This program segment prints the even numbers between 1 and 10 in decreasing order:
integer i do 20 i = 10, 1, -2 write(*,*) 'i =', i 20 continue
The general form of the do loop is as follows:
do label var = expr1, expr2, expr3 statements label continuevar is the loop variable (often called the loop index) which must be integer. expr1 specifies the initial value of var, expr2 is the terminating bound, and expr3 is the increment (step).
Note: The do-loop variable must never be changed by other statements within the loop! This will cause great confusion.
Many Fortran 77 compilers allow do-loops to be closed by the enddo statement. The advantage of this is that the statement label can then be omitted since it is assumed that an enddo closes the nearest previous do statement. The enddo construct is widely used, but it is not a part of ANSI Fortran 77.
while (logical expr) do statements enddoor alternatively,
do while (logical expr) statements enddoThe statements in the body will be repeated as long as the condition in the while statement is true. Even though this syntax is accepted by many compilers, it is not ANSI Fortran 77. The correct way is to use if and goto:
label if (logical expr) then statements goto label endif
Here is an example that calculates and prints all the powers of two that are less than or equal to 100:
integer n n = 1 10 if (n .le. 100) then n = 2*n write (*,*) n goto 10 endif
do statements until (logical expr)Again, this should be implemented in Fortran 77 by using if and goto:
label continue statements if (logical expr) goto labelNote that the logical expression in the latter version should be the negation of the expression given in the pseudocode!
do i = 10, 1, -2 write(*,*) 'i =', i end doFor while and until loops you also use the do-enddo construct, but you have to add a conditional exit statement. The general case is:
do statements if (logical expr) exit statements end doIf you have the exit condition at the beginning it is a while loop, and if it is at the end you have an until loop.
i = 1 while (i<100) do sum = sum + i i = i+2 enddo i = 0 x = 1.0 repeat x = f(x) i = i+1 until (x<0) write(*,*) i, x
i = 1 sum = 0 10 do 20 i = 1, 50 if (i .gt. 10) goto 30 sum = sum + i 20 continue 30 if (i. le. 20) then sum = sum - 1 goto 20 else sum = 2*sum endif write(*,*) 'Sum =', sum