Fortran实现水准网的平差运算

 program ping
    implicit none
    integer::n,m,i,j,s,cho
    real h0,h1,sumw,sumlen!h0h1分别代表起始结束高程,sumw与sumlen代表高擦汗闭合差之和与线路长之和
    real,allocatable,dimension(:)::w,H,cor,leng
    integer,allocatable,dimension(:)::sta
    print*,'请确认何种水准平差网,1.闭合水准 2.附合水准 3.支水准'
    read*,cho
    if(cho==1) then
    open(unit=8,file="bihe.txt")!文件的名字是txt
    print*,'请输入水准段数'
    read*,s
    allocate(sta(s))
    allocate(leng(s))
    allocate(w(s))
    read(8,*) h0
    read(8,*)(sta(i),leng(i),w(i),i=1,s)!把数据读入了,w为分段高差,leng为测段长度,sta为站号
    close(8)
    open(unit=9,file="output1.txt",form='formatted')
    allocate(H(s))
    allocate(cor(s))
    sumw=0
    sumlen=0
    write(9,*)'起始高程',h0 
    do i=1,s
    sumw=sumw+w(i)
    sumlen=sumlen+leng(i)
    end do
    do i=1,s
        cor(i)=-sumw*leng(i)/sumlen
        do j=1,i
            H(i)=w(j)+cor(j)
        end do
        H(i)=H(i)+h0
        write(9,20)sta(i),leng(i),w(i),cor(i),H(i)!cor为分段高差改正数,H为改正后高差
    end do  
    close(9)


    else if(cho==2)  then
    open(unit=10,file="fuhe.txt")!文件的名字是txt
    print*,'请输入水准段数'
    read*,s
    allocate(sta(s))
    allocate(leng(s))
    allocate(w(s))
    read(10,*) h0,h1
    read(10,*)(sta(i),leng(i),w(i),i=1,s)!把数据读入了,w为分段高差,leng为测段长度,sta为站号
    close(10)
    open(unit=11,file="output2.txt",form='formatted')
    allocate(H(s))
    allocate(cor(s))
    sumw=0
    sumlen=0
    write(11,*)'起始高程',h0 ,'末点高程',h1
    do i=1,s
    sumw=sumw+w(i)
    sumlen=sumlen+leng(i)
    end do
    do i=1,s
        cor(i)=(h1-h0-sumw)*leng(i)/sumlen!-sumw即为高差改正数,此时改为h1-h0-sumw//h0+sumw+改正=h1
        do j=1,i
            H(i)=w(j)+cor(j)
        end do
        H(i)=H(i)+h0
        write(11,20)sta(i),leng(i),w(i),cor(i),H(i)!cor为分段高差改正数,H为改正后高差
    end do  
    close(11)


    else
     open(unit=12,file="zhi.txt")!文件的名字是txt
    print*,'请输入水准测段数'
    read*,s
    allocate(sta(s))
    allocate(leng(s))
    allocate(w(s))
    read(12,*) h0
    read(12,*)(sta(i),leng(i),w(i),i=1,s)!把数据读入了,w为分段高差,leng为测段长度,sta为站号
    close(12)
    open(unit=13,file="output3.txt",form='formatted')
    allocate(H(s))
    write(13,*)'起始高程',h0 
    do i=1,s
    sumw=sumw+w(i)
    sumlen=sumlen+leng(i)
    end do
    do i=1,s
        do j=1,i
            H(i)=w(j)
        end do
        H(i)=H(i)+h0
        write(13,21)sta(i),leng(i),w(i),H(i)!cor为分段高差改正数,H为改正后高差
    end do
    write(13,*)sumw,sumlen
    close(13)
    end if
20  format(i3,f5.1,f8.3,f8.3,f8.3)
21  format(i3,f5.1,f8.3,f8.3) 
    end program ping
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值