Pascal嵌套中的Forward如何使用
因为书上关于forward语句的叙述不怎么清楚比如这个求组合的程序如何加上forward来使函数fac可以调用函数comprogramzlx;varm,n:integer...
因为书上关于forward语句的叙述不怎么清楚
比如这个求组合的程序
如何加上forward来使函数fac可以调用函数com
program zlx;
var
m,n:integer;
function com(x,y:integer):real;
function fac(a:integer):real;
var
b:integer;
fa:real;
begin
fa:=1;
for b:=1 to a do
fa:=fa*b;
fac:=fa;
end;
begin
com:=fac(x)/fac(y)/fac(x-y);
end;
begin
readln(m,n);
writeln(com(m,n));
end. 展开
比如这个求组合的程序
如何加上forward来使函数fac可以调用函数com
program zlx;
var
m,n:integer;
function com(x,y:integer):real;
function fac(a:integer):real;
var
b:integer;
fa:real;
begin
fa:=1;
for b:=1 to a do
fa:=fa*b;
fac:=fa;
end;
begin
com:=fac(x)/fac(y)/fac(x-y);
end;
begin
readln(m,n);
writeln(com(m,n));
end. 展开
展开全部
function com(x,y:integer):real; forward;
像这样就行.
后面再定义
function com():real;
begin
..
end;
像这样就行.
后面再定义
function com():real;
begin
..
end;
追答
你只需要把要提前定义的函数的函数头写在前面就行了,后面再定义的时候写不写参数都可以的.
比如:
procedure b(arg1,arg2:integer); forward
procedure a(arg1:integer);
begin
b(0,0); //由于前面定义了,这里合法
end;
procedure b(arg1,arg2:integer); //补充定义
你喜欢也可以写成:
procedure b; //不写参数,其实习惯上都会写,不写感觉很奇怪.
begin
...
end.
展开全部
forward是一种类似于前向调用的关键字,其用法如下:
function max(a,b:longint):longint;forward;
function ex1(a,b:longint):longint;forward;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
function ex1(a,b:longint):longint;
begin
exit(max(a,b));
end;
//当然这段程序无意义、、、
解释一下,是这么样的:在pascal中,所有procedure和function是不可以互相使用的,比如说:
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
function ex1(a,b:longint):longint;
begin
exit(max(a,b));
end;
这段程序就是非法的,默认中pascal的互相调用会引起错误,可能是内存上容易因此错误吧。。。
因此在互相调用之前需要向编译器声明,我要调用和我同级的子程序了,你得给我安排好了,于是编译器就给你安排了一下,使得,厄,貌似是内存指针上还是什么玩意儿的做了一下变动,就是换了一种处理方式,于是就可以调用了。。。
其实还可以这么玩:
procedure ex1(ex:longint);forward;
procedure ex2(ex:longint);forward;
procedure ex1(ex:longint);
begin
//语句1
//语句2
ex2(n);
//语句X
//语句Y
end;
procedure ex2(ex:longint);
begin
begin
//语句1
//语句2
ex1(n);
//语句X
//语句Y
end;
然后就可以实现互相调用了··
可以继续追问或者私M我
function max(a,b:longint):longint;forward;
function ex1(a,b:longint):longint;forward;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
function ex1(a,b:longint):longint;
begin
exit(max(a,b));
end;
//当然这段程序无意义、、、
解释一下,是这么样的:在pascal中,所有procedure和function是不可以互相使用的,比如说:
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
function ex1(a,b:longint):longint;
begin
exit(max(a,b));
end;
这段程序就是非法的,默认中pascal的互相调用会引起错误,可能是内存上容易因此错误吧。。。
因此在互相调用之前需要向编译器声明,我要调用和我同级的子程序了,你得给我安排好了,于是编译器就给你安排了一下,使得,厄,貌似是内存指针上还是什么玩意儿的做了一下变动,就是换了一种处理方式,于是就可以调用了。。。
其实还可以这么玩:
procedure ex1(ex:longint);forward;
procedure ex2(ex:longint);forward;
procedure ex1(ex:longint);
begin
//语句1
//语句2
ex2(n);
//语句X
//语句Y
end;
procedure ex2(ex:longint);
begin
begin
//语句1
//语句2
ex1(n);
//语句X
//语句Y
end;
然后就可以实现互相调用了··
可以继续追问或者私M我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询