これは Fortran からのフォローアップの質問です: Open, form='(un)formatted', read . 特定の基準の下で要素の数を保存する配列を作成する必要があります。
program location
implicit none
interface
function distkm(deglat1,deglon1,deglat2,deglon2)
real :: distkm
real, intent(in) :: deglat1,deglon1,deglat2,deglon2
end function distkm
end interface
integer, parameter :: maxnr = 200000
integer :: nr, i, j, ios
character(len=1) :: junkfornr
real :: start, finish
! My variable declaration
character(len=15), dimension(:), allocatable :: key
real, dimension(:), allocatable :: lat, lon
integer, dimension(:), allocatable :: jobs
! Secondary arrays
integer, dimension(:), allocatable :: jobs_within
integer, dimension(:), allocatable :: sum_jobs
! Determine total number of lines in file
nr=0
open(10, file='location_data2.txt', status='old')
do i=1,maxnr
read(10,*,iostat=ios) junkfornr
if (ios/=0) exit
if (i == maxnr) then
stop
endif
nr = nr + 1
end do
! Create variables: key, lat, lon, jobs
allocate(key(nr))
allocate(lat(nr))
allocate(lon(nr))
allocate(jobs(nr))
allocate(jobs_within(nr))
allocate(sum_jobs(nr))
rewind(10)
do i=1,nr
read(10,*) key(i), lat(i), lon(i), jobs(i)
end do
do i=1,nr
do j=1,nr
if (distkm(lat(i),lon(i),lat(j),lon(j)) <= 0.3) then
jobs_within(j) = jobs(j)
else
jobs_within(j) = 0
end if
end do
sum_jobs(i) = sum(jobs_within)
end do
close(10)
open(20,file='key_sum_jobs_0.3.txt')
do i=1,nr
write(20,100) key(i), sum_jobs(i)
end do
100 format(A15,I6)
end program location
do ループは、各企業の労働者の合計を 0.3 km 以内に保存します。ここで、企業ごとに、0.3 キロメートル以内にある企業の数が異なります。n_neighbor
各企業の隣接する企業の数を記録する配列 (たとえば ) を作成するにはどうすればよいでしょうか?
編集: 次の方法で問題が解決すると思います:
do i=1,nr
n_aux(1:nr) = 0
do j=1,nr
if (distkm(lat(i),lon(i),lat(j),lon(j)) <= 1) then
jobs_within(j) = jobs(j)
n_aux(j) = n_aux(j) + 1
else
jobs_within(j) = 0
end if
end do
write(20,100) key(i), sum(jobs_within), sum(n_aux)
100 format(A15,I8,1X,I3)
end do
整数配列 ( n_aux
) を作成します。次に、 の出力テキスト ファイルには、unit=20
(1) 企業キー、(2) 0.3km 以内の労働者の合計、(3) 0.3km 以内の企業数の 3 つの列が保存されます。
n_aux
考慮事項:ループ0
の
すべての要素を設定しました。次に、条件が成立するところj
に投げます。配列に値を動的に割り当てるなどの観点から、この操作を表現する他の方法があるはずですか?1's
if