2013-06-27 26 views
0

我對這個問題有點問題。我正在參加一個Pascal編程課,這個問題出現在我的邏輯書中。我需要讓用戶輸入一系列(+)號碼,一旦他/她輸入( - )號碼,程序應該找到所有(+)號碼的總和。我做到了這一點,但現在我正在嘗試解決這個問題的第二部分,這需要我利用嵌套循環來根據用戶的輸入運行x次程序。Pascal中的Summation循環程序

我不知道如何根據用戶輸入的數字重新運行求和過程。換句話說,該程序需要 1)詢問用戶他/她想多少次運行程序

2)開始嵌套循環,提示用戶進行一系列正數 3)用戶輸入數字爲循環詢問他們 4)負數然後表示系列的末尾 5)重複直到循環後,程序應該將所有正數加在一起

步驟2-4是該計劃的一個重複。當然,根據用戶的輸入,我需要運行x次。

下面的代碼是我到目前爲止,誠實我很爲難:

program summation; 

var num, sum, counter, userValue : integer; 

begin 

    writeln('Run program how many times?'); 
    readln(userValue); 

    for counter := 1 to userValue do 
    begin 
    sum := 0; 

    repeat 

     writeln('Enter a number: '); 
     readln(num); 

     if num >= 0 then 
     begin 
     sum := num + sum; 
     end; 

    until num < 0; 

    writeln('The sum is: ', sum); 
    readln(); 

    end; 

end. 

更新[6/27] 3:40(太平洋時間) 輸出: 我試圖上傳的圖像輸出,但我需要10個代表點。無論如何,該程序的輸出如下:

您希望程序運行多少次? 輸入號碼:輸入一個數字:輸入一個數字: -1 < - 負數信號嵌套循環 的一次迭代輸入一個數字:輸入號碼: - 3 < - 負數表示嵌套循環的一次迭代 總和爲:6

負數表示程序停止迭代。但是,我希望程序重複三次序列的總和。

更新[6/27] 7:25 PM(太平洋時間)

目前我的程序正確執行。正確地說,我的意思是(1)詢問用戶他/她想運行多少次。 (2)嵌套循環開始並提示用戶輸入一系列數字。 (3)一旦輸入負數,就表示該系列的結束。 (4)該程序對正數進行求和。 (5)通過向用戶詢問另一系列數字來重新啓動程序。 (6)負數又一次結束了這個系列。 (7)錯誤從這裏開始:一旦程序根據用戶定義的數字迭代(一系列數字提示),它將先前迭代中的所有和添加到最終和。這不是我的目標。我的目標是在最後的迭代中分別總結(每次運行一次)並不是所有的總和。

+0

你還沒有說你的問題或錯誤是什麼。您需要仔細考慮代碼,因爲您正在重複使用名爲「numPromptloop」的函數,該函數也是主程序的全局名稱。因此,我不清楚,例如,「numPromptloop」是否應該回傳一個孤立的總和,或者繼續積累到主要的全局總和中。另外,你沒有把'sum'初始化爲零,所以在你開始向它添加東西之前需要在適當的地方完成。 – lurker

+0

你好,我修改了我的代碼。爲了清楚起見,我刪除了模塊。我還進一步解釋了我的問題/目標。謝謝。 – pseud0

+0

我認爲你非常接近,在這種情況下襬脫這個功能實際上使它變得更簡單。這就表示如果問題很短,功能/模塊並不總是必要的。 (1)'for'循環缺少循環塊的'begin'和'end'; (2)在總結數字之前,您需要將'sum'初始化爲0,因爲它未設置爲0。我仍然不清楚一個要求:是否應該顯示每個系列的總和,或所有系列的所有輸入的總和,還是兩者? – lurker

回答

0

總結(雙關語意),你的最終修正列表:

program summation; 

var num, sum, counter, userValue : integer; 

begin 
    { Prompt the user for how many times they wish to sum up a list of numbers } 

    writeln('Run program how many times?'); 
    readln(userValue); 

    { For each time the user wants to sum numbers, prompt them for the numbers } 

    for counter := 1 to userValue do 
    begin 
    sum := 0; { start with a sum of 0 for this list } 

    { Repeatedly request a number from the user until they enter a negative to end } 
    repeat 
     { Prompt for and get the number } 
     writeln('Enter a number: '); 
     readln(num); 

     if num >= 0 then 
     sum := num + sum; { add the number to the sum if it's not negative } 
    until num < 0; { finish with this sum if the number entered is negative } 

    { Write out the last calculated sum } 
    writeln('The sum is: ', sum); 
    readln; { Let the user press enter to go around and request another sum } 
    end; 
end. 
+0

哈哈!非常感謝。我真的很欣賞這種幫助。最後一個問題,寫作('總和是:',總和);這條線何時執行,它不會給出零值? – pseud0

+0

@ pseud0因爲之前的循環將數字添加到'sum'。當你到達'writeln'時,'sum'已經將前一個循環中的所有'num'值加入到它中。像這樣的程序中的所有東西都按順序排列 – lurker

0

在numPromptLoop改變NUM參數的名稱來概括