爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: 言深深

[源代码] 分月输出日资料,并求月极值位置

  [复制链接]
发表于 2018-7-29 14:10:12 | 显示全部楼层
不得不说这个代码跑不起来
密码修改失败请联系微信:mofangbao
 成长值: 0
发表于 2018-7-30 13:44:08 | 显示全部楼层
sciren 发表于 2018-7-29 14:10
不得不说这个代码跑不起来

跑不出来,是不是你用的方法不对?
密码修改失败请联系微信:mofangbao
发表于 2018-8-8 14:24:44 | 显示全部楼层
言深深 发表于 2018-7-30 13:44
跑不出来,是不是你用的方法不对?

没有implicit none还有很多变量没定义  一眼就看出来了啊。。。。
密码修改失败请联系微信:mofangbao
 成长值: 0
发表于 2018-8-9 09:06:48 | 显示全部楼层
sciren 发表于 2018-8-8 14:24
没有implicit none还有很多变量没定义  一眼就看出来了啊。。。。

implicit none的意思是所有变量都需要定义去除I-N规则,如果不写这一句的话,默认使用I-N规则,对于循环变量可以不加以定义
密码修改失败请联系微信:mofangbao
发表于 2018-8-9 14:36:02 | 显示全部楼层
言深深 发表于 2018-8-9 09:06
implicit none的意思是所有变量都需要定义去除I-N规则,如果不写这一句的话,默认使用I-N规则,对于循环 ...

但是我真的跑不起来 你的代码能用  。。。我在您基础上改了。。。比较习惯那么整个implicit none  谢谢博主
密码修改失败请联系微信:mofangbao
发表于 2018-8-20 10:49:32 | 显示全部楼层
请问有没有相关matlab程序?
密码修改失败请联系微信:mofangbao
发表于 2019-5-13 14:22:48 | 显示全部楼层
打卡,fortran学习中
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2025-6-10 21:22:59 | 显示全部楼层
期末复习Fortran,翻到这篇帖子,正好拿来练手。放在这里请大家指导。

!有这样一个数据,从1979年01月01日到2011年12月31日的资料,
!输出其中某个月份的极大值和极小值,并输出这个极值所在位置(即年,月,日)。
!大致思路是:1.需要判断这一年是否是闰年;2.先找出x年每一个月最大值和最小值;3.对每一年的月份作比较
program z1
implicit none

    integer,parameter :: syr = 1979, eyr = 2011, nyr = 33
    integer :: i,j,k,y_min,y_max,yr_flag
    real :: X(syr:eyr,12,31), X_min(syr:eyr,12), X_max(syr:eyr,12), min, max

    open(10,file = "E:\FORTRANLAB\zizuo\test_data.txt",form = 'formatted')
    open(20,file = "E:\FORTRANLAB\zizuo\output_data.txt",form = 'formatted')

    !数据读入
    do i = syr,eyr
        call leap_normal(i,yr_flag)
        do j = 1,12
            if (j==1 .or. j==3 .or. j==5 .or. j==7 .or. j==8 .or. j==10 .or. j==12) then
                read(10,*)(X(i,j,k),k = 1,31)
                X_min(i,j) = minval(X(i,j,:))
                X_max(i,j) = maxval(X(i,j,:))
            elseif (j==4 .or. j==6 .or. j==9 .or. j==11) then
                read(10,*)(X(i,j,k),k = 1,30)
                X_min(i,j) = minval(X(i,j,1:30))
                X_max(i,j) = maxval(X(i,j,1:30))
            else
                if (yr_flag == 1) then
                    read(10,*)(X(i,j,k),k = 1,29)
                    X_min(i,j) = minval(X(i,j,1:29))
                    X_max(i,j) = maxval(X(i,j,1:29))
                else
                    read(10,*)(X(i,j,k),k = 1,28)
                    X_min(i,j) = minval(X(i,j,1:28))
                    X_max(i,j) = maxval(X(i,j,1:28))
                end if
            end if
        end do
    end do
    close(10)



    !选取极值
    !do i = 1,12
    !    write(20,'(I2,A10,F5.2)')i,'月最大值为',maxval(X(:,i,:))
    !    write(20,'(I2,A10,F5.2)')i,'月最小值为',minval(X_min(:,i))
    !end do
    !close(20)

    !!遍历寻找极值
    do i = 1,12
        min = 999
        max = 0
        do j = syr,eyr
            if (min > X_min(j,i)) then
                min = X_min(j,i)
                y_min = j
            end if
            if (max < X_max(j,i)) then
                max = X_max(j,i)
                y_max = j
            end if
        end do
        write(20,'(I1,A10,f5.2,A3,I4,A2)')i,'月最小值为',min,',在',y_min,'年'
        write(20,'(I1,A10,f5.2,A3,I4,A2)')i,'月最大值为',max,',在',y_max,'年'
    end do   
    close(20)
end


!判断是否是闰年,是,则让flag=1
subroutine leap_normal(a,a_flag)
implicit none
    integer :: a,a_flag
    if ((mod(a,4)==0 .and. mod(a,100)/=0) .or. (mod(a,400)==0)) then
        a_flag = 1
    else
        a_flag = 0
    end if
end



密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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