2012-04-10 86 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