integer i, n, sum
sum = 0
do 10 i = 1, n
sum = sum + i
write(*,*) 'i =', i
write(*,*) 'sum =', sum
10 continue
숫자 10 은 문장 번호 label이다. 보통 한 프로그램 안에 문장 번호가 필요한 loop와 다른 문장이 많이 있다. 각각의 프로그램 (또는 부프로그램) 안에서 고유의 문장 번호를 부여하도록 주의하여야 한다. 칸 (column) 2-5는 이 문장 번호를 적는 곳이다. 문장 번호롤 사용하는 숫자는 의미가 없으므로 어떤한 정수를 사용하여도 관계없다. 보통 한 번에 10씩 증가하도록 한다.
do-문장에서 정의한 변수는 특별한 명려이 없는 한 1씩 증가한다. 그러나 step 을 사용하여 그 증가량을 다른 정수로 바꿀 수 있다. 다음은 1부터 10사이의 짝수를 큰 수부터 인쇄하는 프로그램이다.
integer i
do 20 i = 10, 1, -2
write(*,*) 'i =', i
20 continue
do loop의 일반적인 형태는 다음과 같다.
do label var = expr1, expr2, expr3
statements
label continue
var 는 loop 변수 (또는 loop index라고도 한다)는 정수형태이어야 한다.
expr1 는 var의 초기값,
expr2 는 종료 한계이고 expr3
는 증가(step)이다.
주의 : do-loop 변수를 loop 안에서 다른 방법으로 바꾸어서는 안된다. 이 경우 심각한 혼란을 초래한다.
많은 Fortran 77 compiler에서 do-loop를 enddo 문장으로 끝낼 수 있도록 한다. 이 경우의 장점은 enddo가 앞에서 사용한 가장 최근의 do 문장의 끝을 의미하므로 문장 번호를 사용하지 않아도 된다는 점이다. enddo 구조는 상당히 많이 사용되지만 표준 ANSI Fortran 77은 아니다.
while (logical expr) do
statements
enddo
이거나
do while (logical expr)
statements
enddo
이다. while 문이 참(true)인 한 내부의 문장들을 반복한다. 이 syntax를 여러 컴퓨터에서 사용할 수 있기는 하나
ANSI Fortran 77은 아니다.
올바른 방법은 if와 goto를 사용하는 것이다.
label if (logical expr) then
statements
goto label
endif
다음은 100보다 작거나 같은 수를 2의 지수로 하여 그 값을 계산하고 인쇄하는 프로그램이다.
integer n
n = 1
10 if (n .le. 100) then
n = 2*n
write (*,*) n
goto 10
endif
do
statements
until (logical expr)
Fortran 77에서는 이 역시 if와 goto를 사용하여 구성하여야 한다.
label continue
statements
if (logical expr) goto label
마지막의 논리식이 유사 코드의 논리식의 부정이어야 한다는 점을 주의하라.
do i = 10, 1, -2
write(*,*) 'i =', i
end do
while 과 until loop도 do-enddo 구조로 구성할 수 있으나 conditional exit 문을 더하여야 한다. 일반적인 경우에는
do
statements
if (logical expr) exit
statements
end do
exit 조건이 앞에 있으면 while loop이고 맨 뒤에 있으면 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