爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: yilaya

[求助] fortran 求50年站点最低气温 程序问题求助

[复制链接]
发表于 2015-9-23 08:21:52 | 显示全部楼层
yilaya 发表于 2015-9-22 22:04
改了一下把变量声明全 改成REAL 但是又出现了
symbol I has already been implicitly typed detected be ...

我真是。。。。。
integer sta(i),yer(i),mou(i),day(i),tem(i),sum1(a),sum2(b),sum3(c)
real i,a,b,c,mean1,mean2,mean3 这个是你写的。报错告诉你的就是你先不声明就使用了i,a,b,c这些参数(symbol I has already been implicitly typed detected between I and ,),然后紧接着又声明了这些参数,所以你要么不声明i,a,b,c,要么把这四个放在前面。
至于变量类型,i,a,b,c是用来表示数组的大小,这些参数需要是整形,你用成实型了也改一下;数据tem和sum等最好是实型。
建议楼主还是花几分钟复习下fortran的变量声明罢。
密码修改失败请联系微信:mofangbao
发表于 2015-9-23 10:51:55 | 显示全部楼层
yilaya 发表于 2015-9-22 21:50
瞬间捂脸。。。。。
我这边也是一开始定义的问题

建议楼主看看书,这个程序很容易实现的,错误都是基础知识不熟悉所致。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-23 12:01:11 | 显示全部楼层
lqouc 发表于 2015-9-23 08:21
我真是。。。。。
integer sta(i),yer(i),mou(i),day(i),tem(i),sum1(a),sum2(b),sum3(c)
real i,a,b,c ...

哦 谢谢{:lxm_8:}{:lxm_8:}
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-23 12:01:44 | 显示全部楼层
四叶草 发表于 2015-9-23 10:51
建议楼主看看书,这个程序很容易实现的,错误都是基础知识不熟悉所致。

o 谢谢{:lxm_21:}
密码修改失败请联系微信:mofangbao
发表于 2015-9-23 12:30:00 | 显示全部楼层

不要灰心嘛,熟练问题而已。没事多翻翻书就好了。
愿意自己动手写程序已经比很多人强了。
密码修改失败请联系微信:mofangbao
发表于 2015-9-23 14:22:32 | 显示全部楼层

不用谢,祝你成功!
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-23 22:23:35 | 显示全部楼层
lqouc 发表于 2015-9-23 12:30
不要灰心嘛,熟练问题而已。没事多翻翻书就好了。
愿意自己动手写程序已经比很多人强了。

看了一遍书 把程序改了一遍
program station_temperation
integer i,a,b,c,mean1,mean2,mean3,sum1,sum2,sum3
real sta(17685),yer(17685),mou(17685),day(17685),tem(17685),te(17685)



do i=1,17685
open(1,file='e:\temper\TD50353.txt')
open(11,file='e:\temper\11.txt')

        read (1,*)sta(i),yer(i),mou(i),day(i),tem(i)
        if (mou(i)==4)         then                                                !筛选4月
           if(day(i)<11)then                                                !上旬温度
              if(tem(i)>999)then                                        !缺省值判断
                     te(i)=(tem(i-1)+tem(i+1))/2
                         else
                         te(i)=tem(i)
                                                                       !插值法补缺省值
                  endif
            a=a+1                                                                        !筛选的数据数
                sum1=sum1+te(i)                                        !选后温度总和
           else if(day(i)>10.and.day(i)<21)then                !中旬温度
              if(tem(i)>999)then                                       
                     te(i)=(tem(i-1)+tem(i+1))/2
                         else
                         te(i)=tem(i)
                   endif

            b=b+1
                sum2=sum2+tem(i)
           else if(day(i)>20)then                                         !下旬温度
                   if(tem(i)>999)then
                         te(i)=(tem(i-1)+tem(i+1))/2
                           else
                             te(i)=tem(i)
                       endif

            c=c+1
                sum3=sum3+tem(i)
                endif

        end if
enddo
close(1)

        mean1=sum1/a                                                                 !上旬平均温度
    mean2=sum2/b
        mean3=sum3/c
write(11,*)mean1,mean2,mean3
close(11)

end

没有错误 但是运行出现
RUN TIME ERROR READ <E:\TEMPER\TD50353.TXT>
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-23 22:30:44 | 显示全部楼层
mlqxj35674 发表于 2015-9-23 14:53
PARAMETER(i=50) 定义序列长度
IMPLICIT NONE  加上这一句
因为隐含规则是I是整型,被你定义成实型, ...

OOO{:eb502:}
program station_temperation
integer i,a,b,c,mean1,mean2,mean3,sum1,sum2,sum3
real sta(17685),yer(17685),mou(17685),day(17685),tem(17685),te(17685)



do i=1,17685
open(1,file='e:\temper\TD50353.txt')
open(11,file='e:\temper\11.txt')

        read (1,*)sta(i),yer(i),mou(i),day(i),tem(i)
        if (mou(i)==4)         then                                                !筛选4月
           if(day(i)<11)then                                                !上旬温度
              if(tem(i)>999)then                                        !缺省值判断
                     te(i)=(tem(i-1)+tem(i+1))/2
                         else
                         te(i)=tem(i)
                                                                       !插值法补缺省值
                  endif
            a=a+1                                                                        !筛选的数据数
                sum1=sum1+te(i)                                        !选后温度总和
           else if(day(i)>10.and.day(i)<21)then                !中旬温度
              if(tem(i)>999)then                                       
                     te(i)=(tem(i-1)+tem(i+1))/2
                         else
                         te(i)=tem(i)
                   endif

            b=b+1
                sum2=sum2+tem(i)
           else if(day(i)>20)then                                         !下旬温度
                   if(tem(i)>999)then
                         te(i)=(tem(i-1)+tem(i+1))/2
                           else
                             te(i)=tem(i)
                       endif

            c=c+1
                sum3=sum3+tem(i)
                endif

        end if
enddo
close(1)

        mean1=sum1/a                                                                 !上旬平均温度
    mean2=sum2/b
        mean3=sum3/c
write(11,*)mean1,mean2,mean3
close(11)

end

没有错误 但是运行出现
RUN TIME ERROR READ <E:\TEMPER\TD50353.TXT>

我还有些疑问
1.可以同时 声明integer a
                       real sta(a) 么 数组无界是不不可以
2.如果无界数组 怎么处理呢
  强制把它定义成 有界但是数值是我猜的一个远大于实际项数的数 对运行程序有没有影响呢
3.tem(i)=tem(i) 这样重复赋值可以么

  灰常感谢                        
密码修改失败请联系微信:mofangbao
发表于 2015-9-23 23:03:17 | 显示全部楼层
yilaya 发表于 2015-9-23 22:23
看了一遍书 把程序改了一遍
program station_temperation
integer i,a,b,c,mean1,mean2,mean3,sum1,su ...

额,这个从报错看不出来,需要你检查read语句和数据存放格式是否匹配。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2015-9-24 12:21:38 | 显示全部楼层
lqouc 发表于 2015-9-23 23:03
额,这个从报错看不出来,需要你检查read语句和数据存放格式是否匹配。

我觉得挺配啊   
存放的是 txt文件 格式如下
50353 1954  1  1  -287
50353 1954  1  2  -344
50353 1954  1  3  -368
50353 1954  1  4  -393
50353 1954  1  5  -371
50353 1954  1  6  -374
50353 1954  1  7  -382
50353 1954  1  8  -295
50353 1954  1  9  -372
50353 1954  1 10  -402
50353 1954  1 11  -400
50353 1954  1 12  -300
。。。。。。。。。
难道read(1,*)  默认* 错了么
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表