Computational
FORTRAN
FORTRAN Loops | FORTRAN Loops | |
| For repeated execution of similar things, loops are used. If you are familiar with other programming languages you have probably heard about for-loops, while-loops, and until-loops.
Fortran 77 has only one loop construct, called the do-loop. The do-loop corresponds to what is known as a for-loop in otherlanguages. Other loop constructs have to be simulated using the if and goto statements. do-loops The do-loop is used for simple counting. Here is a simple example that prints the cumulative sums of theintegers from 1 through n (assume n has been assigned a value elsewhere): integer i, n, sum sum = 0 do 10 i = 1, n sum = sum + i write(*,*) 'i =', i write(*,*) 'sum =', sum 10 continue The number 10 is a statement label. Typically, there will be many loops and other statements in a singleprogram that require a statement label. The programmer is responsible for assigning a unique number toeach label in each program (or subprogram). Recall that column positions 2-5 are reserved for statementlabels. 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 otherinteger to be the step. This program segment prints the even numbers between 1 and 10 in decreasingorder: 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 continue var is the loop variable (often called the loop index) which must be integer. expr1 specifies the initial valueof 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 causegreat confusion. Many Fortran 77 compilers allow do-loops to be closed by the enddo statement. The advantage of this isthat the statement label can then be omitted since it is assumed that an enddo closes the nearest previous dostatement. The enddo construct is widely used, but it is not a part of ANSI Fortran 77. while-loops The most intuitive way to write a while-loop is while (logical expr) do statements enddo or alternatively, do while (logical expr) statements enddo The statements in the body will be repeated as long as the condition in the while statement is true. Eventhough this syntax is accepted by many compilers, it is not ANSI Fortran 77. The correct way is to use ifand 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 until-loops If the termination criterion is at the end instead of the beginning, it is often called an until-loop. Thepseudocode looks like this: 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 label Note that the logical expression in the latter version should be the negation of the expression given in thepseudocode! |
| Main Menu |
|---|
| |