2017-11-21 4 views
0

여러 .dat 파일에 대해 고정 된 계산 단계를 수행하려고합니다.여러 .dat 파일에 대해 동일한 계산을 수행하는 방법

dimension t(128716),x(128716) 

    open (unit=88,file='ALFA-gua-100m-2.dat',status='unknown') 

    do i=1,128716 
     read(88,*)t(i),x(i) 

    enddo 
    sum=0 
    do j=1,128716 
     sum=sum+x(j) 
    enddo 



    write(*,*)sum/128716 
    close(88) 
    stop 
    end 

가 어떻게이 가야합니까 : 여기

은 내가 한 .dat 파일 즉 계산과 함께하고 싶은 내 코드? 제발 제안!

dimension t(128716),x(128716) 

    open (unit=11,file='ALFA-gua-100m-2.dat',status='unknown') 
    open (unit=12,file='ALFA-gua-100m-5.dat',status='unknown') 

    do i=1,2 
     ii = i + 10 

     do j=1,128716 
     read(ii,*)t(j),x(j) 
     enddo 

     sum=0 
     do k=1,128716 
     sum=sum+x(k) 
     enddo 

    enddo 

    do l=1,2 
     ll = l + 10 
     write(ll,*)sum/128716.0 

     close(ll) 
    enddo 

    stop 
    end 

하지만 그 작동하지 :

여기에 여러 파일에 대한 내 코드입니다.

+0

루프에서 열린 파일 단계에서 코드를 추가 할 수 있습니까? 그것은 당신이 성취하고자하는 일을해야합니다. –

+0

이 코드는 수정했지만 작동하지 않습니다. 여기 내 코드는 다음과 같습니다. dimension t (128716), x (128716) open (단위 = 11, 파일 = 'ALFA-gua-100m-2.dat', 상태 =) = 열기 (단위 = 12, 파일 = "ALFA-GUA-100m-5.dat '상태)'알 '알 수 없음' 내가 = 1,2 II = 1 10 는 J 할 + 할 = 1,128716 리드 (II *) t (j) X (j) ENDDO 합 = 0 수행 K = 1,128716 합 = 합계 + X (K) ENDDO ENDDO ,do l = 1,2 ll = l + 10 write (ll, *) sum/128716.0 닫기 (ll) enddo stop end –

+0

* "작동하지 않는 것"*을 의미해야합니다. 그런 문구는 절대로 사용하지 마십시오. 아무 말도하지 않습니다. 오류 메시지가 있습니까? 모두 보여주세요! 잘못된 결과? 그들에게 보여주고 그들이 왜 틀렸는 지, 그리고 올바른 것이 어떻게 생겼는지 설명하십시오. [ask] 및 [mcve]를 참조하십시오. –

답변

0

루프가 두 개인 경우 sum 루프를 i 루프의 두 반복에 사용할 수 없습니다. 두 번째 파일을 처리 할 때 덮어 씁니다.

  1. 루프를 하나로 결합 할 수 있습니다.

    do i=1,2 
        ii = i + 10 
    
        do j=1,128716 
        read(ii,*)t(j),x(j) 
        enddo 
    
        sum=0 
        do k=1,128716 
        sum=sum+x(k) 
        enddo 
    
        write(ii,*)sum/128716.0 
    
        close(ii) 
    enddo 
    
  2. sums(i)의 배열을 사용할 수 있습니다.

    do i=1,2 
        ii = i + 10 
    
        do j=1,128716 
        read(ii,*)t(j),x(j) 
        enddo 
    
        sum=0 
        do k=1,128716 
        sums(i)=sums(i)+x(k) 
        enddo 
    
    enddo 
    
    do l=1,2 
        ll = l + 10 
        write(ll,*)sums(l)/128716.0 
    
        close(ll) 
    enddo 
    
0

@ VladimirF의 대답에 대한 추가.

우리가 단순히 모든 루프를 작성하는 프로그래머에 대한 필요가 없습니다

sumx = sum(x) 

쓸 수 x라는 배열의 모든 요소를 ​​요약합니다. 합계 배열을 사용하는 경우

sums(1) = sum(x) 

과 같은 것이 적합합니다.

그럼 내가 쓰고있는 동안 나는

meanx = sum(x)/size(x) 

를 써서 배열의 평균을 계산합니다 :이 변수 sum를 호출하는 것은 좋은 생각이 아니다. 그 이름의 기존 내장 함수가 있는데 독자들 (컴파일러가 아니더라도)은 그 이름의 변수도 혼동 할뿐입니다.