1/7工程分析程序设计上机作业(五)模块化编程上机目的:掌握内部例程、主程序、外部例程、模块等功能的使用方法。1、有一个六边形,求其面积。为求面积,作了3条辅助线。如图所示:(提示,三角形面积=()()()ssasbsc,其中2abcs,a、b、c为三个边长)。要求用内部函数来计算每个三角形的面积。l1=10l2=30l3=16l4=13l5=21l6=14l7=20l8=36l9=28programmainimplicitnonereal::A(9)=(/10,30,16,13,21,14,20,36,28/)integerirealss=area(A(3),A(4),A(7))+area(A(2),A(7),A(8))+&area(A(1),A(8),A(9))+area(A(5),A(6),A(9))print*,'Theareais',scontainsfunctionarea(x,y,z)implicitnonerealx,y,zrealp,areap=(x+y+z)/2area=sqrt(p*(p-x)*(p-y)*(p-z))2/7endfunctionend2、编写一个子例程子程序,SUM(S,T,N1,N2)。把整型数N1到N2进行求和,并把求和的结果放置到S,把整型数N1到N2进行求积,并把求积的结果放置到T。并用这个子程序来计算:(1234)(345678)(3*4*5*6)(1*2*3)yprogrammainimplicitnoneintegerA(8)integeri,b,c,d,e,f,g,m,n,yb=0;d=0;g=1;n=1doi=1,8A(i)=ienddocallsum(b,c,1,4)callsum(d,e,3,8)callsum(f,g,3,6)callsum(m,n,1,3)y=b+d+g-nprint*,'y=(1+2+3+4)+(3+4+5+6+7+8)+(3*4*5*6)-(1*2*3)=',ycontainssubroutinesum(s,t,N1,N2)integers,t,N1,N2,idoi=N1,N2s=s+A(i)t=t*A(i)enddoendsubroutineend3、编写函数子程序GDC求两个数的最大公约数。求最大公约数的算法如下:把两个数中大的那个数作为被除数,两数相除得到一个余数。把余数去除除数得到新一轮的余数。不断重复这一过程直到余数为0,这时的除数就是两个数的最大公约数。3/7调用此函数,求1260,198,72三个数的最大公约数。programmainimplicitnoneintegera,b,c,m,n,tempprint*,'请输入三个数:'print*,'abc'read*,a,b,cif(a1.0e-6)y=y+(-1)**((i-1)/2)*k**i/(fact(i))i=i+2enddoprint*,'sin(x)=',ycontainsfunctionfact(m)integerm,j,factfact=1doj=1,mfact=fact*jenddo6/7endfunctionfactendsubroutinesub6、编写程序,用欧拉法数值求解一阶微分方程。数值解法的基本思想:用差分方程代替微分方程,然后在若干个离散点上逐点求解差分方程,得到各离散点x0,x1,x2,⋯等处函数,()dyfxyxdx的近似值y0,y1,y2,⋯。其中各离散点x0,x1,x2,⋯之间的距离称为步长h。欧拉法的基本思想是,一阶微分dydx可用向前差分代替,即11'()nnyyyh。带入微分方程,可得1(,)nnnnyyfxyh因此,1*(,)nnnnyyhfxy,其中nnxxh1。当给定x0,y0和步长h后,即可按下面步骤求得数值解:0000(,)xfxyy1111,(,)yfxyx2222,nyfxyyx请按上述方法编写程序用Euler法求解微分方程22dyyxdx,当x0=0时,y0=1.0。取h=0.1,试求出当xi=0.1,0.2,0.3,0.4⋯.,1.0时的yi值。programmainimplicitnonerealx(0:10)realy(0:10)realp(0:10)integer(2)i,jy(0)=1.0;x(0)=0.0p(0)=f(x(0),y(0))doi=1,10x(i)=x(i-1)+0.1enddodoj=1,10y(j)=y(j-1)+0.1*p(j-1)p(j)=f(x(j),y(j))7/7print*,'x(',j,')=',x(j),'y(',j,')=',y(j)enddocontainsfunctionf(a,b)reala,b,ff=b*b-a*aendfunctionend