Pascal 我不知道';我不知道为什么这个项目没有';跑不动

Pascal 我不知道';我不知道为什么这个项目没有';跑不动,pascal,freepascal,turbo-pascal,Pascal,Freepascal,Turbo Pascal,请告诉我哪里我错了,我不能弥补我的错误在2个程序。我尝试在pascal中使用递归 这个正在运行,但它给了我错误的结果 program fatorial; var n: integer; function f(n: longint): longint; begin if((n=0) or (n=1)) then f:=1 else *f:= n*f(n-1);* read(f); end; begin write('n:='); read(n);

请告诉我哪里我错了,我不能弥补我的错误在2个程序。我尝试在pascal中使用递归

这个正在运行,但它给了我错误的结果

program fatorial;
var
  n: integer;

function f(n: longint): longint;
begin
  if((n=0) or (n=1)) then 
    f:=1 
  else 
    *f:= n*f(n-1);*
  read(f);
end;

begin
  write('n:='); read(n);
  f(n);
  write('result:', f(n));
  readln;
end.
这个告诉我“错误:非法表达式”,但我不知道如何修复它

program Greatest_common_divisor;
var
  gcd,p,q: integer;
  r:=real;
begin
  write('p:'); read(p);
  write('q:'); read(q);
  r:= p mod q;
  if r <> o then
  begin
    p:=q;
    q:=r
    *gcv:= gcv(q,r);*
  end;
  write('Greatest common divisor:', gcv(p.q));
  readln;
end.
程序最大公因子;
变量
gcd,p,q:整数;
r:=真实值;
开始
写('p:');阅读(p);
写('q:');读取(q);
r:=p模q;
如果r o那么
开始
p:=q;
q:=r
*gcv:=gcv(q,r)*
结束;
写(‘最大公约数:’,gcv(p.q));
readln;
结束。
  • 不应在函数中读取
    f

  • 您应该编写函数,而不是使用内部函数
    gcv()

  • 第一个问题:

  • 我认为在函数中读取
    f
    是不正确的 但第二个问题是:

  • 不要在命令中使用
    :=
    :r:=real,仅
  • o
    gcv
    是什么类型的变量?在
    var
    之后,您没有识别
    o
    gcv
  • q:=r

  • 如果去掉
    read(f)
    ,您的第一个程序将给出正确的结果。为什么会这样?您必须从
    *f:=n*f(n-1)的外部删除星号*。我不知道你为什么把它们放在那里。为什么你有额外的
    f(n)单独拨打电话?这没有用。结果不会被存储。对于第二个函数,为什么在
    gcv:=gcv(q,r)
    周围有星号?gcv的定义在哪里?而且,
    gcv(p.q)
    是无效的,因为你有一个句号,而不是逗号。星号可能是他从维基或论坛页面上抄下来的强调符号(表示递归):-)@Marcovandevort我想星号是用来突出某个东西的。我列举了OP需要解决的其他几个问题。我认为,他们对自己的问题的来源有一个基本的了解也是一个理想的目标