《freepascal高级培训摘要》由会员分享,可在线阅读,更多相关《freepascal高级培训摘要(27页珍藏版)》请在金锄头文库上搜索。
1、函数与过程,作用:每一个函数或过程都可以看做是主 程序的一个子程序。能将复杂的问题分解成更小更简单的问题。 区别: 函数名能返回数值。 如 sqr(9)=81; copy(abc,1,2)=ab过程名不能返回数值。 如 inc(x) : x:=x+1;insert(s1,s,n): 改变字符串s。delete(s,n,m); 改变字符串s。,定义新函数:function,格式:function 函数名(形式参数):函数类型var变量说明部分begin,例:输入两个数,求出其中较小的数。 Function xiao(x,y:integer):integer; begin if xy then x
2、iao:=y else xiao:=x; end;,定义新函数:function,格式:function 函数名(形式参数):函数类型var变量说明部分begin,例:判断某个自然数是不是质数。 Function zhishu(n: integer): boolean; Var i,x:integer; begin For i:=1 to n do if n mod i =0 then inc(x); If x=2 then zhishu; end;,函数的调用,格式:函数名(实在参数表),例:输入三个数,求出其中最小的数。 Function xiao(x,y:integer):integer
3、; begin if xy then xiao:=y else xiao:=x; end; Begin Var a,b,c,t:integer; Begin readln(a,b,c); t:=Xiao(a,b); t:=xiao (t,c); Writeln(t); End.,函数的调用,格式:函数名(实在参数表),例:输入自然数k,输出小于k的所有的质数。,Var k,i:integer; begin readln(k); For i:=2 to k do If zhishu(i) then write(i, ); end.,Function zhishu(n: integer): boo
4、lean; Var i,x:integer; begin For i:=1 to n do if n mod i =0 then inc(x); If x=2 then zhishu; end;,求p=(a+b)!/(a!+b!),Var a,b:integer; p:real Function js(n:integer):real Var i,t:integer; begin t:=1; for i:=1 to n do t:=t*i; js:=t; end; begin readln(a,b); p:=js(a+b)/(js(a)+js(b); Writeln(p); End.,3 4,自
5、 定 义 过 程,格式: procedure 过程名(形式参数表);Var 变量说明部分begin过程体end;,定义过程fa,求n! Procedure fa(n:integer; var p:real);Var i:integer; Begin P:=1; For i:=1 to n do p:=p*i; End;,值形参,变量形参,值形参只能把值传入函数或过程。,变量形参既能把值传入过程,又能把值传出过程。,自 定 义 过 程,格式: procedure 过程名(形式参数表);Var 变量说明部分begin过程体end;,定义过程jiaohuan,交换两个变量的值。 Procedure
6、jiaohuan( var a,b:integer);Var t:integer; Begin t:=a; a:=b; b:=t; End;,变量形参,自 定 义 过 程,格式: procedure 过程名(形式参数表);Var 变量说明部分begin过程体end;,定义过程prin,打印表头 Procedure prin; Var i:integer; Begin For i:=1 to 10 do write(+); Writeln(print); For i:=1 to 10 do write(+); End;,无形式参数,+ Print +,过程的调用 过程名(实在参数表),Proce
7、dure fa(n:integer;var p:integer); Var i:integer; Begin P:=1; For i:=1 to n do p:=p*i; End;,Var x,s:integer; Begin fa(3,x); S:=s+x; fa(4,x); S:=s+x; Writeln(s); End.,X:=1*1*2*3=6,X:=1*1*2*3*4=24,过程的调用 过程名(实在参数表),Procedure fa(n:integer;var p:integer); Var i:integer; Begin P:=1; For i:=1 to n do p:=p*i
8、; End;,Var x,s:integer; Begin fa(3,x); S:=s+x; fa(4,x); S:=s+x; Writeln(s); End.,X:=1;,X:=1*1*2*3=6,X:=6*1*2*3*4=144,Procedure jh( var a,b:char); Var t:char; Begin t:=a; a:=b; b:=t; End; Var n:char; i,j:integer;x:array 15 of char; Begin For i:=1 to 5 do read(xi); For i:=1 to 4 do For j:= i+1 to 5 do
9、 if xixj then jh(xi,xj) ; For i:=1 to 5 do write(xi:5); End.,Qvstj,Q j s t v,局部变量和全程变量,局部变量:在定义过程或函数中说明的变量。function 函数名(形式参数):函数类型var变量说明部分beginprocedure 过程名(形式参数);Var 变量说明部分begin作用范围:所在的过程或函数中,局部变量和全程变量,Procedure jh( var a,b:char); Var t:char; Begin t:=a; a:=b; b:=t; End; Var n:char; i,j:integer;x:
10、array 15 of char; Begin For i:=1 to 5 do read(xi); For i:=1 to 4 do For j:= i+1 to 5 do if xixj then jh; For i:=1 to 5 do write(xi:5); End.,t,全程变量:在主程序中说明的变量,n,i,j,x,全程变量的作用范围,1、全程变量在过程中改变值时,新的值回到主程序后有效。,Var m:integer; Procedure test1; Begin m:=100; end; Begin m:=5; writeln(m); test1; Writeln(m); En
11、d.,5,100,全程变量的作用范围,2、全程变量和局部变量同名时,全程变量只在主程序起作用。,Var m:integer; Procedure test1; Var m:integer; Begin m:=100; end; Begin m:=5; writeln(m); test1; Writeln(m); End.,5,5,Var i,t,s:integer; Procedure fa (n:integer); Var K:integer; Begin t:=1; For k:=2 to n do t:=t*k; End; Begin For i:=3 to 5 do begin fa(
12、i); s:=s+t; end; End.,全程变量可以进入过程或函数中,如t。,t=1*2*3; S=0+6;,t=1*2*3*4; S=6+24;,t=1*2*3*4*5; S=30+120;,Var a,b,c:integer;,Procedure pro Var c:integer; Begin a:=1; b:=2; c:=3; End; Begin a:=100; b:=200; c:=300; Pro; Writeln(a:5;b:5:c:5); End.,a,b是全程变量,作用范围:主程序和子程序(过程)。,C也是全程变量,但由于C与过程中的变量同名,所以,C不参与(子程序)过
13、程的运算。,1 2 300,过程嵌套,Procedure sub;procedure tu1;Begin writeln(+) ; end;procedure tu2;Begin writeln(-); end;BeginTu1;Writeln(welcom);Tu2;End;Begin Sub;end.,+ Welcom -,函数嵌套,Function di (r:real):real; Begin di:=2*3.14*r*r; End; Function cei(r,h:real):real; Begin Cei:=3.14*2*r*h; End; Function biao(r,h:r
14、eal):real; Begin biao:=di(r)+cei(r,h); End; Begin Writeln(biao(2,3); End.,设有一函数定义如下,Funtion high(x,y:integer):integer; Begin High:=(x+y) div (x-y); End; 执行语句 t:=high(4,high(6,high(4,1)后,变量t的值是 _,1,Var x:integer; Function f1(m:integer):integer; Function f2(n:integer):integer;Begin f2:=n+1; end; Begin
15、 f1:=m *f2(m); end;Begin X:=5; X:=f1(x)+x; Write(x=,x); End.,Var x:integer; Procedure pp(m:integer); Var i,j:integer; Function f(n:integer):integer; Begin f:=f+1; end; Begin For i:=m downto 1 Beginfor j:=1 to f(i) do write(*); Writeln; End; End; Begin X:=6; pp(x); End.,递归,概念:函数或过程调用它本身,称为递归。,用递归法计算n!分析: 1 n=1n!=n(n-1)! n0,假设n=4; 4!= 4*3!=4*3*2!=4*3*2*1!,2,6,24,已知1!=1;,1,function js(n:integer):longint; Begin If n=1 then js:=1 else js:=n*js(n-1); End;,用递归法写函数 n!= n*(n-1)!=n*(n-1)*(n-2)*. 1!,1,Program lianxi01; Var n:integer; y:longint;begin readln(n); y:=js(n); Writeln(y); end.,