本文共 1430 字,大约阅读时间需要 4 分钟。
本文我们学习面向过程的程序设计,其思想是以程序执行过程为设计流程,是程序设计中最自然的一种设计方法,也叫结构化编程。
下面,我们以世界锦标赛-铅球为例子,来学习其面向过程的程序设计方法。
铅球比赛是技术和力量的完美结合,铅球比赛的成绩由这两个因素所决定 。我们把这个问题抽象为铅球飞行轨迹的计算问题,铅球飞行轨迹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()运行程序,输入输出如下:
最后,我们总结面向过程程序设计的特点:
(完)