VFP第6部分程序算法、顺序分支循环、控.ppt_第1页
VFP第6部分程序算法、顺序分支循环、控.ppt_第2页
VFP第6部分程序算法、顺序分支循环、控.ppt_第3页
VFP第6部分程序算法、顺序分支循环、控.ppt_第4页
VFP第6部分程序算法、顺序分支循环、控.ppt_第5页
已阅读5页,还剩104页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Visual Foxpro 6.0,程序设计基础,要点: 1.算法的概念及特点 2.掌握程序3种基本结构的表示 3.掌握利用分支结构编程 4.掌握利用循环结构编程 5.常用控件,第三、四、五讲 程序设计(1),算法及算法的表示,一、算法的概念及特点 所谓算法就是对解决问题所采用的方法和步骤的描述。,二、算法的描述 算法的描述方法有很多,为直观、准确地表示一个问题的处理方法和步骤,通常采用流程图的方法。 流程图是用一些几何图形符号、线条及文字说明来表征一个问题的处理过程。 一般采用传统流程图和N-S图来描述算法。,(教材P51) 【例3-1】设计如图所示表单,在文本框text1中输入华氏温度,单击“计算”按钮可以求出对应的摄氏温度,并在文本框text2中显示。,“计算”按钮的“Click”事件代码如下: fas=thisform.text1.value cels=5*(fas-32)/9 thisform.text2.value=round(cels,1),什么意思?,描述方法1用自然语言表示 步骤1:输入华氏温度fas。 步骤2:按照公式,计算摄氏温度cels。,步骤3:输出摄氏温度。,描述方法2 用流程图表示如图所示。,描述方法3用N-S流程图如图所示。,一个算法应该具有以下特点:教材P52 确定性。 有穷性。 有效性。 输入。 输出。,任何一个问题能否让计算机处理,关键在于能否设计出合理的算法,有了合适的算法,再使用合适的计算机语言来编写程序。 VFP就是一种语言工具。要用VFP编写出高质量的程序,一方面要构建合理的算法,另一方面要掌握VFP的语法规则,它是实现算法的基础。,命令有一定的书写规则: 1、命令分行。 程序中每条命令都以回车键结尾,一行只能写一条命令。若命令需分行书写,应在一行终了时键入续行符“;”,然后按回车键。,2、命令注释。 程序中可以插入注释,以提高程序的可读性。 注释语句,NOTE|* 注释部分 & 注释部分,格式:,行首注释,单命令的行尾注释,三、3种基本结构的表示 程序的3种基本结构:顺序结构、选择(或分支)结构、循环结构,它们构成了实现一个算法的基本单元。,顺序结构:是一种最基本、最简单的程序结构。如下图所示,先执行A,再执行B,A与B按照顺序执行。,选择(或分支)结构:根据条件是否成立而执行不同的程序模块。,循环结构:是指重复执行某些操作,重复执行的部分称为循环体。,常用输入输出控件,1)输入控件,2)输出控件,文本框,标签、文本框,fas=thisform.text1.value,thisform.text2.value=round(cels,1),R=thisform.text1.value,thisform.label3.caption= alltrim(str(s,8,1),程序设计实例,顺序结构程序实例 分支(选择)结构程序实例 循环结构程序实例,1顺序结构 顺序结构是在程序执行时,根据程序中语句的书写顺序依次执行的命令序列。Visual FoxPro系统中的大多数命令都可以作为顺序结构中的语句。,教材P53,(教材P52) 【例3-2】设计如图3-5所示表单,在文本框text1、text2、text3中输入三角形的三边,单击“计算”按钮可以在文本框text4中显示三角形的面积。其计算公式为,(其中a,b,c为三角形的三边,area为三角形的面积),“计算”按钮的“Click”事件代码如下: a=thisform.text1.value b=thisform.text2.value c=thisform.text3.value =(a+b+c)/2 area=sqrt( *( -a)*( -b)*( -c) thisform.text4.value=round(area,1),2分支(选择)结构 分支结构是在程序执行时,根据不同的条件,选择执行不同的程序语句,用来解决有选择、有转移的诸多问题。,多路分支语句,常见的分支结构有:,IF语句,单分支语句ifendif,双分支语句 Ifelseendif,流程图,1)IF语句 格式:,见教材P57,条件?,语句序列1,语句序列2,Y,N,ENDIF之后的命令,(教材P53) 【例3-3】修改【例3-2】,在文本框text1、text2、text3中输入三角形的三边,单击“计算”按钮,如果输入的三边能构成三角形,则在文本框text4中显示三角形的面积;否则用提示框给出提示信息:不能构成三角形,重新输入!。如图所示。,“计算”按钮的“Click”事件代码如下: a=thisform.text1.value b=thisform.text2.value c=thisform.text3.value if a+bc and a+cb and b+ca =(a+b+c)/2 area=sqrt( *( -a)*( -b)*( -c) thisform.text4.value=round(area,1) else messagebox(“不能构成三角形,重新输入!“) thisform.text1.value=0 thisform.text2.value=0 thisform.text3.value=0 thisform.text4.value=0 thisform.text1.setfocus endif,(教材P54) 【例3-4】设计如图3-13所示表单,其中文本框Text1中可以接受日期型数据,运行表单后在Text1中输入日期:08/25/11,单击命令按钮“Command1”,则标签Label2显示什么?其中command1控件的click事件代码: d=thisform.text1.value y=year(d) IF y/4=int(y/4) AND y/100int(y/100) OR int(y/400) =y/400 y1=“是“ ELSE y1=“不是“ ENDIF thisform.label2.caption=y1,判断某一年是否是闰年,假如年份用y表示,判断y是否是闰年的方法是:若y能够被400整除或y能够被4整除并且不能够被100整除,提示:判断一个整数M能否被另一个整数N整除,一般采用三种方法,判断: MOD(M,N)是否等于0 INT(M/N) 是否等于M/N M%N=0 若等于,则表明M能被N整除。,EXM2:输入两个数,比较大小,并输出较大数。,方法一:双分支,方法二:单分支,EXM3:输入两个数,比较大小,并按从大到小的顺序输出。,使用单分支结构:,容器A,容器B,容器C,1,3,1、C = A 2、A = B 3、B = C,交换,思考:输入3个数a,b,c,比较大小,并按从大到小的顺序输出。,“求解”命令按钮的“Click”事件代码如下: a=thisform.text1.value b=thisform.text2.value c=thisform.text3.value if ab t=a a=b b=t endif if ac t=a a=c c=t endif,if bc t=c c=b b=t endif thisform.text1.value=a thisform.text2.value=b thisform.text3.value=c,(教材P53) 【例3-5】已知一元二次方程的3个系数,求一元二次方程的根。求根公式 :,分支的嵌套,“求解”命令按钮的“Click”事件代码如下: a=thisform.text1.value b=thisform.text2.value c=thisform.text3.value if a=0 messagebox(“二次项系数为0,这不是一个一元二次方程“) thisform.text1.setfocus else d=b2-4*a*c if d=0 x1=round(-b+sqrt(d)/(2*a),2) x2=round(-b-sqrt(d)/(2*a),2) thisform.text4.value=x1 thisform.text5.value=x2 else messagebox(“该方程没有实数根!“) endif endif,EXM 4:比较任意三个数的大小,并输出较大数。,输入三个数a,b,c,ab?,ca?,cb?,输出c,输出a,输出c,输出b,结束,N,Y,Y,N,N,Y,4)多分支语句 格式: (见教材58页) 流程图:,ENDCASE后面的语句,【修改例3-6】输入月份值,显示对应季节的中文名字(3,4,5月为春季,6,7,8月为夏季,9,10,11月为秋季;12,1,2月为冬季)。,“输出”命令按钮的click事件代码: yf=val(thisform.text1.value) do case case yf=3 or yf=4 or yf=5 jj=“春季“ case yf=6 or yf=7 or yf=8 jj=“夏季“ case yf=9 or yf=10 or yf=11 jj=“秋季“ case yf=12 or yf=1 or yf=2 jj=“冬季“ endcase thisform.label3.caption=jj,注意: ifendif,do caseendcase必须配对出现,表示分支的开始和结束。 为使程序清晰易读,对分支、循环等结构应使用缩格书写方式。,表达分支、循环的每种语句都不允许在一个命令行中输完,必须按格式一行一行地键入,因此,不能出现在命令窗口中。 三种选择结构之间可以相互嵌套,但不能交叉。,循环结构能够使某些语句或程序段重复执行若干次。 如果某些语句或程序段需要在一个固定的位置上重复操作,使用循环是最好的选择。,3循环结构,常见的循环结构有:,条件循环,步长循环,扫描循环,涉及数据表的循环,第6章介绍,1)条件循环(do while循环) 格式: 流程图:,条件,语句序列,Enddo之后的语句,N,Y,循环体,教材P62,【例】计算1+2+3+100,第 1 步, 计算 0+1; 第 2 步, 计算 (0+1)+2; 第 3 步, 计算 (0+1+2)+3; 第 i 步, 计算 (0+1+i-1)+i; . 第 100 步,计算 (0+1+99)+100;,递推算法,前i-1次累加和,第i次累加项,基本方法:,属于“累加器”类型问题,(1)在进入累加前先给累加器赋初值(求和一般为0) (2)用循环语句实现累加 循环变量赋初值;循环条件;循环变量的改变规律 (3)循环体语句的设计 累加器当前值=累加器原值+循环当前值,三个“确定” 循环三要素,算法: 确定循环变量i并赋初值为1 定义s存放累加和,初值为0 确定循环条件 i=100 s=s+i 确定循环变量的变化趋势i=i+1 输出结果s,递推公式,在条件循环中如何体现的?,s=1+2+3+100,“计算”按钮的click事件代码: s=0 i=1 do while i=100 s=s+i i=i+1 enddo Thisform.text1.value=s,循环体,【修改例3-8】计算s=1+2+3+n,“计算”命令按钮的“click”事件代码: n=thisform.text1.value s=0 x=1 do while x=n s=s+x enddo thisform.text2.value=s,说明: 循环结构从do while开始,到enddo结束,两者必须成对出现;在enddo后面可以书写注释。 循环是否继续取决于条件的当前取值,一般情况下循环体中应含有改变条件取值的命令或语句,否则将造成死循环。 循环结构能自身嵌套(多重循环),还能与选择结构的各种形式嵌套。,2)步长循环(forendfor计数循环) 格式:,教材P62,计算1+2+3+100,s=0 for i=1 to 100 s=s+i endfor Thisform.text1.value=s,step 1,(教材P60) 【例3-9】设计如图所示表单,在文本框text1中输入N的值,求N!。,(1)给累乘器赋初值(一般为1) (2)用循环语句实现累乘 循环变量赋初值;循环条件;循环变量改变规律 (3)循环体设计 累乘器当前值=累乘器原值*循环当前值,如:123.100,基本方法:,属于“累乘器”类型问题,“计算”命令按钮的“Click”事件代码: p=1 for i=1 to thisform.text1.value p=p*i endfor thisform.text2.value=p,说明: 步长可正可负,缺省为1。 循环体中不应包含改变循环变量值的命令,否则循环次数将随之改变。 如果循环可以通过计数来控制,则本循环比条件循环更为方便。,当循环 步长循环 在文本框Text1中输入终值n 在文本框Text2中输入步长k i=1 for i=1 to n step k do while i endfor|next i=i+k endddo,【例】求100以内的奇数和。,A=1+3+5+99,循环变量 初值n=1,循环条件n100,循环变量的变化 趋势n=n+2,请同学们自己写出程序,循环体累加语句:A=A+n,【例】求,循环变量 初值x=1,循环条件xn,循环变量的变化 趋势x=x+1,请同学们自己写出程序,循环体累加语句:K=K+x2,思考:计算e的近似值。其公式为:e1+1/1!1/2!1/3!1/N!,直到1/N!0.000001为止。,“计算”命令按钮的“click”事件代码: s=1 i=2 p=1 do while 1/p=0.000001 s=s+1/p p=p*i i=i+1 enddo thisform.text1.value=s,阶乘,累加,【例】求所有的水仙花数。(所谓水仙花数是指一个三位数,其各位数字的立方和等于该数本身。,编程方法: “枚举法” 按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。,查找范围:,三位数100999,任意一个三位数,判断这个三位数x是水仙花数的条件: X=x13+x23+x33,例:1+2+n 1到n的奇数和、偶数和 100以内能够被X整除的数之和。,请同学们自己写出程序,命令按钮的“click”事件代码: s=0 for i=1 to 100 s=s+(-1)(i+1)/i endfor thisform.text1.value=s,方法1:,命令按钮的“click”事件代码: s=0 k=1 for i=1 to 100 s=s+k/i k=-k endfor thisform.text1.value=s,方法2:,命令按钮的“click”事件代码: s1=0 s2=0 for i=1 to 99 step 2 s1=s1+1/i endfor for i=2 to 100 step 2 s2=s2+1/i endfor thisform.text1.value=s1-s2,方法3:,(教材P60-61) 【例3-10】设计如图1所示表单。运行该表单,在文本框Text1中输入一串字符,单击“逆序显示”命令按钮后,逆序显示该字符串,如图2所示。,图1,图2,x=“Av56:YijB8“,8,B,j,i,Y,:,6,5,v,A,c=c+substr(x,i,1),确定变量: x:存任意字符串x=“ Av56:YijB8 “ i:存截取次数(1len(x) c:存逆序字符串 c=c+substr(x,i,1),确定算法:用循环在原字符串中从右到左逐个截取字符,重新组装成逆序字符串,确定循环三要素: 循环变量 : i (i初值为len(x),终值为1) 循环条件: i=1 循环条件改变:i=i-1(从右到左截取),【例】输入一串ASCII字符,显示数字字符串。假设输入:Av56:YijB8 显示:568。,请同学们自己写出程序,从左到右逐个取出字符x,判断x是数字的条件:,Asc(x)asc(0) and Asc(x)asc(9),【例】输入一串ASCII字符,显示大写字母串。假设输入:Av56:YijB8 显示: AYB 。 输入一串ASCII字符,显示小写字母串。假设输入: Av56:YijB8 显示:vij 。,请同学们自己写出程序,【例】如图所示一程序界面。文本框TEXT1已经输入一串文字,单击“转换”命令按钮后,文本框的值将变为什么?,“转换” 命令按钮的CLICK 事件代码: N=LEN(THISFORM.TEXT1.VALUE) Y= DO WHILE N0 X=SUBSTR(THISFORM.TEXT1.VALUE,N,1) IF ASC(X)=ASC(a) X=UPPER(X) ELSE X=LOWER(X) ENDIF Y=X+Y N=N-1 ENDDO THISFORM.TEXT1.VALUE=Y,tHIS IS A cpu.,对象的事件和方法,1、事件(Event)教科书P9 事件是作用于对象的某些行为和动作。 事件(Event) 是预先定义好的特定的动作,不能修改、增加和删除,由用户或系统激活。 对象不同,事件也不完全相同。,圆面积程序修改1,文本框text2获得焦点,即光标移到文本框text2中,输入半径后,按Tab键,光标移到文本框text2中显示圆面积,圆面积程序修改2,文本框text1失去焦点,即在文本框text1中输入面积后,敲回车键(该事件可以换成Lostfocus),输入半径后,按回车键,在文本框text2中显示圆面积,2、方法(Event)教科书P10 方法是指对象自身可以进行的动作或行为。它实际上是对象本身所内含的一些特殊的函数或过程,以便实现对象的一些固有功能。可以通过调用对象的方法实现该对象的动作及行为。,直接调用的对象方法程序不多,主要有:刷新(Refresh)、释放(Release)、设置焦点(setfocus)。 在面向对象的程序设计过程中,可为对象创建新的属性和方法程序。,(教材P6) 【例1-2】设计如图1-11所示表单,表单运行后,在两个文本框中分别输入一个数,比较大小,光标移到文本框text3时,在其中显示最大数;单击“关闭”按钮,可以关闭表单。,文本框text3的“GotFocus”事件代码: Thisform.text3.value=max(thisform.text1.value,thisform.text2.value) “关闭”按钮的“Click”事件的程序代码: Thisform.release,表单设计中的常用控件,Vfp的基类有两类: 控件类 容器类,产生控件类对象,产生容器类对象,标签(label),主要属性:Caption、BackStyle、WordWrap,控件类,标签没有Value属性,教材P16,仔细体会教科书P12【例1-3】,命令按钮(command),主要属性:Caption、Enabled 主要事件:Click,控件类,教材P17,该属性值为.F.,则命令按钮呈灰色显示, 表示暂时不可用。表示为: Tmand1.enabled=.f. 该属性值为.T.,则命令按钮呈深色显示, 表示可用。表示为: Tmand1.enabled=.t.,Click事件代码: if mand2.caption=“可用“ mand2.caption=“不可用“ Tmand2.enabled=.f. else mand2.caption=“可用“ Tmand2.enabled=.t. endif,文本框(text),主要属性:PasswordChar、Value、ControlSource 主要事件:Valid、GotFocus、 Lostfocus 主要方法:setfocus,控件类,要让文本框接收小数, 可以将其属性值设置 为:0.0,教材P16,仔细体会教科书P6【例1-2 】 、P14 【例1-4】,改写圆面积程序(1) 改写圆面积程序(2),注意:这两个圆面积程序中的This, 表示当前编写代码的对象。这是一 种相对引用。见教材P13 第一个程序是对text1编写代码, This就表示text1;第一个程序是 对text2编写代码,This就表示 Text2。,组合框(Combo),主要属性: ControlSource、RowSource、 RowSourceType 、 ColumnCount 主要事件:InteractiveChange,控件类,教材P28,仔细体会教科书P26【例2-4 】 、P38 【例2-12】,组合框中数据源的类型,组合框中的数据源,【例】设计如图所示的简易登录表单,表单运行后用户可以在组合框中录入或选择用户名,输入密码后敲回车键,验证登录是否成功(密码显示为“*”)。验证成功以后关闭表单。 说明:预设两个用户:“王平”的密码为“ABC”;“刘梅”的密码为“123456”。,注意:关闭表单的代码为 Thisform.release,编辑框(edit),主要属性:ReadOnly、ScrollBars,控件类,接收的是字符型的值,教材P63-64,仔细体会教科书P62【例3-11 】,其值为.T.,编辑框不能修改(只读),【例】设计如图所示的圆面积计算表单,表单运行后能将计算过的所有数据都显示在编辑框中,编辑框内的文字只读。,P88实验4.2任务1,计时器(timer),主要属性: Enabled、Interval 主要事件:timer,控件类,值为.t.,计时器运行 值为.f.,计时器不运行,单位为:毫秒,教材P41,仔细体会教科书P40【例2-13 】,P98自主实验任务1,Timer事件代码: ThisForm.Label1.Left=ThisForm.Label1.Left+1 IF ThisForm.Label1.Left200 ThisForm.Label1.Left= 0-ThisForm.Label1.Width ENDIF Click事件代码: ThisForm.Release,命令按钮组(commandGroup),主要属性:ButtonCount、Value 主要事件:Click,容器类,包含command1、command2等, 设置每个按钮的caption属性: 单击右键,选择“编辑”,Tmandgroup1.value=i i=1,表示鼠标单击第一个命令按钮;i=2,表示 鼠标单击第二个命令按钮。,教材P119,DO CASE CASE This.Value=1 ThisForm.Timer1.Enabled=.t. CASE This.Value=2 ThisForm.Timer1.Enabled=.f. CASE This.Value=3 ThisForm.Timer1.Enabled=.f. STORE 0 TO f,m,bfm ThisForm.Label1.Caption=“ 0: 0: 0” CASE This.Value=4 ThisForm.Release ENDCASE,P94实验4.3任务1,1表示逻辑真,0表示逻辑假,复选框(check),主要属性:Caption、Value,控件类,选项按钮组(OptionGroup),主要属性:ButtonCount、Caption、ControlSource、valu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论