Pascal是否支持将参数传递给函数?

Pascal是否支持将参数传递给函数?,pascal,freepascal,Pascal,Freepascal,我是Pascal新手,我正在尝试编写一个简单的程序,但在函数之间传递值时遇到了问题。这是我所拥有的一小部分: program numberConverter; const maxValue = 4999; minValue = 1; var num: integer; function convertNumeral(number: integer):string; var j: integer; begin if ((number < minValue) OR (nu

我是Pascal新手,我正在尝试编写一个简单的程序,但在函数之间传递值时遇到了问题。这是我所拥有的一小部分:

program numberConverter;

const
    maxValue = 4999;
    minValue = 1;

var num: integer;

function convertNumeral(number: integer):string;
var j: integer;
begin
if ((number < minValue) OR (number > maxValue)) then
    begin
    writeln(number);
    writeln('The number you enter must be between 1 and 4999. Please try again:');
    read(j);
    convertNumeral := convertNumeral(j);
    end
else 
 if (number >= 1000) then
convertNumeral := 'M' + convertNumeral(number -1000)
{more code here, left it out for space}
end;

begin
    writeln;
    writeln('Enter an integer between 1 and 4999 to be converted:');
    read(num);
    writeln;
    writeln(num);
    writeln(convertNumeral(num));
end.
程序编号转换器;
常数
最大值=4999;
最小值=1;
var-num:整数;
函数ConvertNumeric(数字:整数):字符串;
var j:整数;
开始
如果((数字<最小值)或(数字>最大值)),则
开始
writeln(编号);
writeln('您输入的数字必须介于1和4999之间。请重试:');
读(j);
convertNumeric:=convertNumeric(j);
结束
其他的
如果(数字>=1000),则
ConvertNumeric:=“M”+ConvertNumeric(数字-1000)
{这里有更多代码,留待空格}
结束;
开始
书面语;
writeln('输入一个介于1和4999之间的整数以进行转换:');
读取(num);
书面语;
writeln(num);
writeln(数字(num));
结束。

我的问题是writeln(converNumeral(num))中的值,主要是'num',没有传递到convertNumeric函数,我想知道Pascal是否会这样做。我认为这是因为我没有声明number是一个变量,但当我声明number时,我得到一个编译错误,它无法完成第二个if语句。谢谢您的时间。

是的,值肯定会传递给函数。我保证
num
确实会传递给
convertNumeric
。在该函数中,
number
获取
num
中的任何值。也许您如何观察程序的行为存在问题

num
所做的更改(如果有)将不会反映在
num
中。参数是按值传递的,因此
number
存储
num
中存储的值的副本;它们是两个截然不同的变量。如果需要,可以使用
var
通过引用传递参数


convertNumeric
的每次递归调用都会获得一个新的
number
实例,因此一旦函数返回调用方,对
number
所做的更改(如果有)将不会出现。每次调用都会获得自己版本的
number
j

我编辑了我的提交。我还是不知道出了什么问题。当我打印出数字的值时,我得到零。您的附加信息不会改变您问题的答案:Pascal支持向函数传递参数。你的问题显然与你的问题无关。我邀请你发布一个新的问题,问你的程序到底出了什么问题。不过,请尽量让它成为大家都感兴趣的话题,否则它可能会被关闭为“过于本地化”。没有人会关心您的特定程序,所以请尝试找出您遇到的问题(例如,您是否了解值是如何返回的,或者递归是如何工作的)。从这段代码中看不到,但这和问题无关。PS在函数外测试1到4999,在函数内测试,如果不是,则要求另一个测试是非常糟糕的。函数应该做一件事。@Tony这就是我最后做的,创建了一个辅助测试方法,解决了这个问题。将一段做了太多事情的代码分解成单一用途函数通常会发现实现中的错误和弱点。养成习惯,它会对你有好处。如果有可以通过内联优化的stuf,编译器将为您这样做。总是首先追求可理解性。