常用算法介绍讲稿.ppt
《常用算法介绍讲稿.ppt》由会员分享,可在线阅读,更多相关《常用算法介绍讲稿.ppt(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、关于常用算法介绍第一页,讲稿共七十七页哦算法1:累加和累乘累加形式:累加形式:V=V+e连乘形式:连乘形式:V=V*e其中:其中:V是变量,是变量,e是递增表达式。累加和是递增表达式。累加和连乘一般通过循环结构来实现。连乘一般通过循环结构来实现。注意:需在执行循环体前对变量注意:需在执行循环体前对变量V赋初值。赋初值。一般的,累加时置初值一般的,累加时置初值0;连乘时置初值为;连乘时置初值为1。第二页,讲稿共七十七页哦例如求求N!的结果。的结果。PrivateSubCommand1_Click()Dimn%,i%,s&n=Val(InputBox(输入输入n)s=1Fori=1Tons=s*i
2、NextiPrintsEndSub第三页,讲稿共七十七页哦错误的例子PrivateSubCommand1_Click()Dimn%,i%,s&n=Val(InputBox(输入输入n)Fori=1Tons=1赋初值语句位置不对!赋初值语句位置不对!s=s*iNextiPrints输出输出s的值为的值为n,而不是,而不是n!EndSub第四页,讲稿共七十七页哦根据下列公式,求自然对数根据下列公式,求自然对数e的的近似值。的的近似值。要求:误差小于要求:误差小于0.00001Private Sub Command1_Click()Dim i%,n&,t!,e!e=2 i=1 t=1 Do Whil
3、e t 0.00001 i=i+1 t=t/i e=e+t Loop Print 计算了计算了;i;项目和是:项目和是:;e Print Exp(1)与上句输出值进行对比以证明算法的与上句输出值进行对比以证明算法的正确性正确性End Sub第五页,讲稿共七十七页哦解题技巧解题技巧1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用所以这类题目一般用Do循环,很少用循环,很少用For循环。设定循环变量和通项变量,注循环。设定循环变量和通项变量,注意各变量的初值;意各变量的初值;2)分解通项表
4、达式中各因子,并分别将各因子用循环变量表示;分解通项表达式中各因子,并分别将各因子用循环变量表示;3)如果步骤如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用使用Function过程;过程;4)根据步骤根据步骤1、2、3,写出通项表达式;,写出通项表达式;5)根据精度要求(往往是通项小于根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。通常是用:出一条满足精度要求后跳出循环的语句。通常是用:if通项表达式通项表达式10(-N)thenexi
5、tdo,注意这句话一般需放在累加或者连乘式之前。,注意这句话一般需放在累加或者连乘式之前。第六页,讲稿共七十七页哦根据根据X值计算:值计算:n1,2,要求:要求:n项绝对值小于等于项绝对值小于等于10-6为止。为止。注意:如果调试运行时死循环,可以按注意:如果调试运行时死循环,可以按CtrlBreak中断死中断死循环,不需要重新启动机器。(或者循环,不需要重新启动机器。(或者Ctrl+ScrollLock)第七页,讲稿共七十七页哦privateFunctioncomp(naslong)aslongdimIaslongdimresultaslongresult=1此处注意,由于是连乘,初值为此处
6、注意,由于是连乘,初值为1forI=1to2*(n-1)result=result*InextIcomp=resultEndFunction第八页,讲稿共七十七页哦PrivateSubCommand1_Click()DimnAsLong,dblCosAsDouble,xAsDoublex=Val(Text1.Text)n=1DodblCos=(-1)(n+1)*x(2*(n-1)/comp(n)IfAbs(dblCos)maxThenmax=sIfsminThenmin=saver=aver+sNextiaver=aver/nPrintmax=;max;min=;min;aver=;averE
7、ndSub第十三页,讲稿共七十七页哦解题技巧解题技巧最大值、最小值、平均值类型题目往往和数最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。时,同时记录该值所在的行号和列号。第十四页,讲稿共七十七页哦实战练习实战练习1)补充代码(补充代码(2000春二(春二(9)本程序的功能是在二维数组中查找鞍点元素,即该元素在所在行中为最大,且在所在列中为最小。
8、在一个数组中可能存本程序的功能是在二维数组中查找鞍点元素,即该元素在所在行中为最大,且在所在列中为最小。在一个数组中可能存在,也可能不存在这样的元素。数组各元素的值从文件在,也可能不存在这样的元素。数组各元素的值从文件data.txt中读取。中读取。PrivateSubForm_Click()Dima(3,3)AsInteger,iAsInteger,jAsIntegerDimmaxvrAsInteger,colAsInteger,AsIntegerOpendata.txtForInputAs#1Fori=1To3Forj=1To3Input#1,a(i,j)Printa(i,j);Nextj
9、PrintNextiFori=1To3maxvr=(1)col=1Forj=2To3Ifmaxvra(j,col)Then(3)NextjIfj3ThenPrinta(;i;,;col;)=;a(i,col)=1EndIfIf(4)ThenPrint鞍点元素不存在鞍点元素不存在NextiEndSub第十五页,讲稿共七十七页哦2)编程题(编程题(2002秋上机试卷秋上机试卷05)随机生成所有数组元素都是两位数的随机生成所有数组元素都是两位数的33的二维数组,找出的二维数组,找出其中不同行、不同列的三个数组元素的乘积最大的一组,并其中不同行、不同列的三个数组元素的乘积最大的一组,并将这三个元素显示
10、在图片框中。将这三个元素显示在图片框中。第十六页,讲稿共七十七页哦VB常用算法(三)素数常用算法(三)素数算法说明算法说明素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。判别某数m是否是素数的经典算法是:对于m,从I2,3,4,m1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。第十七页,讲稿共七十七页哦PrivateFunctionsushu(ByValnAsLong)AsBooleanDimiAsLongFori=2Ton-1If(nModi)=0ThenExitForNextIIfI=nthensushu=TrueEndFun
11、ction很显然,实际上,我们可以改进上面Fori=2Ton1为:Fori=2Toint(sqr(m)这样可以很好的提高效率。以上判断是否为素数的代码务必识记!第十八页,讲稿共七十七页哦应用举例应用举例求100200之内素数。PrivateSubCommand1_Click()DimjAsIntegerForj=100To200Ifsushu(j)=TrueThenPrintjEndIfNextjEndSub解题技巧解题技巧识记判断素数的算法过程,根据题意,灵活调用!第十九页,讲稿共七十七页哦实例说明实例说明编程题(2002年春上机试卷04)找出10000以内所有可以表示为两个平方数和的素数。
12、思路:首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数I,如果I和shuI均为平方数,则说明其可以表示为两个平方数之和。)判断数I是否为平方数的方法:sqr(i)=int(sqr(i)PrivateSubCommand1_Click()DimjAsIntegerDimmAsLong,nAsLongForj=2To10000Ifsushu(j)=TrueThenIfpf(j,m,n)=TrueThenList1.AddItemj&=&m&+&nEndIfEndIfNextjEndSubPrivateFunctionpf(ByValsh
13、uAsLong,mAsLong,nAsLong)AsBooleanDimiAsLongFori=1Toshu-1If(Sqr(i)=Int(Sqr(i)And(Sqr(shu-i)=Int(Sqr(shu-i)Thenpf=Truem=in=shu-iExitFunctionEndIfNextEndFunction第二十页,讲稿共七十七页哦2、实战练习、实战练习1)补充代码(2002春二(7)下列程序的功能是:查找四位正整数中的超级素数。超级素数的定义为:当一个素数从低位到高位依次去掉一位数后剩下的数仍然是素数,则此数为超级素数。如数2333、233、23、2均为素数,所以2333为超级素数。
14、OptionExplicitPrivateSubCommand1_Click()DimIAsInteger,flgAsBooleanForI=1001To9999Step2Callsup_prime(I,flg)IfflgThenPrintIEndIfNextIEndSub第二十一页,讲稿共七十七页哦PrivateSubsup_prime((1),FAsBoolean)DimpAsIntegerF=TrueDoWhileN0Ifprime(N)Then(2)Else(3)ExitSubEndIfLoopEndSubPublicFunctionprime(pAsInteger)AsBoolean
15、DimkAsIntegerIfp=1ThenExitFunctionElseFork=2ToSqr(p)IfpModk=0ThenExitFunctionNextk(4)EndIfEndFunction第二十二页,讲稿共七十七页哦2)编程题(2004春上机试卷03)随机生成15个两位正整数,从中找出所有的素数,并记下它是第几个数,再找出其中最大的素数,并给出它的位置。第二十三页,讲稿共七十七页哦VB常用算法(四)进制转化常用算法(四)进制转化算法说明算法说明1)十进制正整数m转换为R(216)进制的字符串。思路:将m不断除r取余数,直到商为0,将余数反序即得到结果。算法实现:PrivateFu
16、nctionTran(ByValmAsInteger,ByValrAsInteger)AsStringDimStrDtoRAsString,nAsIntegerDoWhilemon=mModrm=mrIfn9ThenStrDtoR=Chr(65+n-10)&StrDtoRElseStrDtoR=n&StrDtoREndIfLoopTran=StrDtoREndFunction第二十四页,讲稿共七十七页哦2)R(216)进制字符串转换为十进制正整数。思路:R进制数每位数字乘以权值之和即为十进制数。算法实现:PrivateFunctionTran(ByValsAsString,ByValrAsIn
17、teger)AsintegerDimnAsInteger,decAsIntegers=UCase(Trim(s)Fori%=1ToLen(s)IfMid(s,i,1)=AThenn=Asc(Mid(s,i,1)-Asc(A)+10Elsen=Val(Mid(s,i,1)EndIfdec=dec+n*r(Len(s)-i)NextiTran=decEndFunction解题技巧解题技巧进制转化的原理要清楚,同时编写代码时候要留意16进制中的AF字符的处理。第二十五页,讲稿共七十七页哦2、实战练习、实战练习1)补充代码(2002秋二(9)本程序是把给定的二进制整数转换为八进制整数。PrivateS
18、ubCommand1_Click()DimaAsString,bAsString,cAsStringDimLAsInteger,mAsInteger,nAsIntegera=InputBox(请输入一个二进制数,输入框)(1)a=String(L,0)&a(2)Form=1Ton/3b=Mid(a,3*m-2,3)(3)NextmText1.Text=cEndSub第二十六页,讲稿共七十七页哦PrivateFunctionzh(sAsString)AsStringDimiAsInteger,nAsInteger,pAsIntegerp=1Fori=2To0Step-1(4)p=p+1Nexti
19、zh=Str(n)EndFunction第二十七页,讲稿共七十七页哦2)补充代码(2001春二(7)下面程序是把给定的16进制正整数转换为10进制数。OptionExplicitPrivateSubForm_Click()DimStAsInteger,DemAsLongSt=InputBox(输入一个十六进制数)Dem=Convert(St)PrintSt;=;DemEndSubPrivateFunctionConvert(SAsString)AsLongDimNAsInteger,IAsInteger,SubstringAsString*1DimPAslong,KAsLong,Asc1AsI
20、ntegerN=(1)P=16NForI=1ToNP=P/16Substring=(2)SelectCaseSubstringCase0To9K=K+P*Val(Substring)Case(3)Asc1=Asc(Substring)-Asc(A)+10(4)EndSelectNextI(5)EndFunction第二十八页,讲稿共七十七页哦VB常用算法(五)约数因子算法说明算法说明1)最大公约数:最大公约数:用辗转相除法求两自然数用辗转相除法求两自然数m、n的最大公约数。的最大公约数。(1)首先,对于已知两数首先,对于已知两数m、n,比较并使得,比较并使得mn;(2)m除以除以n得余数得余数
21、r;(3)若若r0,则,则n为求得的最大公约数,算法结束;为求得的最大公约数,算法结束;否则执行步骤(否则执行步骤(4)(4)mnnr再重复执行(再重复执行(2)第二十九页,讲稿共七十七页哦算法实现算法实现循环实现循环实现PrivateFunctionGCD(ByValmAsLong,ByValnAsLong)AsLongDimtempAsLongIfmnThentemp=m:m=n:n=tempDimrAsLongDor=mModnIfr=0ThenExitDom=nn=rLoopGCD=nEndFunction第三十页,讲稿共七十七页哦递归实现递归实现PrivateFunctionGCD(
22、ByValmAsLong,ByValnAsLong)AsLongDimtempAsLongIfmnThentemp=m:m=n:n=tempDimrAsLongr=mModnIfr=0ThenGCD=nElsem=nn=rGCD=GCD(m,n)EndIfEndFunction第三十一页,讲稿共七十七页哦2)最小公倍数最小公倍数mn最大公约数最大公约数3)互质数互质数最大公约数为最大公约数为1的两个正整数的两个正整数解题技巧解题技巧该算法需要识记!该算法需要识记!这种类型题目的扩展是约数和因子题型。这种类型题目的扩展是约数和因子题型。第三十二页,讲稿共七十七页哦2、实战练习、实战练习1)补充代
23、码(补充代码(2003春二(春二(9)给定一个十进制正整数,找出小于它并与其互质的所有正整数(所谓互质数是给定一个十进制正整数,找出小于它并与其互质的所有正整数(所谓互质数是指最大公约数为指最大公约数为1的两个正整数,下图是程序执行画面)。的两个正整数,下图是程序执行画面)。第三十三页,讲稿共七十七页哦OptionExplicitPrivateFunctiongcd(1)AsIntegerDimrAsIntegerr=mModnIfr=0Thengcd=nElsem=n:n=r(2)EndIfEndFunctionPrivateSubCommand1_Click()DimnAsInteger,
24、pAsIntegern=Val(Text1)Forp=n-1To2Step-1If(3)ThenList1.AddItempNextpEndSub第三十四页,讲稿共七十七页哦2)编程题(编程题(2002秋上机试卷秋上机试卷01)生成一个三行八列的二维数组生成一个三行八列的二维数组A(3,8),其中前两行元素产,其中前两行元素产生的方法是:生的方法是:用初值用初值X1=26及公式及公式Xi+1=(25Xi+357)Mod 1024,产生,产生一个数列:一个数列:X1、X2、.、X16。其中其中X1X8作为作为A的第一行元素;的第一行元素;X9X16作为作为A的第二行的第二行元素;元素;A的第三行
25、元素值取前两行同列元素的最大公约数。最的第三行元素值取前两行同列元素的最大公约数。最后按图示格式显示在图片框中。后按图示格式显示在图片框中。第三十五页,讲稿共七十七页哦VB常用算法(六)排序常用算法(六)排序1、算法说明、算法说明1)选择法排序(1)从n个数中选出最小数的下标,出了循环,将最小数与第一个数交换位置;(2)除第一个数外,在剩下的n-1个数中再按方法(1)选出次小的数,与第二个数交换位置;(3)以此类推,最后构成递增序列。第三十六页,讲稿共七十七页哦程序代码如下:PrivateSubxzPaiXu(a()AsDouble,shengAsBoolean)a为需要排序的数组,sheng
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常用 算法 介绍 讲稿
限制150内