
fortran 输出二维矩阵如何控制输出的行和列的问题,请高手指教
我计算了某一个区域的密度值,网格用的0.1*0.1度,91行110列,即纬度变化范围从20..4开始一直到29.5,经度范围95.6-106.6,现在的问题是,我想要输出...
我计算了某一个区域的密度值,网格用的0.1*0.1度,91行110列,即纬度变化范围从20..4开始一直到29.5,经度范围95.6-106.6,现在的问题是,我想要输出的数据也是一个91行110列的二维矩阵,可是怎么修改,输出都是一列的数据,看了几天了都没悟出真理,请高手指教,
module typedef
type density
real :: lat,lon
end type density
end module
program dens
use typedef
!打开原始数据
integer,parameter::fileid=10
integer,parameter::light=25948
type(density) :: s(light)
real :: lat1=20.40000
real :: lat2=20.50000
real :: lon1=95.50000
real ::lon2=95.60000
integer i,error
integer j,k
integer,parameter:: low=110
integer,parameter:: row=91
integer :: den(row,low)
open(fileid,file="20130702.txt",status="old",iostat=error)
if(error/=0)then
write(*,*)"open 20130702.txt fail."
stop
end if
open(11,file="201307022.txt")
do k=1,low
do j=1,row
den(j,k)=0
open(fileid,file="20130702.txt",position='rewind')
do i=1,light
read(fileid,100)s(i)%lat,s(i)%lon
100 format(37X,F8.5,2X,F9.5)
if(s(i)%lat<=lat2) then
if(s(i)%lat>lat1) then
if(s(i)%lon<=lon2) then
if(s(i)%lon>lon1) then
den(j,k)=den(j,k)+1
end if
end if
end if
end if
end do
close(10)
lat2=lat2+0.1
lat1=lat1+0.1
end do
close(10)
lat1=20.40000
lat2=20.50000
lon2=lon2+0.1
lon1=lon1+0.1
end do
do k=1,low
do j=1,row
write(*,200)den(j,k)
200 format(80f7.2)
end do
end do
stop
end program 展开
module typedef
type density
real :: lat,lon
end type density
end module
program dens
use typedef
!打开原始数据
integer,parameter::fileid=10
integer,parameter::light=25948
type(density) :: s(light)
real :: lat1=20.40000
real :: lat2=20.50000
real :: lon1=95.50000
real ::lon2=95.60000
integer i,error
integer j,k
integer,parameter:: low=110
integer,parameter:: row=91
integer :: den(row,low)
open(fileid,file="20130702.txt",status="old",iostat=error)
if(error/=0)then
write(*,*)"open 20130702.txt fail."
stop
end if
open(11,file="201307022.txt")
do k=1,low
do j=1,row
den(j,k)=0
open(fileid,file="20130702.txt",position='rewind')
do i=1,light
read(fileid,100)s(i)%lat,s(i)%lon
100 format(37X,F8.5,2X,F9.5)
if(s(i)%lat<=lat2) then
if(s(i)%lat>lat1) then
if(s(i)%lon<=lon2) then
if(s(i)%lon>lon1) then
den(j,k)=den(j,k)+1
end if
end if
end if
end if
end do
close(10)
lat2=lat2+0.1
lat1=lat1+0.1
end do
close(10)
lat1=20.40000
lat2=20.50000
lon2=lon2+0.1
lon1=lon1+0.1
end do
do k=1,low
do j=1,row
write(*,200)den(j,k)
200 format(80f7.2)
end do
end do
stop
end program 展开
展开全部
do k=1,low
do j=1,row
write(*,200)den(j,k)
200 format(80f7.2)
end do
end do
修改为
do k=1,low
write(*,200)den(:,k)
200 format(80f7.2)
end do
这样就一共 low 行,row 列。
你需要明确到底是多少行,多少列?为什么格式是 80f7.2 呢
do j=1,row
write(*,200)den(j,k)
200 format(80f7.2)
end do
end do
修改为
do k=1,low
write(*,200)den(:,k)
200 format(80f7.2)
end do
这样就一共 low 行,row 列。
你需要明确到底是多少行,多少列?为什么格式是 80f7.2 呢
追问
最后格式定义错误,我改过来了
我按照您的建议改了,还是不对啊,最后出的结果还是1列,low*row行
我现在需要的是最后输出的是一个二维矩阵形式,一共low列,row行,
晕死了,我调不出来了,请您继续帮我解决,谢谢
追答
do k=1,low
write(*,*)den(:,k)
end do
这样肯定是没问题的。
你如果要用格式的话,你必须明确到底是多少列?而不是 80。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询