이것은 프로그램입니다. 그 본질은 다음과 같습니다. 차원 2 ~ 3의 배열이 두 개 있습니다. 필터 E_max에 따라 합계와 곱의 가능한 모든 조합을 찾아야합니다. 좀 더 소형의 중첩 루프를 작성하는 방법을 알려주시겠습니까? 즉 10 개의 열이 10 개의 중첩 루프를 페인팅하지 않으면 어떻게됩니까? 도와주세요, 제발.포트란 - 합계와 곱의 조합
program f_
implicit none
integer E_max, i, j, k, i1, j1, k1, l
real f1, f2, oldp, oldp1, oldp2, oldp_1, oldp_2, p1, p2, p3, p
real(8), allocatable, dimension(:, :) :: F, ener
real(8), allocatable, dimension(:) :: E_vib, f_1
allocate (F(2,3), E_vib(3), f_1(3), ener(2,3))
open(unit=10, file= 'File.txt', status='old')
do j = 1, 2
read(10,*) (f(j,k),k=1,3)
end do
201 j=j-1
close(unit=10, status='keep')
003 format(f25.20,1x,\)
open(unit=10, file= 'fileen.txt', status='old')
do j = 1, 2
read(10,*) (ener(j,k),k=1,3)
end do
205 j=j-1
close(unit=10, status='keep')
004 format(f25.20,1x,\)
E_max = 4
do i = 1, 2
oldp = ener(i,1)
p1 = f(i,1)
if (oldp > E_max) then
goto 1
end if
1 continue
do j = 1, 2
oldp1 = ener(j,2)
p2 = f(j,2)
if (oldp1 + oldp > E_max) then
goto 2
end if
2 continue
do k = 1, 2
oldp2 = ener(k,3)
p3 = f(k,3)
if (oldp2 + oldp1 + oldp > E_max) then
goto 5
end if
oldp_1 = oldp + oldp1 + oldp2
p = p1*p2*p3
write (*,*) 'i=', i , 'j=', j,'k=', k, oldp_1, p
5 continue
end do
end do
end do
deallocate (F, E_vib, f_1, ener)
end program
http://www.drdobbs.com/jvm/programming-with-reason-why-is-goto-bad/228200966 – user1824346