Fortran Coder

查看: 10230|回复: 2
打印 上一主题 下一主题

[文件读写] 一个固定读入4列数据并进行简单计算的代码

[复制链接]

13

帖子

6

主题

0

精华

熟手

F 币
114 元
贡献
81 点
跳转到指定楼层
楼主
发表于 2014-3-4 19:15:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
        此代码固定读入四列数据,读入规则如下:
        输入文件名为TEST.txt,首行为空行或列代号。数据内容从第二行开始。
        数据行为动态数组,可改变。列数通过修改也可以改为任意。
        需要注意的是,涉及动态数组在子程序中的调用,则子程序必须用module封装,或在主程序中采用interface进行声明。本例采用了前者所述方法。
        感谢fortran群2338021,群友:臭石头雪球,马克钛师傅,小爱的讲解帮助。
[Fortran] 纯文本查看 复制代码
001module TEST
002contains
003 
004subroutine mean(A,N,O,P,Q,R)
005implicit none
006 
007    real :: O,P,Q,R
008    integer :: N,i
009    real,intent(in) :: A(:,:)
010 
011    !记录ABCD的平均数,分别对应OPQR   
012    O=0.0
013    P=0.0
014    Q=0.0
015    R=0.0
016 
017    do i=1,N
018        O=O+A(i,1)
019        P=P+A(i,2)
020        Q=Q+A(i,3)
021        R=R+A(i,4)
022    enddo
023 
024    O=O/real(N)
025    P=P/real(N)
026    Q=Q/real(N)
027    R=R/real(N)
028 
029return
030end subroutine mean
031 
032subroutine FANGCHA(A,N,O,P,Q,R,K,L,M,H)
033implicit none
034 
035    real,intent(in) :: A(:,:)
036    integer :: i,N
037    real :: O,P,Q,R,K,L,M,H
038    real :: B(N),C(N),D(N),E(N)
039 
040    K=0.0
041    L=0.0
042    M=0.0
043    H=0.0
044 
045    do i=1,N
046        B(i)=(A(i,1)-O)**2
047        C(i)=(A(i,2)-P)**2
048        D(i)=(A(i,3)-Q)**2
049        E(i)=(A(i,4)-R)**2
050    enddo       
051 
052    do i=1,N
053        K=K+B(i)
054        L=L+C(i)
055        M=M+D(i)
056        H=H+E(i)
057    enddo
058 
059        K=(K)/real(N)
060        L=(L)/real(N)
061        M=(M)/real(N)
062        H=(H)/real(N)
063 
064return
065end subroutine FANGCHA
066 
067subroutine BIAOZHUNCHA(K,L,M,H,bzc1,bzc2,bzc3,bzc4)
068implicit none
069 
070    real :: K,L,M,H,bzc1,bzc2,bzc3,bzc4
071 
072    bzc1=sqrt(K)
073    bzc2=sqrt(L)
074    bzc3=sqrt(M)
075    bzc4=sqrt(H)
076 
077return
078end subroutine BIAOZHUNCHA
079 
080subroutine BZCS(bzc1,bzc2,bzc3,bzc4,bzc5,bzc6,bzc7,bzc8,bzc9,bzc10,bzc11,bzc12)
081implicit none
082 
083    real :: bzc1,bzc2,bzc3,bzc4,bzc5,bzc6,bzc7,bzc8,bzc9,bzc10,bzc11,bzc12
084 
085    bzc5=bzc1/3.0
086    bzc6=bzc2/3.0
087    bzc7=bzc3/3.0
088    bzc8=bzc4/3.0
089 
090    bzc9=bzc1/4.0
091    bzc10=bzc2/4.0
092    bzc11=bzc3/4.0
093    bzc12=bzc4/4.0
094 
095return
096end subroutine BZCS
097 
098end module TEST
099 
100program main
101use TEST
102implicit none
103 
104    real,allocatable :: A(:,:)
105    integer :: i,j,N
106    real :: O,P,Q,R,K,L,M,H,bzc1,bzc2,bzc3,bzc4
107    real :: bzc5,bzc6,bzc7,bzc8,bzc9,bzc10,bzc11,bzc12
108 
109    write(*,*) "输入ABCD每列元素个数(注意元素个数必须相等):"
110    read(*,*) N
111 
112    j=4
113 
114    open(1,file='TEST.txt',status='old')
115    open(2,file='TEST01.txt')
116 
117    allocate (A(N,j))
118 
119    read(1,*)
120    write(2,*) "A,B,C,D分别为:"
121    write(2,*)
122 
123    do i=1,N
124        read(1,*) (A(i,j),j=1,4)
125        write(2,*) (A(i,j),j=1,4)
126    enddo
127 
128    write(2,*)
129 
130!计算平均值   
131    call mean(A,N,O,P,Q,R)
132 
133!计算方差
134    call FANGCHA(A,N,O,P,Q,R,K,L,M,H)
135 
136!计算标准差
137    call BIAOZHUNCHA(K,L,M,H,bzc1,bzc2,bzc3,bzc4)
138 
139!标准差再计算
140    call BZCS(bzc1,bzc2,bzc3,bzc4,bzc5,bzc6,bzc7,bzc8,bzc9,bzc10,bzc11,bzc12)
141 
142    write(2,*) "A,B,C,D的平均数分别为:"
143        write(2,*)
144    write(2,*) O,P,Q,R
145        write(2,*)
146    write(2,*) "A,B,C,D的方差分别为:"
147        write(2,*)
148    write(2,*) K,L,M,H
149        write(2,*)
150    write(2,*) "A,B,C,D的标准差为:"
151        write(2,*)
152    write(2,*) bzc1,bzc2,bzc3,bzc4
153        write(2,*)
154    write(2,*) "A,B,C,D标准差的三分之一:"
155        write(2,*)
156    write(2,*) bzc5,bzc6,bzc7,bzc8
157        write(2,*)
158    write(2,*) "A,B,C,D标准差的四分之一:"
159        write(2,*)
160    write(2,*) bzc9,bzc10,bzc11,bzc12
161 
162    DEALLOCATE(A)
163 
164pause
165end



分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

136

帖子

3

主题

0

精华

版主

F 币
1964 元
贡献
1677 点

帅哥勋章管理勋章爱心勋章新人勋章热心勋章元老勋章

沙发
发表于 2014-3-4 23:39:40 | 只看该作者
不是特别理解这个帖子需要讨论的问题是什么?

13

帖子

6

主题

0

精华

熟手

F 币
114 元
贡献
81 点
板凳
 楼主| 发表于 2014-3-5 01:37:55 | 只看该作者
这不是讨论问题的,只是写出来,就发上来了,以后有人需要可以直接用
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-4-7 03:19

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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