Pascal子程序之函数
pascal-函数和过程

procedure show(Var a:integer); 形式参数 A 是___ 对应的实参必须是变量 变参与实参的关系是传地址 变参可作输入参数,有出口值表示过
程的返回值
例:下列程序的运行结果如何: program ex;
var i,j:integer;
procedure sample(x:integer;var y:integer); begin x:=x+2;y:=y+2; end;
程序 3: Program ex5-8; Var
Total,tatal:lonint; K:integer; Procedure njc(n:longint; var s:longint); Var i:integer; Begin S:=1; For i:=1 to n do S:=s*I; End; {===main===} Begin Total:=0; For k:=2 to 5 do
End; Begin
Write(‘Input 5 numbers : ‘); Readln(n1,n2,n3,n4,n5); T1 := n1; T1 := Max(t1,n2); T1 := Max(t1,n3); T1 := Max(t1,n4); T1 := Max(t1,n5); Writeln(‘Max number : ‘,t1); End. 输入数据:21 45 9 35 7 输出结果为: 2、程序 2 二、program ex7_4;
2.自定义过程:由程序员在程序中定义后再使用。给某个语句序列组成的子程序赋于 一个适当的名字。程序中凡是需要出现这个语句序列的地方,可以简单的写上子程序 的名字。这种完成一个操作的子程序称为过程;子程序的定义称为过程说明。过程说 明由过程首部和过程体组成,其形式如下:
PASCAL中常用的函数和过程

随机数在信息学奥林匹克中可用于随机化搜索、穷举等算法,以优化其性能, 也可用于在快速排序中选择关键数,以使其快速排序算法的最坏情况没有固定的 相应数列。
另外,System 单元中随机种子变量的标识符为 RandSeed,你也可以手动修 改它。如果你希望使用了随机数的程序对同一个输入数据能有恒定的输出结果, 可以设置 RandSeed 为一个定值。
附: 如何获取随机数?
随机数是指理论上没有规律可循、在指定范围内每个数的出现几率相等、无 法根据之前的数来预测下一个数的数列。一般随机数生成器的基本原理是:首先 初始化一个随机种子,其初始值可以是任意的整数;在每次获取随机数时,以随 机种子为基础进行某种特殊的运算,获得一个随机数并返回之,然后再对随机种 子进行某种运算,改变随机种子的值。这样,就可以生成许多比较随机的数,但 同一个初始值的随机种子将会生成完全相同的随机数列。
Writeln(-1.5, 'rounds to ', Round(-1.5));{ -2 } end.
5、取小数函数 frac(x) 定义:function Frac(X: Real): Real; 注意:X 是实型表达式. 结果返回 X 的小数部分; 也就是说, Frac(X) = X - Int(_X). 例子: var R: Real; begin R := Frac(123.456); { 0.456 } R := Frac(-123.456); { -0.456 } end.
Pascal语言子程序中参数的使用

Pascal语言子程序中参数的使用第2卷第l期2000年2月辽宁高职LIAONINGHIGHERVOCA TIONAL TECHNICALINSTITUTEJOUR NALV ol2.NO.1Feb2000Pascal语言子程序中参数的使用张学军,李密(辽宁电子计算机学校.早新高专汁算机教研室,辽宁阜新:123000)摘要本文主要讨论Pascal语言子程序中值参数,变量参数的拟定和赋值,这对更深刻的理解子程序的调用是非常必要的.关键词值参数:变量参数:实在参数:Pascal语言中图分类号TP3r”PA弓言在子程序调用过程中入何理解对值参数,变量参数的拟定,赋值是非常重要的,我们知道值参数和变量参数是子程序与被调用程序之间传递数据的机构,调用程序与子程序间是靠参数传递信息的.例1PROGRAMXCJ1(INPUT,OUTPUT):BEGINN:=4V ARN:INTEGER:V:=3:Y,Z:REAL:Z:=0PROCEDURESUB1(M:INI,EGER:V ARS,Z:REAL):SUB1(N,V,Z): BEGINV::2木Y:WRITELN(N:3,V:5:l,Z:5:1)S:=S木Y:END.z:=S/N输出结果为:436.09.0END:在过程SUB1的形式参数表自定义了三个参数,其中不带保留字V AR的M:INTEGER指明了M是值参数,带V AR的V ARS,z:REAL指明了S,z是变量参数.参数的赋值是这样的:过程体执行前:主程序:N囤Y=地址1圉z=ttgtJk2囵3l;子程序:卅4fs=地址1z=地址2M是值参数,所以得到了实在参数N的值.S,z是变量参数.所以S,z分别得到了Y与z的地址,实现了Y与S和z的单元共享.过程体执行后:子程序:s=地址1z:地址2主程序:N囤圆S=地址1Z:地址2子程序:州4l从这个例子中我们可以清楚看到:M与s和z的赋值过程是有明显区别的那么我在子程序的调用过程中如何对值参数,变量参数进行拟定和赋值呢?收稿日期:1999—04-274辽宁高职第2卷1.参数的拟定在程序设计过程中.过程和函数中的形式参数选用值参数还是变量参数要视具体情况丽定.对子函数一般是希望出一个或多个自变量,通过函数的计算得到一个函数值.不希望在函数调用之后改变自变量的值,所以函数的形式参数只用值参数,对于过程经常希望通过实在参数与形式参数的结合传回数据,所以需要传回数据的那些参数必须用变量参数,而希望在过程运行时,其值不受影响的实在参数只能用值参数与之相应.例2任给三角形的三条边,求其面积.PROGRAMzxj2(INPUT,OUTPUT):V ARAREA,X,Y,Z:REAL:FOUNCTIONSUB2(A,B,C:REAL):REAL:V ARP:REAL:BEGINP:=(A+B+C)/2:SUB2:=SQRT(P木(P-A)木(P-B)木(P_C))END:BEGINREAD(X,Y,Z)AREA:=SUB2(X,Y,Z)WRUTEKB(AREA:6:2)END.结果为:4579.80在此函数的调用过程中,我们只希望通过给三个边长,通过函数的计算得到一个函数值(面积)因此形式参数理所当然是值参数.例3用子程序交换两个上整形变量x和Y的内容PROGRAMxcj3(INPUT.OUTPUT):BEGINX:=10:V ARX,Y:INTEGER:Y:99:PROVEDURESUB3(V ARA,B:INTEGER):WRIrELN(BEFORECALL INGSWAP:V ART:INTEGER:’,’X=,X:3,’Y=,Y:3):BEGINT:=A:SUB3(X,Y)A:=B:WRITELN(‘.AFTERCALLNGSWAP:’.’X,X:3,’Y,Y:3):B:=TENDEND:执行结果为:BFFORECALLINGSWAP:X=10Y=99 AFTERCALLINGSWAP:X=99Y=10在此过程的调用中需要x,Y与A,B的结果传回结果,所以过程的形式参数是变量参数.2.参数的赋值在子程序的调用过程中,实在参数与形式参数之间存在个数,位置,数据类型的一一对应的关系.调用子程序时将实在参数的值赋给对应的值参数,值参数只具有将实参数的值带入过程体内的作用.无论其参加何种计算,并不影响与之相配的调用程序中的实在参数值.其物理过程是:在子程序被调用时,系统为每个值参数开辟了与其类型相适应的临时存储单元,然后实在参数值赋给对应的值参数,这称为值的传送由于同一位置的实在参数与值参数是不同的存储单元.因此值参数在子程序执行过程中的改变并不影响实在参数的值,一旦子程序执行完毕.系统将收回临时存储单元,值参数的值则不存在了.以例2说明:函数体执行前:主程序:x曰Y国z团AREA~:;;子程序:蛔困P口一◆第1期张学军,李密:Pasca1语言子程序中参数的使用8)函数体执行后:主程序:x同Y因zAREA网子程序:蝈朝阳咽函数执行完毕,临时分配的A,B,c三个存储元被系统收回,值参数的值也就不存在了.若调用子程序时,对于变量参数是用实在参数的名去替换过程中出现的变量参数,实在参数的值由变量参数带入子程序体内,在子程序中经运算处理,变量参数被赋以新值,返回调用程序也使实在参数得到该新值,因此变量参数具有将实在参数传入子程序和将子程序内变量参数的值返回给调用程序实在参数的作用.其物理过程是:系统并不为变量参数另外开辟存储单元,而是将实在参数的地址传递给对应的变量参数,使变量参数具有实在参数的地址,实现其单元共享,这称为地址传送.因此.对变量参数的每一个操作都是通过它所保留的地址直接对实在参数的操作,从而达到了调用程序和被调用子程序之间互相传送数据的目的.当过程执行完毕时,变量参数也随之消失,变量参数的值已保留在与其对应的实在参数中.以例3说明在过程体执行前过程体执行完毕:主程序:x=地址3I10fY=地址4J99lx=地址3B=地址4I{主程序:9ll1ol子程序:A=地址3Y=地址4YIlA:地址3B=地址4过程:1110j至此我们可以看出,在子程序调用过程中如何正确理解拟定形式参数及它们的赋值过程,对深刻理解程序的调用过程确有深刻的意义.参考文献【l】谭浩强,田淑清.paSCa1语言程序设计.北京:高等教育出版社,1988 【2】陆悯.PaSCa1语言程序设计.北京:航空工业出版社,1995【3】郑启华.PaSCa1程序设计.北京:清华大学出版社,1991【4】PeterGrdgono着,蒋国南译.北京:清华大学出版社,1981 TOUseTheParmneterInSubprogramOfPascalLanguageZhangXue-jun,LiMi(TheComputerSection.FuxinHigherProfessionalCollege.Liaoning:1230 00)Abstract:IUthepapertheauthordiscusseschieflyvalueparanleterandvariabl eparauleterwhichisveD- essentialtounderstandprofoundlythetransferofsubprogram. Keywords:V alueParalneter:VariableParalneter;RealParalneter;PascalLa nguage.【责任编辑,阜新高专:董艳双)。
pascal常用函数

Pascal常用函数PASCAL内自带的函数,通常可以直接调用,特殊的需要调用数据库,如:used math一、标准函数二、数学函数与过程三、字符类型函数四、字符串函数与过程五、布尔类型函数六、math单元的函数与过程一、标准函数标准函数。
Turbo Pascal语言提供了自变量为整型量的标准函数有顺序函数算术函数和转换函数等。
标准函数是Turbo Pascal语言预先定义的,它们实际上是能完成特定功能的称步子程序的程序段。
每个标准函数都用一个标识符来标识,每个标准函数都能完成一个特定的功能,在程序中可以直接调用它们。
Turbo Pascal语言中某些标准函数与数学中的函数有相似之处。
1、整数类型函数整型是顺序类型,即所有的整型数都是按一定的顺序排列的。
如3的后序数是4,350的后序数是351。
以后介绍的布尔型、字符型、枚举类型和子界类型等都是顺序类型。
顺序函数可以对顺序类型数据进行操作,但要注意它们自变量的取值范围。
①前趋函数:Pred(x)函数值为x-l,例如:Pred (6)=5 Pred (-21)=-22②后继函数:Succ (x)函数值为x+l,例如:Succ (l5)=16 Succ (-114)= -113③绝对值函数:Abs (x)函数值为|X|,例如:Abs (-119)=119 Abs (101)=101④平方函数:Sqr (x)函数值为X*X,例如:Sqr (-5)=25 Sqr (l0)= 100以上四个函数的结果仍是整型数。
⑤奇函数:Odd (x),函数的结果为布尔型。
当X为奇数时,函数值为true;当X为偶数时,函数值为false,例如:Odd (13)= True Odd (16)= False⑥字符函数:Chr (X),函数值是序号的ASCII字符,属字符型,例如:Chr (65)=‟A‟ Chr (66)=‟B‟2、实数类型函数在下列算术函数中,X可以是实型或整型数的表达式。
PASCAL-函数教程+练习.ppt

a1:=GCD(a1,a4);
a1:=GCD(a1,a5);
Writeln(a1);
readln
End.
函数小结
函数的结果是一个具体的值, 在函数体中必须将所得到的 运算结果赋给函数名;主程序通过调用函数得到函数的运算结 果。调用函数的一般格式为:
函数名 (实在参数表) 调用函数时, 函数名后面圆括号内的参数必须有确定的 值, 称为实在参数。调用时即把这些实际值传送给函数形参表 中的相应形参变量。函数不是单独的语句, 只能作为运算赋值 或出现在表达式中。
Pascal程序设计基础
第四章 过程与函数
子程序是什么
在程序设计中,我们会发现一些程序 段在程序的不同地方反复出现,此时 可以将这些程序段作为相对独立的整 体,用一个标识符给他起一个名字, 凡是程序中出现该程序段的地方,只 要简单地写上其标识符即可。这样的 程序段,我们称之为子程序。 Pascal中的子程序有两种形式:函数 和过程。
Readln(n1,n2,n3,n4,n5); T1 := n1; T1 := Max(t1,n2); T1 := Max(t1,n3); T1 := Max(t1,n4); T1 := Max(t1,n5); Writeln(‘Max number : ‘,t1); End.
从上例看出,引入函数实际上是将一个复杂的 问题划分成若干个易于处理的子问题,将编程化简 的一种有效办法,而化简的方法是多种多样的,如 前面已经做过求三个数中的最大数,所以可定义一 个专门求三个数中最大数的函数(Max)。第一次用 这个函数求出n1,n2,n3三个数中的最大数t1;第二次 调用这个函数求出t1与n4,n5三个数中的最大数,也 就是前三个数的最大数(已在t1中)和后面二个数再求 一次,就得到五个数的最大数。因此,需要两次使 用“求三个数中的最大数”,步骤如下: ①调用函数Max ( n1, n2, n3), 求出n1,n2,n3中 的最大者 t1; ②调用函数Max ( t1, n4, n5 ),求出t1, n4, n5中的 最大者t2; ③输出最大数 t2。
Pascal讲授课件5——1

参数传递——值形参
Free Pascal语言中,主程序在调用过程或函数时, 主程序中调用语句的实在参数要与过程或函数说明中 的形式参数进行“实形结合”,我们把这种结合叫做 参数传递。 (1)值形参 值形参是指在形式参数表中前面没有保留字var,后面有 类型说明的这一类参数。 传值就是把实在参数的值“赋给”对应的形式参数,而实 在参数本身并不参与过程体的执行。应该强调的是: ①形参表中只能使用类型标识符,而不能使用类型。 ②实参和对应的值形参必须一一对应,包括个数和类型。 ③实参和值形参之间数据传递是单向的,只能由实参传送 给形参,相当赋值运算。 ④当值形参是实型变量名时,对应的实参可以是整型表达 式(即赋值相容)。 ⑤值形参作为子程序的局部量,当控制返回程序后,值形 参的存储单元释放因此值形参又称为“输入参数”或 “入口参数”。
小结
① 过程一般会被设计成求若干个运算结果,完成一系列的数 据处理,或与计算无关的各种操作;而函数往往只为了求 得一个函数值。 ② 过程无类型,不能给过程名赋值;函数有类型,最终要将 函数值传送给函数名。 ③ 调用方式不同。函数的调用出现在表达式中,而过程调用, 是由独立的过程调用语句来完成的。
④ 返回值的方法不同。函数值是通过函数名传回调用程序, 过程则是通过实参将运算的结果传给调用程序。
4、变量及其作用域
在Free Pascal语言中,所有的变量在使 用前必须先定义,在一个复杂程序中,可能包 含许多过程和函数定义,需要说明很多变量, 各个变量有不同的作用范围,我们把它称为变 量的作用域。 (1)局部变量及其作用域 在子程序内部说明的变量称为局部变量。形 式参数也只是在该子程序中有效,因此也属于 局部变量。一个变量的作用域是指在程序中能 对此变量进行存取的程序范围。因此,局部变 量的作用域就是其所在的子程序。实际上,局 部变量只是当其所在的子程序被调用时才具有 确定的存储单元,当控制从子程序返回到调用 程序后,局部变量的存储单元就被释放,从而 变得无定义。 (2)全程变量及其作用域 全程变量是指在主程序的说明部分中说明的 量。 ①当全程量和局部量不同名时,其作用域是整 个程序范围。 ②当全程量和局部量同名时,全程量的作用域 不包含局部量的作用域。
PASCAL中常用的函数和过程

随机数是指理论上没有规律可循、在指定范围内每个数的出现几率相等、无 法根据之前的数来预测下一个数的数列。一般随机数生成器的基本原理是:首先 初始化一个随机种子,其初始值可以是任意的整数;在每次获取随机数时,以随 机种子为基础进行某种特殊的运算,获得一个随机数并返回之,然后再对随机种 子进行某种运算,改变随机种子的值。这样,就可以生成许多比较随机的数,但 同一个初始值的随机种子将会生成完全相同的随机数列。
11、Upcase(ch:char) 函数:把字符转换成大写 12、random(x)函数:返回零到 X 之间的随机数。若不指定 X,结果是 0-1 之间 的随机实数。 13、inc(x)或者 inc(x,n)过程:把变量 x 加 1 或者加 n 14、dec(x)或 dec(x,n)过程:把变量 x 减 1 或者减 n 15、randomize 过程:随机数初始化 16、过程 Str(x,s):把数字 x 转换成字符串 s 17、过程 Val(s,v,code):把字符串 s 转换成数字 v,字符串 s 必须满足数的语 法,若 s 无效,其中非法字符的下标放在 code 中,否则,code 为零。
begin Writeln( Ord('a')); { 97 } Writeln(Chr(97)); { 'a' } end. 8、pred(x)和 succ(x) 函数 送回参数的前趋或后继数 9、length(s:string)函数:求字符串的长度 10、odd(x:longint)函数:判断表达式是否是奇数
2、取整函数 int(x) 定义:function Int(X: Real): Real; 注意:X 是实型数,返回值也是实型的;返回的是 X 的整数部分,也就是说,X 被截尾了(而不是四舍五入) 例子: var R: Real; begin R := Int(123.567); { 123.0 } R := Int(-123.456); { -123.0 } end.
pascal语言中的过程及函数

Pascal 过程与函数Pascal中的例程有两种形式:过程和函数。
理论上说,过程是你要求计算机执行的操作,函数是能返回值的计算。
两者突出的不同点在于:函数能返回计算结果,即有一个返回值,而过程没有。
两种类型的例程都可以带多个给定类型的参数。
不过实际上函数和过程差别不大,因为你可以调用函数完成一系列操作,跳过其返回值(用可选的出错代码或类似的东西代替返回值);也可以通过过程的参数传递计算结果(这种参数称为引用,下一部分会讲到)。
下例定义了一个过程、两个函数,两个函数的语法略有不同,结果是完全相同的。
procedure Hello;beginShowMessage ('Hello world!');end;function Double (Value: Integer) : Integer;beginDouble := Value * 2;end;10] of Integer;X, I: Integer;beginType ofvtInteger: Result :=Result + Args [I].VInteger;vtBoolean:if Args [I].VBoolean thenResult := Result + 1;vtChar:Result := Result + Ord (Args [I].VChar);vtExtended:Result := Result + Args [I].VExtended^;vtString, vtAnsiString:Result := Result + StrToIntDef ((Args [I].VString^), 0);vtWideChar:Result := Result + Ord (Args [I].VWideChar);vtCurrency:Result := Result + Args [I].VCurrency^;end;.private{ Private declarations }IP: IntProc;X: Integer;end;学完下一章,你会更清楚地了解这段代码的意思,目前只要能知道怎样添加过程类型定义、怎样修改相应的代码就行了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九讲子程序之函数程序设计基础班A班本次课程的主要内容子程序的概念函数的定义和运用;重点:熟练掌握函数在程序设计中的使用,进一步了解子程序的概念和结构化程序设计的思想。
引言在前面的学习中,我们曾经学习了程序设计中的三种基本控制结构(顺序、分支、循环)。
用它们可以组成任何程序。
但在应用中,还经常用到子程序结构。
通常,在程序设计中,我们会发现一些程序段在程序的不同地方反复出现,此时可以将这些程序段作为相对独立的整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方,只要简单地写上其标识符即可。
这样的程序段,我们称之为子程序。
子程序的运用充分体现了结构化的程序设计的两个基本要点&自顶向下,逐步求精的设计方法&程序的模块化子程序的使用不仅缩短了程序,节省了内存空间及减少了程序的编译时间,而且有利于结构化程序设计。
因为一个复杂的问题总可将其分解成若干个子问题来解决,如果子问题依然很复杂,还可以将它继续分解,直到每个子问题都是一个具有独立任务的模块。
这样编制的程序结构清晰,逻辑关系明确,无论是编写、阅读、调试还是修改,都会带来极大的好处。
在一个程序中可以只有主程序而没有子程序(本章以前都是如此),但不能没有主程序,也就是说不能单独执行子程序。
子程序的示意图Program Begin..调用子程序一....调用子程序二....End.子程序一Begin......End;子程序二Begin......每个子程序都有独立的功能我们通过参数的传递来实现,子程序也是先定义在使用函数相关概念pascal中子程序有两种形式:函数和过程。
在此之前,我们曾经介绍并使用了pascal提供的各种标准函数,如ABS,SUCC等等,我们通过参数和函数名来调用它们 比如X:=SQRT(1000);{一般来说函数都会返回一个处理过后的值)这些函数为我们编写程序提供了很大的方便。
但这些函数只是常用的基本函数,编程时经常需要自定义一些函数。
在pascal中,函数也遵循先说明后使用的规则,在程序中,函数的说明放在调用该函数的程序(主程序或其它子程序)的说明部分。
函数的结构主程序的结构很相似。
函数定义1:自定义函数的一般格式为:function 函数名(形式参数表): 类型;{函数首部}局部变量说明部分;begin语句系列; {函数体}end;{在此函数体中最终要将结果赋予函数名}说明:①函数由首部与函数体两部分组成。
②函数首部以关键字function开头。
③函数名是用户自定义的标识符。
④函数的类型也就是函数值的类型,所求得的函数值通过函数名传回调用它的程序。
可见,函数的作用一般是为了求得一个值。
⑤形式参数简称形参,形参即函数的自变量。
自变量的初值来源于函数调用。
在函数中,形参一般格式如下:变量名表1:类型标识符1;变量名表2:类型标识符2;…;变量名表n:类型标识符n可见形参表相当于变量说明,对函数自变量进行说明,但应特别注意:此处只能使用类型标识符,而不能直接使用类型。
function 函数名(形式参数表): 类型;{函数首部}局部变量说明部分;begin语句系列; {函数体}end;{在此函数体中最终要将结果赋予函数名}说明:⑥当缺省形参表(当然要同时省去一对括号)时,称为无参函数。
⑦函数体与程序体基本相似,由说明部分和执行部分组成。
⑧函数体中的说明部分用来对本函数使用的标号、常量、类型、变量、子程序加以说明,这些量只在本函数内有效。
⑨函数体的执行部分由begin开头,end结束,中间有若干用分号隔开的语句,只是end后应跟分号,不能像程序那样用句号“.”。
⑩在函数体的执行部分,至少应该给函数名赋一次值,以使在函数执行结束后把函数值带回调用程序。
(二)函数的调用我们可以在任何与函数值类型兼容的表达式中调用函数,或者说,函数调用只能出现在允许表达式出现的地方,或作为表达式的一个因子。
函数调用方式与标准函数的调用方式相同。
函数调用的一般格式:<函数名>或<函数名>(实在参数表)说明:①实在参数简称实参。
实参的个数必须与函数说明中形参的个数一致,实参的类型与形参的类型应当一一对应。
②调用函数时,一般的,实参必须有确定的值。
③函数调用的步骤为:计算实参的值,“赋给”对应的形参,然后通过函数运算最终返回一个值到主程序中;举例说明比如:我们定义了一个取两个数最大值的函数Function MAX_NUM(I,j:integer):integer;{I,J称为形参}BeginIf i>j then max_num:=Ielse max_max:=j;End;调用时只需要在主程序中写MAX_NUM(A,B);{A,B我们称为实参}将A,B运算后的值,交给形式参数I,J,然后将运算的结果代回到主函数过程中;自定义函数只是主程序的说明部分,若主程序中没有调用函数,则系统不会执行函数子程序。
当主程序调用一次函数时,则将实在参数的值传给函数的形式参数,控制转向函数子程序去执行,子程序执行完毕后自动返回调用处。
例题解析求任意输入的五个自然数的最大公约数。
解:算法分析:⑪自定义一个专门求两自然数的最大公约数的函数GCD;⑫调用自定义函数,第一次求前两个数的最大公约数;从第二次开始,用每次求得的最大公约数与下一个数再求两个数最大公约数,直到最后。
本题共四次“求两个数的最大公约数”,设输入的五个自然数分别是a1,a2,a3,a4,a5,采用如下步骤:①求a1,a2两个数的最大公约数→ 存入a1;②求a1,a3两个数的最大公约数→ 存入a1;③求a1,a4两个数的最大公约数→ 存入a1;④求a1,a5两个数的最大公约数→ 存入a1;⑤输出a1,此时的a1已是五个数的最大公约数参考程序Program Exam42;Var a1,a2,a3,a4,a5: integder;function GCD(x,y: integer): integer; {自定义函数}Var n:integer;{局部变量}beginWhile x mod y <>0 dobeginn:=x; x:=y; y:=n mod yend;GCD:=y {将运算的结果赋予函数名}end;Begin{主程序}Write('input 5 Numper:');readln(a1,a2,a3,a4,a5);{输入五个数}Write('(',a1,',',a2,',',a3,',',a4,',',a5,')=');a1:=GCD(a1,a2);{调用函数GCD,a1,a2是实参}a1:=GCD(a1,a3);a1:=GCD(a1,a4); a1:=GCD(a1,a5);Writeln(a1);readln实例分析二例2求正整数A和B之间的完全数(A<B).分析:所谓完全数是指它的小于该数本身的因子之和等于它本身,如6=1+2+3,6即是一个完全数。
因此我们可定义一个布尔型函数perfect(x),若x是完全数,其值为TURE,否则为FALSE。
整个程序算法如下:1 for i:=A to B do2 if perfect(i) then writeln(i);program ex7_1;vari,a,b : integer;function perfect(x:integer):boolean;vark,sum : integer;beginsum:=1; {累加x所有小于本身的因数}for k:=2 to x div 2 doif x mod k=0 then sum:=sum+k;{判断x是否是完全数}perfect:=x=sum; {将结果赋值给函数名}end;{end of perfect}begin{主程序开始}write('Input a,b:');readln(a,b);writeln('List of all perfect numbers:');for i:=a to b do {从a到b逐个判断,是完全数则打印出来if perfect(i) then writeln(i);end.自定义函数的缺陷自定义函数通常被设计成求一个函数值,一个函数只能得到一个运算结果。
若要设计成能得到若干个运算结果(比如交换两个数的值),或完成一系列处理,就需要自定义“过程”来实现。
思考一求输入的三个数字(0<=N<=10)的阶乘之和比如输入3 5 8,则输出3!+5!+8!的值提示:1:阶乘的运算的结果比较大,很容易超过INTEGER范围2:我们可以定义一个函数FUNCTION JIECHENG(I:INTEGER):INT64来实现阶乘的运算思考二如果一个自然数除了1和本身,还有别的数能够整除它,这样的自然数就是合数。
例如15,除了1和15,还有3和5能够整除,所以15是合数。
14,15,16是三个连续的合数,试求连续五个最小的合数。
要求定义一个函数求数字是不是合数。