函数和过程

PASCAL 给我们提供了一些标准函数,我们不用了解这些函数如何求出来的,只管直接调用它们,挺

方便的。如正弦函数,余弦函数,算术平方根......有了这些函数,我们觉得很省事。

但是对于求下面式子:

1!+2!+3!+...+10!=?

2^7+3^8+4^9=?

函数的编写:

FUNCTION 函数名(形式参数表):函数类型;

VAR 函数的变量说明;

BEGIN

函数体

END;

一个函数的编写可分成三部份:

一是函数首部,即第一个语句。它必须以FUNCTION开头,函数名是自己取的,取名的原则是便于记忆,和文件名的取名规则类似。形式参数(简称形参)表以标识符的形式给出,相当于函数中的自变量。参数可以有多个,也可以有多种类型。不同类型的参数之间用“;”隔开,同类型的参数如有多个,则用“,”隔开,在其后得加上说明。如:

FUNCTION A1(A,B,C:INTEGER;D,E,F:REAL):REAL;

在最后,函数属于哪种类型,还得表示出来。在本例中,该函数为实型。

二是函数的变量说明部分,对在本函数中将要用到的变量作类型说明,这一点和以前学的变量一样。如果程序不用变量,则此部分也可省掉。

三是函数体,本函数的功能实现就在于此,编写的语句就在里面。

编写一求阶乘的函数

FUNCTION js(n:integer):longint;

var i:integer;

s:longint;

begin

s:=1;

for i:=1 to n do

s:=s*i;

js:=s;

end;

函数的调用

PROGRAM 程序名(INPUT,OUTPUT);

VAR 主程序变量说明;

FOUNCTION 函数名(形参表):函数类型;

VAR 函数变量说明;

BEGIN

函数体

END;{FUNCTION}

BEGIN

主程序

END .{PROGRM}

在主程序中,我们把函数的全部说明放在主程序的变量说明和程序体之间,然后在主程序的执行部分就可以直接调用自定义函数了。注意:在函数的说明部分,要用形参,但在程序的执行部分调用自定义函数时,就得用实参了。

定义的阶乘函数,求5!,9!

program functionsample;

var a1,a2:longint;

function js(n:integer):longint;

var i:integer;s:longint;

begin

s:=1;

for i:=1 to n do

s:=s*i;

js:=s;

end;

begin

a1:=js(5);

a2:=js(9);

writeln(’5!=’,a1,’ ’,’9!=’,a2);

end.

在FUNCTION语句中,用的是形参N,在主程序调用中,调用函数是用的实参,如:JS(5);

在函数说明中用到的变量I,S则是局部变量,只能在函数部分使用,一旦出了函数则失去意义

函数不能单独使用,一定要结合主程序才能运行。

过程

过程和函数一样,也是子程序。一个过程对应一个需要完成的任务。PASCAL中提供了不少标准过程,如:READ,WRITE,GET,NEW,PUT......这些标准过程在程序中可以直接调用。但仅仅这些标准过程还不能满足我们的需要,我们还要自己定义过程,就象函数一样。但函数必须以值的形式返回,而过程不一定返回一个值,只是执行一个任务而已;函数只能返回一个值,而过程可以返回不止一个值。所以函数不能取代过程。

过程的定义

PROCEDURE 过程名(形式参数);

VAR 过程的变量说明;

BEGIN

过程体

END;

一个过程也分为三部分:

1:过程的首部。过程必须以PROCEDURE开头,过程名的取名规则和函数名一样,括号里面是形式参数,如形参不止一种,则中间用“;”隔开,同类形参如不止一个,则中间用“,”隔开。另:有时侯过程不用加参数。

2:过程的说明部分,用VAR开头,它只能对过程中的变量进行说明,同样是局部变量。另:如果过程不用变量,则可将说明部分省略。

3:过程体。它是过程的执行部分。

过程的调用

program 程序名;

var 主程序的变量说明;

procedure 过程名(形式参数表);

var 过程的变量说明;

begin

过程体

end;

begin

主程序体

end.

定义一个打印由“*”组成的矩阵的过程,该矩阵四行五列。

procedure print;

var i,j:integer;

begin

for i:=1 to 4 do

begin

for j:=1 to 5 do write(’*’);

writeln;

end;

end;

该过程就没有参数,直接执行打印一个固定矩阵的任务,而且也没返回值

定义过程fa求N!‘program exp7_5 ;

var x:integer ; t:real ;

procedure fa(n:integer);

var

k:integer;

begin

t:=1;

for k:=2 to n do

t:=t*k;

end;

begin

read(x) ;

fa(x);

writeln( x:5 , t:8) ;

end;

函数与过程的区别

1、函数不能作为独立的一个语句使用,而过程可以。

2、函数的值是由函数名返回的,而过程不能

变量形参

在过程定义的语句中,有个参数表,在参数表中,除了前面我们已用的形参,还有变量形参。变量形参的作用是:它可以作为过程的出口参数。我们可以把过程中求出的结果用变量形参输出到过程外,在过程外面可以调用该参数,因此,该参数是全局变量。其格式上的区别是在变量形参前加上VAR即可。

求1!+2!+3!+...+n!

program e9;

var j:integer;s,m:longint;

procedure js(n:integer;var m:longint);

var i:integer;

begin

m:=1;

for i:=1 to n do m:=m*i;

end;

begin

s:=0;

for j:=1 to 10 do

begin

js(j,m);

s:=s+m;

end;

writeln(’s=’,s);

end.

过程JS中用到了变量形参M,在过程中定义为LONGINT类型;而在主程序的变量说明中也得对变量形参M说明为同种类型LONGINGT。于是,在过程中和主程序中都可以用该变量了。

形参与变量形参

(1)形参:在函数或过程定义中,没有加VAR 说明的参数,在调用函数或过程时,调用程序将实参的值直接传递给形参,起着赋值作用。

(2)变量形参:在函数或过程定义中,加有VAR 说明的参数,在调用函数或过程时,调用程序将实参的变量地址传递给变量形参,因此当过程或函数处理中,改变变量形参的值,则实参的变量值也随之改变。(共享同一个存储单元)

测试

program p7_13(input,output);

Var  x,n:integer;

procedure chan(x:integer;var y:integer);

begin

x:=x+5;

y:=y+5;

writeln(’x=’,x,’y=’,y);{语句②}

end;

begin {主程序}

x:=10;

n:=10;

writeln(’x=’,x,’n=’,n); {语句①}

chan(x,n);

writeln(’x=’,x,’n=’,n); {语句③}

end.

过程chan中定义了形参x和变量形参y。在调用过程时,形参x接受实参的值10,然后将它加5,但是形参值的改变并不影响主程序中实参的值(数值传递),所以返回主程序后,输出实参x 的值仍为10,可见,实参x和形参x是两个不同的变量。y为变量形参,对于变量形参的操作实际上就是对相应实参n的操作(共享存储地址)。y的初值为10,调用过程后,值为15,返回主程序时,值15被带回主程序,故n也为15。

定义一个过程,实现将实数x拆分为整数部分n和小数部分p,在主程序输出。

小结形参和变量形参

①形参传值:为形参分配存贮单元,将实参的值赋给形参,过程体内对形参的操作不影响实参的值。一旦过程体执行完毕,系统将收回形参所占用的存贮单元,形参的值也就不复存在。

②变量形参传地址:将实参的地址传给对应的变量形参,即变量形参与实参共享实参的地址,因此对变量形参的操作就是对实参的操作。一旦过程体执行完毕,系统将收回变量形参所占用的存贮单元,但运算结果已保留在对应的实参中。

变量及其作用域

全程变量:主程序中被说明的变量。

局部变量:在过程或函数中被说明的变量。

在程序中,局部变量、全程变量进行存取的适用范围是不一样的,即作用域不一样。

局部变量的作用域是它们所在的子程序。因形式参数也只在子程序中有效,因此也属于局部变量。

对于局部变量的作用域可以这样理解:当局部变量所在子程序被调用时,局部变量才被分配有效的存储单元;当返回调用程序时,局部变量所占的存储单元就被释放。

全程变量的作用域分为两种情况:

①在全程变量和局部变量不同名时,其作用域是整个程序。

②在全程变量和局部变量同名时,局部变量屏蔽了全程变量。

Program p7_10(input,output);

var

m:integer; {m为全程变量}

procedure test2;

var m:integer; {定义m为局部变量}

begin

m:=100;

end;

begin {主程序}

m:=5;

writeln(’Before the test2 call,the m is:’,m);{输出过程调用前的m值}

test2; {调用过程test2}

writeln(’After the test2 call,the m is:’,m); {输出过程调用后的m值}

end.

函数和过程的区别

1、标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。

2、函数中一般不用变量形参,用函数名直接返回函数值;而过程如有返回值,则必须用变量形参返回。

3、过程无类型,不能给过程名赋值;函数有类型,最终要将函数值传送给函数名。

4、函数在定义时一定要进行函数的类型说明,过程则不进行过程的类型说明。

5、调用方式不同。函数的调用出现在表达式中,过程调用,由独立的过程调用语句来完成。

6、过程一般会被设计成求若干个运算结果,完成一系列的数据处理,或与计算无关的各种操作;而函数往往只为了求得一个函数值。

具体教程:http://download.csdn.net/download/boyxiejunboy/8913279(不用积分哦)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-16 01:43:44

函数和过程的相关文章

函数和过程的参数

函数和 过程的参数有: 1.常量参数,如 function addFun( const x,y:integer):integer; 函数里面的x,y的值不能改变 function addFun( const x,y:integer):integer; begin //x := x+1; //x,y在函数里面不能赋值,因为x,y为const; result := x+y; end; 2.形式参数,如 function addFun( x,y:integer):integer; 函数里面的x,y值可

存储函数和过程

1 ORACLE提供可以把PL/SQL 程序存储在数据库中,并可以在任何地方运行它.这样就叫存储过程或函数.过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储在数据库中,并通过输出,输出参数或输入/输出参数与其调用者交换信息.过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据. 2 --存储函数大致格式 create or replace function func_name(dept_id number,salary number) return numbe

Delphi基本之pascal语法(第五章.函数与过程程序设计)

第五章.函数与过程程序设计一.函数(包括标准函数和自定义函数) 1.函数的定义 格式:FUNCTION 函数名(<形参表>):返回值类型: VAR <变量说明> BEGIN <函数体> END [注]:1.形参表每个参数都写明其类型: 2.有且只有一个返回值,并且要将返回值赋值给函数名. [例]:求五边形的面积 function area(a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; area:=sqrt(p*(p-

python--11 函数和过程

过程(procedure)是简单/特殊并且没有返回值的 函数 有返回值 python 严格来说只有函数没有过程 >>> def hello(): ... print('Hello Junjie!') ... >>> temp = hello() Hello Junjie! >>> temp >>> print(temp) None >>> type(temp) <class 'NoneType'> pyt

函数与过程

80X86上的函数/过程调用. call指令来调用过程;ret指令(return)返回调用程序.过程如下: 1)确定执行完过程后要返回的指令地址(返回/链接地址). 2)将该地址保存到已知位置. 在没有递归时,可将其放在任意位置. 放到内存中的栈是最常见的,执行过程:call->push/ret->pop 优点: 1)栈"后进先出",完全支持嵌套和递归. 2)栈在内存中可高效操作.不同过程的返回地址可重用同一内存空间. 3)频繁访问内存的栈时可以使用缓存. 4)栈也是保持活

ASP基础教程:ASP脚本变量、函数、过程和条件语句

在上一期中作者向诸位简要介绍了 ASP 脚本语言之一 VBScript 的一些基本常识,本期将继续给大家讲解 VBScript 的脚本编写方法,并通过展示 VBScript 在 ASP 程序编写过程中的一系列实例使大家对 VBScript 有更进一层的理解. 大家在学习了脚本语言 VBScript 的变量.常量和过程的基本概念后,本期将继续向各位介绍 VBScript 的函数和语法. 函数和过程一样都是命名了的代码块,但它们却有很大的区别,过程完成程序任务,函数则返回值.我们可以这样理解,过程象

我也来谈javascript高级编程之:javascript函数编译过程

前言 题目有点大,其实也就是手痒...跟大家来扯一下javascript编译过程. 那么到底什么是"编译"呢 这个...本人文笔太差,我还是直接举例子吧. 相信玩过js童鞋应该都看过下面这样一个面试题: var a=3; function fn(){ alert(a); function a(){ a=5; } a(); alert(a); } fn(); alert(a); 请问上面的题目执行结果如何呢? 各位童鞋答对了没.没答对?...没关系.别急.下面进一段js科普: 各位童鞋都

mysql自定义函数与过程中写法的注意事项

1 BEGIN 2 #Routine body goes here... 3 /* 4 update szzx_goods_common set gc_id=i where gc_name=(SELECT gc_name from szzx_goods_class where gc_id=i); 5 */ 6 DECLARE i,goodsid int(11); 7 declare goodsname,img varCHAR(200); 8 set i=104; 9 WHILE i<1815 d

JS Foo.getName笔试题解析,杂谈静态属性与实例属性,变量提升,this指向,new一个函数的过程

 壹 ? 引 Foo.getName算是一道比较老的面试题了,大致百度了一下在17年就有相关文章在介绍它,遗憾的是我在19年才遇到它,比较奇妙的是现在仍有公司会使用这道题.相关解析网上是有的,这里我站在自己的理解做个记录,也算是相关知识的一次复习,题目如下,输出过程也直接标出来了: function Foo() { getName = function () { console.log(1); }; return this; }; Foo.getName = function () { cons