|
|
|
|
|
|
|
您现在的位置: 算法与程序设计网>> 首页>> 算法与程序设计
欢迎光临算法与程序设计网!
 
4-1节  用解析法设计程序
 

(作者:朱寿成  修改时间:2006年7月19日)

一、       教学目标

1、            知识与技能

知识目标:

1.对“算法”的概念作进一步的了解。

2.了解解析算法的特点。

3.通过实例的学习,掌握解析算法的各环节。

4.掌握运用各学科知识解决实际问题的方法。

5.掌握从解决问题的解析式到设计相应程序的窗体和程序代码的方法。

6.通过实践掌握用解析算法编写程序代码的一些技巧。

7.能关注使用解析算法解决问题的意义。

8.在综合应用各种知识解决问题时提高自己的整体素质。

9.能运用学过的窗体和控件的基本知识是进行可视化编程。善于通过交流设计出简洁好用的界面。

技能目标

能够用解析法分析简单问题,设计算法,编写程序求解问题。

2、            方法与过程

以学生生活中最熟悉的测量物体、楼房的高度入手,引出有关测量的话题。通过测量不可到达底部的物体的高度的问题,导出了解析算法的基本概念,然后通过计算电阻和计算小球弹跳路程的两个例题,叙述了解析算法应用的两个重要手段:通过列出方程(或方程组)然后求解和用重复结构对解析式进行计算。进一步提高学生对解析算法和可以通过多种方法设计程序的理解。

3、            情感态度和价值观

结合高中生想象具有较强的随意性、更富于现实性的身心发展特点,综合反映出提升学生在各个领域的计算机应用水平,提高学生交流和讨论,自己总结获得新的知识能力,培养学生正确寻找解决问题的方法和正确的学习方法。

 

二、       重点难点

1、            教学重点

1)  理解解析法的基本概念。要培养学生善于综合运用数学、物理、化学等各学科的知识和思考方法,寻找问题中各要素之间的关系,导出解决问题的解析式或列出相关的方程,然后设计程序求解。

2)  根据算法写出程序代码并且调试程序求得问题的正确解答的能力。当算法确定之后,应当能够熟练地根据算法写出程序代码,并且通过调试程序发现并改正错误,得出正确的解答。

3)  根据问题的特点,找到系统提供的资源(如各种数据类型、内部函数等等),简化问题的求解过程。

2、            教学难点

(1)  解析式的导出或方程(组)的列出并求解。这些工作要求对问题所涉及的领域有比较深的认识,它的困难是外在的,是由问题的性质决定的。

(2)  算法的合理设计。不论是使用重复结构还是寻找的运算顺序,对于经验不足的初学者是有困难的,特别是计算过程中可能会遇到计算误差的积累影响运行结果的情况,需要有较多的编程经验才能加以解决。

(3)  VB的数据类型。

三、       教学环境

1、            教材处理

教材选自《广东省普通高中信息技术选修一:算法与程序设计》第四章第一节,本节从古埃及测量金字塔高度故事引入,引出有关测量的话题。通过一道测量不可到达底部的物体的高度的问题,导出了解析算法的基本概念,然后通过计算小球弹跳路程的计算,和电阻计算两个例题,叙述了解析算法应用的两个重要手段:用重复结构对解析式进行计算和通过列出方程(或方程组)然后求解。在此基础上教材安排了两个实践探究活动,进一步提高学生对解析算法的理解。

教材经处理后,以学生生活中最熟悉的测量物体、楼房的高度入手,引出有关测量的话题。通过一道测量不可到达底部的物体的高度的问题,导出了解析算法的基本概念,然后通过计算电阻和计算小球弹跳路程的两个例题,叙述了解析算法应用的两个重要手段:通过列出方程(或方程组)然后求解和用重复结构对解析式进行计算。进一步提高学生对解析算法和可以通过多种方法设计程序的理解。

教学方法是以实现“教—引—放—收”的教学过程,体现“问题情景式任务驱动”的教学方法。任务驱动强调让学生在密切联系学习、生活和社会实际的有意义的“任务”情景中,通过完成任务来学习知识、获得技能、形成能力、内化伦理。

采用任务驱动、讲解、分析归纳、探究、实践操作和学生自主学习相结合的学习方法。

2、            预备知识

学生已掌握了用计算机解决问题的过程,掌握了VB界面设计的相关内容,掌握了程序设计的基础。

3、            硬件要求

建议本节课在计算机机房或多媒体电脑教室中完成,最好有广播教学系统或投影仪,为拓展学习,学生机应允许上互联网。

4、            所需软件

学生机要安装VB6.0或以上版本。

5、            所需课时

2课时(90分钟)

 

四、       教学过程

导入:

同学们,我想所有的同学都会测量物体和楼房的垂直高度,但如下的问题会测量吗?

4.1.1      用解析法求解问题的基本过程

1、测量高度问题的求解

问题:

4.1: 如图41所示,MN是竖直于地面的物体,其底部N不可到达。为了测量MN的高度,在地面上选取一条与MN在同一平面的水平线线段AB为基线,测得AB的长为a=20米,在A点向M点张望的仰角 A38.40,在B点向M点张望的仰角B22.80。试设计程序计算高度MN

41(1)测量物体高度示意图

 

(1)    分析问题(以下内容由老师正确引导,学生小组协作完成)

我们不可能直接求出物体的高度。但我们可以利用所学的知识(三角函数)来完成该工作。

 

在直角三角形ANM中可以得到:

tanA0MN/AN

即:ANMN/ tan A0

 

在直角三角形BNM中可以得到:

tan B0MN/BN

即:BNMN/ tan B0

 

所以:

ABBNAN

MN/tan B0MN/tan A0 

MN1/ tan B01/tan A0

 

(2)    设计算法

   设计输入输出界面,从三个文本框中输入基线长a ,仰角A0Alpha代替、B0Bata代替

   计算tan A0的倒数(用COTA表示),即

COTA1/tanA03.14159/180);

   计算tan B0的倒数(用COTB表示),即

COTB1/tanB03.14159/180);

   计算a/(COTBCOTA)

   输出结果 

 

(3)    编写程序

设计窗体如图42

41(2)测量高度问题程序的窗口

 

 

对象名

属性名

属性值

功能

标签

[ 名称 ]

label1

Label2

Label3

Label4

标签的名称

Caption

基线长  a=

仰角  α=

仰角  β=

被测物体高度=

设置标签显示的内容

文本框

Enabled

Text1 textbox

Text2 textbox Text3 textbox Text4 textbox

文本框的名称

text

全部设置成空

设置text的值

按钮

[ 名称 ]

command1

命令按钮的名称

Caption

计算

设置命令按钮显示的内容

41(1)对象属性表

参考程序41

Private Sub Command1_Click()

  a = Val(Text1.Text)

  Alpha = Val(Text2.Text)

  bata = Val(Text3.Text)

  pi = 3.14159265

  COTA = 1 / Tan(Alpha * pi / 180)

  COTB = 1 / Tan(bata * pi / 180)

  MN = a / (COTB - COTA)

  Text4.Text = MN

End Sub

 

(4)    调试程序(运行源程序

 

41(3)参考程序41运行的结果

 

(5)    检验结果

 

探究:

在本问题里,如果输入的两个仰角相等,或其中一个仰角是900,都会导致程序非正常结束。如果,甚至会使输出的结果是负数!请讨论一下使用者输入数据时比较常见的错误会有哪些?我们在程序中可以怎样防范?

2、总结

解析法的基本概念

通过分析问题中各要素之间的关系,用最简练的语言或形式化的符号来表达它们的关系,得出解决问题所需的表达式,然后设计程序求解问题的方法称为解析法。

 

4.1.2 用解析法求解问题的实践

1、电阻计算问题

问题:

4-2:在一家工厂作社会调查时,张军了解到他们正在进行一项技术改革,

其中有一个环节是改变一个局部电路的电阻以观察对整个器件的影响。这个局部电路由并联的两个分支组成(如图45),其中一个分支的等效电阻是R1,而另一个分支的等效电阻为R2。因为电路特性的需要,必须保持R2R12000Ω。工厂技术人员希望由这两个分支并联的电路的总电阻R分别取为1000Ω2000Ω……100000Ω。这样得多次计算R1R2的电阻值,而这种计算每次都很麻烦。于是张军就编制了一个程序帮他们解决问题,只要输入总电阻R的值,程序就计算出相应的R1R2的值。张军因此受到了技术员的称赞。你也能编出这个程序吗?

R1

  


 

R2

 

41(4)并联电路示意图

 

(1)分析问题。(老师引导,学生完成)

张军是这样想的:

根据并联电路电阻的计算公式,1/R=I/R1十1/R2,以R2=R1+2000代入,

即得:

1/R=1/R1+1/(R1+2000)

R1为未知量、R为已知量,通过去分母整理可以得到关于R1的方程:

R12+(2000-2*R)*R1-2000*R=0,

解这个关于R1的二次方程即可解决问题。

 

(2)设计算法。(老师引导,学生完成)

根据上述的分析,张军写出解决问题的算法如下:

①输入总电阻R;

②计算方程R12+(2000-2R)*R1-2000*R=0的判别式=(2000-2*R)2+8000*R;

③如果D≥0转④,否则转⑥;

④计算出方程R12+(2000-2*R)*R12000*R=0的根R1=(2*R-2000+sqr(D))2,(R1’=(2*R-2000+sqr(D))2肯定是增根,不必计算);

⑤把R1和R1+2000在两个文本框内输出,转⑦;

⑥输出方程没有解的信息“不可能”;

⑦结束。

 

(3)编写程序。

用文本框输入总电阻值,用两个文本框分别输出R1R2的值,用3个标签

框对这些文本框作说明。另外设一个命令按钮触发程序执行,如图4-6所示。

  

 

 

 

 

 

 

 


 

4-1(5)电阻设计问题的窗体设计图

 

对象名

属性名

属性值

功能

标签

[ 名称 ]

label1

Label2

Label3

标签的名称

Caption

总电阻R=

R1=

R2=

设置标签显示的内容

文本框

Enabled

Text1 textbox

Text2 textbox

Text3 textbox

文本框的名称

text

全部设置成空

设置text的值

按钮

[ 名称 ]

command1

命令按钮的名称

Caption

计算

设置命令按钮显示的内容

4-1(2)对象属性表

 

先设计好电阻计算问题的窗口,再根据算法写出程序代码:(其中带下划线的部分由学生讨论完成)

Private Sub Command1_Click()

  R = Val(Text1.Text)

  L = 2000 - 2 * R

  D = L * L + 4 * 2000 * R

  If D >= 0 Then

      R1 = (-L + Sqr(D)) / 2

      Text2.Text = R1

      Text3.Text = R1 + 2000

    Else

      Text2.Text = "不可能"

      Text3.Text = "不可能"

  End If

End Sub

 

(4)调试程序

 

41(6)电阻计算问题解答示意图

(5)检测结果

 

小结:用解析法求解问题,有时需要根据问题列出方程,用解方程的方法得到答案。

例如:X5+X3-2*X-9=0就没有现成的求根公式可用,这时就需要用数值逼近的方法求解。

  

新课:(本节第二课时)

导入:

复习解析法的概念:通过分析问题中各要素之间的关系,用最简练的语言或形式化的符号来表达它们的关系,得出解决问题所需的表达式,然后设计程序求解问题的方法称为解析法。

 

2、小球弹跳问题

问题:

43:小球从10米高处自由下落,每次弹起的高度是下落高度的70%。当小球弹起的高度不足原高度的千分之一时,小球很快就会停止跳动。计算小球在整个弹跳过程中所经历的总程(忽略弹起高度不足原高度千分之一的部分)。

(1)    分析问题:(老师详细分析整个运动过程,学生讨论完成带下划线的部分内容)

 

 41(7)小球运动分析图

 

根据上图的第一种分析方法,请思考并归纳规律:_小球每次弹起的距离就是本次下落距离的0.7倍,而每一次下落距离等于上一次弹起的距离   

即:    Ln0.7Hn    Hn+1= Ln

其中Hn为第n次下落的距离,Ln为第n次弹起的距离,n=123,…,H1=10。计算一直进行到第m次(LmH1/1000LmH1/1000〉,把它们都相加,即可求出问题的解:

S=(H1L1)+(H2L2)+(H3L3)+…+(HmLm

2)设计算法

①输入小球开始高度Home