回 帖 发 新 帖 刷新版面

主题:编程新手,求高手指点程序

我是fortran的编程新手,最近急需处理一些数据,但是能力还有待提高,望高手给指点
数据是经纬度和电量,需要所有的经纬度之间做循环求出距离d,符合d所需要的条件的计做该点的个数,并求符合条件下这几个点的电量的最大值和平均值,唉,说起来还蛮容易的,但是我现在就陷入了迷雾,怎么也调试不好了,求高手!
    program main  
    parameter (m=375395)
    real:: wei(m),jing(m),dian(m)
    real ::d,dave,td,id,dmax
    integer::count,i,j,k,l,a
    
    open(10,file='D:\shandian\2007-1.txt')
    open(20,file='D:\shandian\shandian2007-1.txt')
    do i=1,m
     read(10,*) wei(i),jing(i),dian(i)
    enddo
    d=0
    do j=1,m
      do k=1,m
       td=0
       count=0
       d=6371*(3.1415926/180)*acos(sin(wei(j))*sin(wei(k))+cos(wei(j))*cos(wei(k))*cos(jing(k)-jing(j)))
       do while(d<=(1/sqrt(3.1415926)))
        count=count+1
       enddo
         do while(count>1)
           td=abs(dian(k))+td
           dave=td/count
           dmax=max(dian(k))
            
          enddo
          
      enddo
        write(20,*) wei(j),jing(j),count,dave,dmax
    enddo
             
end    

回复列表 (共5个回复)

沙发

二话不说, 先开头加个implicit none.
acos函数返回的不就是弧度制了吗?
(3.1415926/180)*acos()
你这个前面的转换是不是多余了?

计算公式我没去看, 应该由你自己保证.

板凳


你能帮我看看我循环那里有不对的么 尤其是计数累加 还有求平均求最大那个地方 运算出的结果和应该得出的结果相差有些大

3 楼

[quote]二话不说, 先开头加个implicit none.
acos函数返回的不就是弧度制了吗?
(3.1415926/180)*acos()
你这个前面的转换是不是多余了?

计算公式我没去看, 应该由你自己保证.[/quote]


你能帮我看看我循环那里有不对的么 尤其是计数累加 还有求平均求最大那个地方 运算出的结果和应该得出的结果相差有些大

4 楼

代码是否符合你的算法, 这个要你自己保证. 一方面我不知道你是怎么设计算法的. 另一方面我没太多时间, 只能够看看语法错误和计算是否合理.
我一楼提的地方相信你是弄错了d=6371*acos()就可以了. 改过来还跟"应该"得到的结果不对那就继续一步步按照你的算法查找吧.

5 楼

[url=http://www.worldgodshop.com/]Supra Shoes[/url]   [url=http://www.worldgodshop.com/]Radii shoes[/url]  [url=http://www.worldgodshop.com/]Prada Shoes[/url]   [url=http://www.worldgodshop.com/]Jordan shoes[/url]  [url=http://www.worldgodshop.com/]Christian Louboutin shoes[/url] 
http://www.worldgodshop.com/

我来回复

您尚未登录,请登录后再回复。点此登录或注册