西安交大并行计算作业

  • 格式:doc
  • 大小:302.66 KB
  • 文档页数:19

下载文档原格式

  / 19
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并行计算与程序设计作业

班级:姓名:学号:

1.1至1.3节作业

1.调试课件中的所有程序,并完成作业,同时在程序结果中需要输出个人

信息;

代码:

Program main

write(*,*)'班级:', '

write(*,*)'姓名:',' '

print *,'学号:',''

end

2.编写一个数值求解方程的程序,方程为4.1x3 −5.3x=11.8,求解区间

为(1,5),误差小于1e-6。

代码:

a=1

b=5

if(f(a)*f(b).LT.0) then

write(*,*)'inter:(',a,',',b,')'

Loop1: do while((abs(f(a)-f(b)).gt.10e-6).and.

$ (abs(a-b).gt.10e-6))

c=(a+b)/2

if(f(a)*f(c).le.0)then

b=c

else

a=c

end if

end do Loop1

write(*,*)'x=',c

else

write(*,*)'Please input real interval'

end if

end

real function f(x)

f=4.1*x**3-5.3*x-11.8

end

结果:

1.4节作业

1.采样简单离散求和法求下面积分值:

x2

sin(x)+1

xx 1

代码:

read(*,*) a,b,n

h=(b-a)/(2.0*n)

s=0.0

x=a+h

f2=0.0

f4=0.0

loop1: do i=1,n-1 x=x+h

f2=f2+f(x)

x=x+h

f4=f4+f(x)

end do loop1

s=h/3.0*(f(a)+f(b)+4.0*f4+2.0*f2)

write(*,150) s

100 format(1x,'a=',f8.2,2x,'b=',f8.2,

$ 2x,'n=',i4)

150 format(1x,'s=',f16.7)

end

real function f(x)

f=x**2/(sin(x)+1)

end

d oubl

e precision i,ai,y

double precision sum=0

i=1

do 10 while(1/i.gt.1e-5)

sum=1/i+sum

i=i+1

10 continue

write(*,*) 'sum=',sum

end

结果:

1.6节作业

1.调试课本中的所有程序;

(结果略)

2.用双精度型数据计算:

∑1

x=

1

1+

1

2+

1

3+⋯+

1

x

x

x=1

直到1

x

≤10−5

代码:

double precision sum=0

i=1

do 10 while(1/i.gt.1e-5)

sum=1/i+sum

i=i+1

10 continue

write(*,*) 'sum=',sum

end

结果:

3.已知三角形三个顶点的坐标分别为A(1.5,2.5),B(-2.5,1), C(1,-1),采

用复型数据类型求三角形的面积和重心。

代码:

complex a,b,c,center,area,perimeter

a=(1.5,2.5)

b=(-2.5,1)

c=(1,-1)

center=(a+b+c)/3

perimeter=(a+b+c)/2

area=sqrt(perimeter*(perimeter-a)*(perimeter-b)*

$(perimeter-c))

write(*,10)"center=",center

write(*,10)"area=",area

10 format(1x,a,f6.3,f6.3)

End

结果:

4.尝试编写课件例子中对应的破译程序。有兴趣可以尝试修改原编码

程序中后移位数(当前为5)变化的情况,比如移动位数为当前位置序号。

代码:

program main

character*80 line1,line2

character l1

read(*,*)line1

n=len(line1)

do 10 i=1,n

l1=line1(i:i)

if((lge(l1,'A').and.lle(l1,'Z')).or.

$ (lge(l1,'a').and.lle(l1,'z'))) then

m=ichar(l1)+i

if((m.ge.ichar('a').and.m.le.ichar('z')).or.