2012-04-10 66 views
2

我是Pascal的新手,我试图编写一个简单的程序,但在函数之间传递值时遇到了问题。这是一小片我有什么: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. 

我的问题是,从writeln(converNumeral(NUM)),主要是“民”,该值不会被传递到convertNumeral功能,想知道是否帕斯卡甚至做到了这一点。我认为它是因为我没有将数字声明为变量,但是当我这样做时,我得到一个编译错误,它无法完成第二个if语句。谢谢你的时间。

+2

无法从此代码中看到,但与问题无关。 PS测试1至4999之外的功能,在里面做,然后问另一个,如果不是非常非常非常糟糕。函数应该做一件事。 – 2012-04-10 23:07:04

+0

@Tony这就是我最终做的,创建一个辅助方法来测试,解决了这个问题。 – gestalt 2012-04-10 23:15:17

+0

有意义的是,破坏了一段代码,它将太多东西融入到单一目的函数中,通常会揭示实现中的错误和弱点。成为一种习惯,它会很好地支持你。如果stuuf可以通过内联进行优化,编译器会为您做到这一点。总是先去理解。 – 2012-04-11 11:24:14

回答

2

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

您对number所做的更改(如果有)将不会反映在num中。该参数通过值通过,因此number存储拷贝存储在num中的值;他们是两个不同的变量。如果这是你想要的,你可以使用var来通过引用传递参数。

convertNumeral每次递归调用得到的number一个实例,所以number提出,如果有的话,所做的更改不会出现一次函数返回给调用者。每个呼叫都有自己的版本numberj

+0

我编辑了我的提交。我仍然无法弄清楚什么是错的。当我打印出数字的值时,我得到零。 – gestalt 2012-04-10 22:39:45

+2

您的附加信息不会改变您的问题的答案:Pascal支持将参数传递给函数。您遇到的问题显然与您的问题无关。我邀请您发布一个新问题,您可以在其中询问程序的真正错误。尽管如此,请尽量让它具有普遍的兴趣,否则它可能会因为“本地化”而关闭。没有人会关心你的具体程序,所以试着弄清楚你遇到了什么大问题(比如,你是否理解值的返回值*,或者递归如何工作)。 – 2012-04-10 22:46:42