×

fortran简单编程例子 tra

fortran简单编程例子(fortran语言编程)

admin admin 发表于2023-07-03 22:14:55 浏览46 评论0

抢沙发发表评论

本文目录

fortran语言编程

real function ave(a)implicit none real :: a(20) integer :: i ave=0.0 do i=1,20 ave=a(i)+ave end do ave=ave/20.0end functionsubroutine compare(a,b)implicit none real :: a(20), b(20) real,external :: ave if (ave(a)《ave(b)) a=b write(*,*) “average“,ave(a)end subroutineprogram mainimplicit none real,external :: ave real :: a(20), b(20) real :: m integer :: error open (unit=10,file=“data.txt“,status=“old“,iostat=error) if(error/=0) then write(*,*) “open data.txt fail“ stop else read(10,*) a read(10,*) b end if call compare(a,b) write (*,*) aend program 提前在文件data.txt文件中输入数据,格式如下1.986,1.987,1.765,1.453,1.786...2.976,2.654,3.7654,9.987,3.234..我只写了五个数,放在源程序所在的文件夹中。

Fortran菜鸟一个,一个简单的程序 竟然有31个错误,求大神指教

确实写的一塌糊涂,真不是一两句话就能给你说请的。鉴于你的情况,下面给你一些基本的建议。 1、永远不要想一口吃个胖子。许多初学者都爱犯一个错误,就是想一口气从头写到尾,这是非常错误的编程习惯。再优秀的程序员,写程序也是一步一步写的,因为程序设计遵从的是严格的逻辑,所以你需要确保你第一个模块或者步骤写对了,再去写第二个的,而不是一口气写完,这样再去查报错原因会花费额外的大量的时间。 2、认真看报错,除非你是个女生。不看报错内容这种情况,一般大多发生在女生身上,这个经我多年经历好像确实也没什么办法。但报错其实大多都是英文大白话,如果没有耐心看的话是没法调试程序的。 3、你误解了fortran的子程序和函数。fortran和C语言族不同,fortran的子程序是subroutine,自定义函数是function,二者功能完全不一样。subroutine自身不能返回值,你也不能对它赋值。从你的程序看,你想使用的都是function而不是subroutine,具体用法请查阅资料和例子多看看。 4、你的程序中存在大量的重复定义的变量,这说明你并没有耐心的去查看自己写的程序。切记耐心是最基本的素质。 5、external不是你这种用法,多数情况下也用不到,就不要再用了。

fortran 程序(应该是很简单的小程序)

Fortran源自于“公式翻译”(英语:FormulaTranslation)的缩写,是一种编程语言。

它是世界上最早出现的计算机高级程序设计语言,广泛应用于科学和工程计算领域。FORTRAN语言以其特有的功能在数值、科学和工程计算领域发挥着重要作用。

随着FORTRAN语言版本的不断更新和变化,语言不兼容性问题日益突出,语言标准化工作被提上了日程。

1962年5月:美国标准化协会(简称ANSI)着手进行FORTRAN语言标准化的研究工作。

1966年:ANSI正式公布了两个标准文本:美国国家标准FORTRAN(ANSI X3.9-1966)和美国国家标准基本FORTRAN(ANSI X3.10-1966),前者相当于FORTRAN Ⅳ,后者相当于FORTRANⅡ。基本FORTRAN是美国国家标准FORTRAN的一个子集,从而实现了语言的向下兼容,初步解决了语言的兼容性问题。

Fortran编程

c   p为指定的第几个点作为球心c   m为最多包含的除球心外的其他点的个数c   最后输出的为最小半径c   本例输入的点数为8,以第3点为球心,要求包含5个点 dimension x(100),y(100),z(100),s(100),ss(100) integer i,j,k,m,p,ioerror real t p=3 m=5 open(7,file=’xyz.dat’,status=’old’) k=0 do 10 i=1,100 k=k+1 read(7,*,iostat=ioerror) x(k),y(k),z(k) if (ioerror.ne.0) goto 2010 continue20 close(7) k=k-1 do 30 i=1,k write(*,*) x(i),y(i),z(i)30 continue do 40 i=1,k if (i.ne.p) then s(i)=sqrt((x(i)-x(p))**2+(y(i)-y(p))**2+(z(i)-z(p))**2) else s(i)=0.0 endif ss(i)=s(i)40 continue do 50 i=1,k-1 do 50 j=1,k-i if (ss(j).gt.ss(j+1)) then t=ss(j) ss(j)=ss(j+1) ss(j+1)=t endif50 continue do 60 i=1,k write(*,’(f10.3\)’) ss(i)60 continue write(*,*) write(*,*)ss(m+1) stop end 运行的结果为:         1.0000000         2.0000000         3.0000000         2.0000000         3.0000000         4.0000000         4.0000000         5.0000000         6.0000000         5.0000000         6.0000000         7.0000000         7.0000000         8.0000000         9.0000000         8.0000000         9.0000000        10.0000000         9.0000000        10.0000000        11.0000000        10.0000000        11.0000000        12.0000000     .000     1.732     3.464     5.196     5.196     6.928     8.660    10.392          6.9282030Stop - Program terminated.

关于FORTRAN 77最简单的一个程序

结果=1×1/1×1/2×2/1×2/2=1将2改为m,即将do 10 I=1,2do 10 J=1.210 k=k*I/J 改为do 10 I=1,mdo 10 J=1,m10 k=k*I/J 则结果为:结果=1×(1/1×1/2×1/3……×1/m)×(2/1×2/2×2/3×……×2/m)×……(m/1×m/2×m/3×……×m/m)=1感觉这个程序有点奇怪,不知道是不是你写错了。

fortran编程

这个可以这样做,比较方便:

program mainimplicit noneINTEGER(4),PARAMETER::N=20integer(4) ::s(N),iinteger(4):: breal(8)::x,averdo i=1,20call random_number(x)s(i)=x*100enddoCALL fun(s,b,AVER,N)WRITE(*,100)AVER,b100 FORMAT(“平均数是“,F13.5,/,“与平均数最接近且比平均数小的是:“,I3)READ(*,*)CONTAINSSUBROUTINE fun(s,b,AVER,N)implicit noneinteger(4)::s(N),i,t,j,Ninteger(4)::breal(8)::averAVER=REAL(sum(S)/N)S=AVER-SFORALL(I=1:N,S(I)《0)S(I)=MAXVAL(ABS(S))b=AVER-MINVAL(S)end SUBROUTINE funend program main

三道简单的Fortran编程题,跪谢!

integer n,i,j,k read(*,*)nc n=97 k=int(sqrt(n*1.0)) j=1 if (n.eq.1) then  j=0 goto 100 endif if ((n.eq.2).or.(n.eq.3)) then  j=1 else do 10 i=2,k if (mod(n,i).eq.0) then  j=0 goto 100 endif10 continue endif100 if (j.eq.0) then write(*,*)’not prime’ else write(*,*)’prime’ endif stop end ================================== dimension a(12) data a/1,2,3,4,5,6,7,8,9,10,11,12/ data n/12/ write(*,*) fun(a,n) stop end function fun(a,n) dimension a(n) integer i,j real sum,aver,max sum=0 do 10 i=1,n sum=sum+a(i)10 continue aver=sum/n max=-1.0e7 do 20 i=1,n if ((a(i).lt.aver).and.(a(i).gt.max)) then max=a(i) endif20 continue fun=max return end================================== dimension m(100),n(100) real sum,m,n integer i,j,k n(1)=2 m(1)=3 n(2)=4 m(2)=5 sum=n(1)/m(1)+n(2)/m(2) do 10 i=3,25 n(i)=n(i-1)+n(i-2) m(i)=n(i-1)+m(i-1) sum=sum+n(i)/m(i)10 continue write(*,*)sum stop end

求一个简单的fortran循环程序示例

program mainimplicit noneinteger::ireal::a(1000)=(/(i,i=1,1000)/)a=2*awrite(*,*)apauseendprogram 一百万的数组我机子带不动,先给一千你试试,要一百万自己把一千改成一百万。

简单的fortran编程

Program Baidu_Thlws Implicit None Real :: a Do Read( * , * ) a If ( a 》 0.8 ) then write( * , * ) ’高电平’ Else write( * , * ) ’低电平’ Exit End If End DoEnd Program Baidu_Thlws

求助一段简单的fortran代码

根据你的描述,在每行中只需要判断三次,并作相应的位置调整即可:

  1. 若1,2相等,则不管3是不是和1,2 相等,都不需要调整三个数的位置;

  2. 若1,3相等,则不管2是不是和1,3相等,只需要调整2和3的位置;

  3. 若2,3相等,则不管1是不是和2,3相等,只需要调整1和3的位置;

则编程思路如下:

PROGRAM mainIMPLICIT NONEINTEGER,PARAMETER::Col=3INTEGER::i,j,Line,errREAL*8,ALLOCATABLE::A(:,:)REAL*8::temp,errf

 

errf=1.0E-8                                         !判断两实数是否相等Line=100                                             !输入文件的列数ALLOCATE(A(Line,Col),stat=err)       !开辟空间IF(err/=0)GOTO 997OPEN(10,file=’1.txt’)                             !指定输入文件名

 

READ(10,*)((A(i,j),j=1,Col),i=1,Line)    !读入文件中的数据CLOSE(10)                                          !关闭文件

DO i=1,Line                                          !逐行判断行内的三个数是否需要交换    IF(abs(A(i,1)-A(i,2))》errf)THEN            !若条件不满足,则一、二相等,结束当前行判断进入下一行;若条件满足,则一、二不等,需判断其他情况。        IF(abs(A(i,1)-A(i,3))》errf)THEN         !若条件不满足,则一、三相等,交换二、三位置,结束当前行判断进入下一行;若条件满足,则一、三不等,需判断其他情况。            IF(abs(A(i,2)-A(i,3))》errf)THEN     !若条件不满足,则二、三相等,交换一、三位置,结束当前行判断进入下一行;若条件满足,则二、三不等。且此时已判断出一、二、三全不等,不交换位置。                WRITE(*,*)“第“,i,“行没有相等的实数“            ELSE                temp=A(i,1)                A(i,1)=A(i,3)                A(i,3)=temp            ENDIF        ELSE            temp=A(i,2)            A(i,2)=A(i,3)            A(i,3)=temp        ENDIF    ENDIFENDDO

OPEN(10,file=’2.txt’)                   !指定输出文件名WRITE(10,*)((A(i,j),j=1,Col),i=1,Line)  !向文件中写数据CLOSE(10)                               !关闭文件

GOTO 1000997 WRITE(*,*)“PROGRAM开辟数组时内存不足“STOP1000END PROGRAM main

 

算例,(只给了5行数据):

1.txt

 0.1     0.1     2.00.2     0.3     0.20.4     0.6     0.60.8     0.5     0.60.4     0.4     0.4

 

2.txt

  0.100000000000000       0.100000000000000        2.00000000000000       0.200000000000000       0.200000000000000       0.300000000000000       0.600000000000000       0.600000000000000       0.400000000000000       0.800000000000000       0.500000000000000       0.600000000000000        0.400000000000000       0.400000000000000       0.400000000000000