writeln('a+5=',a+5:6:2,'; b+10=',b+10:6:2,'; alfa+15=',alfa+15:6:2); writeln('c=',c:8:2,'s=',s:8:2); END.
形式参数表中可以包括值参数和变量参数等。当无参数时,形式参数表和括号应该略去。过程体描述了过程执行的数据处理。当需要时,可以在过程中加说明,如常量说明、变量说明,以及其它函数与过程说明等。
过程语句(即调用过程的语句)的一般形式是: <过程名>(<实在参数表>)
实在参数表由用逗号分开的一些参数组成,且:
1、实在参数必须与过程说明中的形式参数个数相同,且次序一一对应。
2、与值参数对应的实在参数可以是表达式,与变量参数对应的实在参数只能是变量。 3、实在参数必须与变量参数类型同一,与值参数类型赋值相容。
小结:值参数和变量参数的区别 值参数 不能加VAR 对应的实在参数可以是表达式 对应的实在参数不会随形式参数的改变而改变 对应的实在参数类型要与值参数相容
对应的实在参数随形式参数的改变而改变 对应的实在参数类型要与变量参数一致 变量参数 需要用保留字VAR指明 对应的实在参数只能是变量 46
将例T85_001用过程的方法编写 输入x值,计算y。已知
y?已知计算双曲正弦的公式如下:
sh(1?sh(x))
sh(2x)?sh(3x)et?e?tsh(t)?
2
47
第12课 函数和过程
Pascal允许用户在程序中自己说明定义所需要的函数并在程序中调用这些函数。 [例4.1]编程找出由键盘任意输入五个整数中的最大整数。
解:设输入的五个整数为n1、n2、n3、n4、n5,为了便于处理,引入一个中间变量t1,按如下步骤处理:
①令t1=n1;
②将t1与n2比较,将两者中较大的数放入t1; ③将t1与n3比较,将两者中较大的数放入t1; ④将t1与n4比较,将两者中较大的数放入t1; ⑤将t1与n5比较,将两者中较大的数放入t1; ⑥经过以上5步处理后,t1即为5个数中最大者。
从上面规划的步骤看来,从步骤②到步骤⑤需处理的目标是相同的,因此我们可以设计一段子程序Max(x1,x2),以找出x1和x2中最大的值并返回。
Pascal程序: Program Exam41_a;
Var n1,n2,n3,n4,n5,t1 : integer;
Function max(x1,x2 : integer) : integer; Begin
If x1>x2 then Max := x1 Else Max := x2; 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.
从上例看出,引入函数实际上是将一个复杂的问题划分成若干个易于处理的子问题,将编程化简的一种有效办法,而化简的方法是多种多样的,如前面已经做过求三个数中的最大数,所以可定义一个专门求
48
三个数中最大数的函数(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。 Program Exam41_b;
Var n1,n2,n3,n4,n5,t1: integer;
function Max(x1,x2,x3: integer): integer; {自定义函数Max} Var XX: integer; {函数内部变量说明} begin {函数体} if X1>X2 then XX:=X1 else XX:=X2;
if X3>XX then XX:=X3; Max:=XX end;
Begin {主程序} Write('Input 5 numb:');
Readln(n1,n2,n3,n4,n5); {输入五个数} t1:=Max(n1,n2,n3); {用函数求n1, n2, n3的最大数} t1:=Max(n4,n5,t1); {用函数求n4, n5, t1 的最大数} Writeln('Max Number :', t1); Readln End.
49
主程序中两次调用自定义函数。自定义函数的一般格式为:
function 函数名(形式参数表): 类型; {函数首部} 局部变量说明部分; begin
语句系列; {函数体 } end;
函数中的形式参数接受调用函数时所传入的值,用来参与函数中的运算。 [例4.2]求任意输入的五个自然数的最大公约数。
解:⑴自定义一个专门求两自然数的最大公约数的函数GCD;
⑵调用自定义函数,第一次求前两个数的最大公约数;从第二次开始,用每次求得的最大公约数与下一个数再求两个数最大公约数,直到最后。本题共四次“求两个数的最大公约数”, 设输入的五个自然数分别是a1,a2,a3,a4,a5,采用如下步骤:
①求a1, a2两个数的最大公约数 → 存入a1; ②求a1, a3两个数的最大公约数 → 存入a1; ③求a1, a4两个数的最大公约数 → 存入a1; ④求a1, a5两个数的最大公约数 → 存入a1; ⑤ 输出 a1,此时的a1已是五个数的最大公约数。 Pascal程序:。 Program Exam42;
Var a1,a2,a3,a4,a5: integder;
function GCD(x,y: integer): integer; {自定义函数 } Var n:integer; begin
While x mod y <>0 do begin
50