一、过程与函数主要部分
1、过程与函数的声明。
2、过程与函数的参数。
3、过程和函数的调用。
4、带有默认值参数的例程
5、例程的重载
6、例程的递归调用。
二、过程与函数的详细调用
1、过程与函数的声明
procedure 过程名();指示字;
局部声明
begin
end;
析释:过程名括号内的是形式参数列表也称为形参,形参可有可没有;指示字不是必须加的(指示字如方法允不允许重载的overload);局部声明也是可有可无的;
举例如下:
生成一个菱形
①我们声明一个过程具体形式。
②我们声明一个过程内的主题(图例中是生成一个菱形)。
③我们调用已经声明的过程。
2、函数是与过程唯一不同的是函数必须指定一个返回值。
function 函数名():类型标识符(返回类型);指示字;
局部变量声明
begin
函数体语句
end;
析释:函数名括号内的是形式参数列表也称为形参,形参可有可没有;指示字不是必须加的(如方法允不允许重载);局部声明也是可有可无的;
在返回值的时候有两种语句进行表示:
1)通过对函数名进行赋值实现函数值的传递(函数名:= ‘要被返回的值’)
2)通过Result这个变量,但能否用还受编译器的命令字控制(必须有{$+}才能用) //当Result出现在赋值的右边是当前函数的递归调用。
第一种情况举例如下:
factorial:=f 就是用函数名的方式把把返回值传回去
第二种情况举例如下:
用result的方式把返回值传回去。
3、实参与形参的区别,如图所示
如图所示我们声明的时候声明的参数是形参。我们调用的时候我们使用的参数叫实参,实参可以是变量、可以是常量,也可以是调用函数的结果值。
4、形式参数传递的方式,分为4种不同的接收类型
值类型:上图中参数都是该类型
变量参数:参数的前面加一个var,按照地址进行传递(传的是地址),一旦对例程中对变量赋值改变了,实参调用发现数据会改变。如图所示
常量参数:在定义的时候加一个保留字const,在过程体中不允许改变。
外部参数(输出参数):参数前加一个out,表示输出,一旦设置了这个输出,在方法体中一定要对变量赋值。赋值了外面调用才能接受数据。
5、带有默认值参数的方法(在定义函数和过程中,声明参数后面带一个=,这就是赋值)
6、例程或方法的重载,方法名称相同,参数类型或参数个数不同才能重载,如果都相同不能重载。如图:
图中有两个调用,分别是整数和小数,调用中会根据参数的类型来确定调用哪个方法。
7、递归方法是简单,但效率不高,做一些复杂的算法容易些。如图所示做一个阶乘的例子
为了不能无限次的调用自己,设置一个禁止调用自己的条件。
8、做一个费布拉切数列,也称黄金分割数列(后一个数是前两个数相加:1 ,1 ,2,3,5,6,13,21.........)我们要找数列中的一个位置的数是多少,用递归方法。代码如下:
function fibonacci(n:integer):int64;
begin
case n of
1,2:result:=1;
else
result:=fibonacci(n-1)+fibonacci(n-2);
end;
end;
begin
writeln(fibonacci(9)) ;
readln;
end.
附一:图一生成一个菱形代码如下:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure diamond(n:integer;c:char);
var
i,j:integer;
begin
for i:=1 to n do begin
write(' ':n-i+1);
for j:=1 to i*2-1 do
write(c:1);
WriteLn;
end;
for i:=n-1 downto 1 do begin
write (' ':n-i+1);
for j:=i*2-1 downto 1 do
write(c:1);
writeln;
end;
end;
begin
diamond(4,'*');
readln;
end;