2012-10-28 2 views

답변

3

이되어 있지 재귀가 (당신이에서이 용어를 어디서 얻었는지 확실하지)를 읽을 인라인 이는 구문, 예를 들어, here를 참조 루프을 암시 중첩 의 예입니다 묵시적인 do 루프와 이들의 많은 예가 실제로 사용됩니다. 기본적으로 함축 된 do 루프는 한 줄에 do 루프를 작성하는 방법입니다. 중첩 된 묵시적 do 루프를 사용하면 한 줄에 여러 개의 do 루프를 작성할 수 있습니다.

당신의 경우에는 (누군가가 OP가 알고 있어야하는 차이점이 있다면) 나를 바란다. (바깥 쪽 루프에서 묵시적으로 do 루프를 풀 었다는 것을주의하라.) :

integer, parameter :: n=<some-value> 
integer, parameter :: m=<some-value> 
<some-type>, dimension(n,m) :: matrix 

integer :: i, j 

do j = m,1,-1 
    do i = 1,n 
     read(10,*) matrix(i,j) 
    end do 
end do 
+4

하나 개 imortant 차이가 묵시적 DO 루프 버전은 m 이상 루프 위의 버전 반면, (예를 들어, 그것은 m의 * n 개의 라인을 읽으려고하지 않는) 하나의 읽기 문 점에서,이 * n은 m * n 라인이되도록 읽습니다. 그러나 그 외의 설명은 정확합니다. 함축 된 do-loop는 do 루프와 비슷한 것을 표현하기위한 간결한 표기법이지만 "적절한 위치에"있습니다. –

+1

Jonathan Dursi가 이미 말했던 것, 즉'read' 문에 내포 된 do-loop가 Fortran 용어로 모든 데이터를 단일 레코드 _ (예 : 한 줄의 입력)에서 전송한다고 덧붙일 것입니다. 'write' 문에 암시 된 do-loop는 모든 데이터를 _single 레코드로 옮깁니다. (예 : 한 줄의 출력). –

+1

또 다른 차이점이 있습니다 : 성능. [this] (http://stackoverflow.com/questions/12567087/implied-do-vs-explicit-loop-with-io) 질문에서 I/O는 암시 적 루프보다 명시 적 루프에서 상당히 느린 것으로 나타났습니다. 'write (10, *) matrix'와 같은 간단한 I/O 문. 그러나 이는 컴파일러에 따라 다르며 대용량 데이터를 읽거나 쓰는 경우에만 매우 중요합니다. – sigma

관련 문제