When writing F77 codes, you will often encounter a situation in which you need to periodically
repeat a certain part of your code. This occurred also in our program factorial, where we had
to multiply numbers from 2 to the number whose factorial is being calculated.
Generally, each do-enddo loop starts with statement do par=from,to,step by assigning
the parameter par value from. The next operation is checking whether
par![]()
to (if step>0) or par![]()
to (if
step<0). If this condition is not true, the program jumps after the do-enddo body
without executing the statements inside the loop. This may occur when counting the parameter with a
negative step, do i=1,5,-1, or if the step is positive (e.g. +1) but the limits are reversed,
do i=5,1.
At the end of each loop, the program updates the value of par by executing
par = par+step and continues, provided that par did not exceed to. Once
par exceeds the value stored in to, the program exits the loop and continues in
interpreting the following commands. Note that if step is omitted, F77 automatically
substitutes step = 1.
Problem: Write a program which calculates and prints the values of function
for
from 1 to 10000 with step 100. Note that for
the function converges to
, base of the natural logarithm.
Solution:
do n=1,1e4,100
eval = (1+1.0/n)**n
write(*,'("n = ", I5, ", e = ", F6.4)')
+ n,eval
enddo
The loop starts by assigning n=1. In the first execution of the loop, the program calculates
the magnitude of
for
which gives 2 and prints n = 1, e = 2.0000. The
magnitude of n is then increased by 1. The second execution occurs with n = 2, giving
n = 2, e = 2.2500. The loop finishes once n attains the value 1e4 (10000) for
which the output would be n = 10000, e = 2.7183.
Roman Gröger (2015-09-23)