本文我们学习面向过程的程序设计,其思想是以程序执行过程为设计流程,是程序设计中最自然的一种设计方法,也叫结构化编程。
下面,我们以世界锦标赛-铅球为例子,来学习其面向过程的程序设计方法。
铅球比赛是技术和力量的完美结合,铅球比赛的成绩由这两个因素所决定 。我们把这个问题抽象为铅球飞行轨迹的计算问题,铅球飞行轨迹IPO模式为:
为了简化问题,我们忽略空气阻力,重力加速度取9.8米/(秒*秒)。在程序中模拟铅球的飞行,其实就是时刻更新铅球在飞行中的位置。
在一段时间内,铅球在水平面和垂直面上移动的距离,由它在这个方向上的速度所决定。为了使问题更加简单,分开讨论x轴和y轴的速度,由于忽略了空气阻力,在飞行过程中x轴方向上的速度保持不变,然而,由于重力加速度的影响,y轴方向上的速度时刻在发生变化。y轴方向上的速度开始时是正的,当铅球下落时,速度就会变为负值。根据以上分析,可以设计相关参数:
面向过程的程序设计基本步骤:
我们使用python3来模拟铅球的飞行轨迹,代码如下:
from math import pi,sin,cos,radians
def main():
angle,vel,h0,time=getInputs()
xpos,ypos=0,h0
print('the position:({0:.3f},{1:0.3f})'.format(xpos,ypos))
xvel,yvel=getXYComponents(vel,angle)
while ypos>=0:
xpos,ypos,yvel=updatePositionAndVelocity(time,xpos,ypos,xvel,yvel)
print('the position:({0:.3f},{1:0.3f})'.format(xpos,ypos))
print('\nDistance traveled:{0:0.1f} meters.'.format(xpos))
def getInputs():
angle=eval(input('Enter the launch angle(in degrees):'))
vel=eval(input('Enter the initial velocity(in meters/sec):'))
h0=eval(input('Enter the initial height(in meters):'))
time=eval(input('Enter the time interval:'))
return angle,vel,h0,time
def getXYComponents(vel,angle):
theta=radians(angle)
xvel=vel*cos(theta)
yvel=vel*sin(theta)
return xvel,yvel
def updatePositionAndVelocity(time,xpos,ypos,xvel,yvel):
xpos=xpos+time*xvel
yvel1=yvel-time*9.8
ypos=ypos+time*(yvel+yvel1)/2.0
yvel=yvel1
return xpos,ypos,yvel
if __name__=='__main__':
main()
运行程序,输入输出如下:
最后,我们总结面向过程程序设计的特点:
(完)