2011-04-17 81 views
0

我寫了一些代碼下面,我管理它編譯,但它一旦進入球沒有崩潰。開始帕斯卡和需要幫助簡單的程序問題

任何幫助,非常感謝!

我在這篇文章的最後發佈了結構化英語。

Program Game; 

var 
PlayerOneScore: Integer; 
PlayerTwoScore: Integer; 
BallsNo: Integer; 
CurrentScore: Integer; 
Ptr: Integer; 
Result:Integer; 

Begin 
PlayerOneScore:= 0; 
PlayerTwoScore:= 0; 
Writeln('How many balls do you wish to face?'); 
Readln(BallsNo); 
Ptr:=1; 
While Ptr < 1 Do 
Begin 
Repeat 
Ptr:=Ptr+1; 
CurrentScore:=0; 
Writeln ('Player turn'); 
Writeln ('Please roll the bowling die'); 
Writeln ('Enter 1 if result is a 1'); 
Writeln ('Enter 2 if result is a 2'); 
Writeln ('Enter 3 if result is a 4'); 
Writeln ('Enter 4 if result is a 6'); 
Writeln ('Enter 5 if result is a 0'); 
     While BallsNo >0 Do 
     Begin 
     Repeat 
     BallsNo:=BallsNo-1; 
     Writeln('This is',BallsNo); 
     Readln(Result); 
     If Result = 1 Then 
      CurrentScore:= CurrentScore+1 
      Else If Result = 2 THEN 
      CurrentScore:= CurrentScore+2 
      Else If Result = 3 THEN 
      CurrentScore:= CurrentScore+4 
      Else If Result=4 THEN 
      CurrentScore := CurrentScore+6 
     Until BallsNo = 0; 
     End; 
If Ptr = 1 THEN 
PlayerOneScore := CurrentScore 
Else PlayerTwoScore := CurrentScore; 
Until Ptr=2; 
End; 
If PlayerOneScore > PlayerTwoScore Then 
Writeln('Player One Wins'); 
If PlayerTwoScore > PlayerOneScore Then 
Writeln('Player Two Wins'); 
End. 

==================

PlayerOneScore <- 0 
PlayerTwoScore <- 0 
OUTPUT ‘How many balls do you wish to face?’ 
INPUT BallsNo 
FOR EachPlayer <- 1 TO 2 DO 
    CurrentScore <- 0 
    OUTPUT ‘Player’ + EachPlayer + ‘to go’ 
OUTPUT ‘Please roll the bowling die’ 
    OUTPUT ‘Enter 1 if result is a 1’ 
OUTPUT ‘Enter 2 if result is a 2’ 
OUTPUT ‘Enter 3 if result is a 4’ 
OUTPUT ‘Enter 4 if result is a 6’ 
OUTPUT ‘Enter 5 if result is a 0’ 
    FOR EachBall <- 1 TO BallsNo DO 
     OUTPUT ‘Ball number: ‘ + EachBall 
INPUT BowlResult 
IF BowlResult = 1 THEN 
    CurrentScore <- CurrentScore + 1 
ELSE IF BowlResult = 2 THEN 
    CurrentScore <- CurrentScore + 2 
ELSE IF BowlResult = 3 THEN 
    CurrentScore <- CurrentScore + 4 
ELSE IF BowlReuslt = 4 THEN 
    CurrentScore <- CurrentScore + 6 
END IF 
END FOR 
IF EachPlayer = 1 THEN 
    PlayerOneScore <- CurrentScore 
ELSE 
    PlayerTwoScore <- CurrentScore 
END FOR 
IF PlayerOneScore > PlayerTwoScore THEN 
    OUTPUT ‘Player One Wins’ 
ELSE IF PlayerTwoScore > PlayerOneScore THEN 
    OUTPUT ‘Player Two Wins’ 
ELSE 
    OUTPUT ‘Draw’ 

回答

2

哇,今天很多帕斯卡的!

(從我的編譯器至少)錯誤是39行:

foo.pas(39,9) Fatal: Syntax error, ";" expected but "UNTIL" found 

你必須有:

Until BallsNo = 0; 

但沒有相應的Repeat語句來啓動其循環。 Until應該是什麼意思?第17行的while循環也發生了同樣的情況,我認爲你打算在第44行結束。在這兩種情況下,它們都變成了單行while循環,其中只有下一行是循環的一部分。

一個while環路帕斯卡與一個以上的說法是這樣的:

while CONDITION do 
begin 
    { statements... } 
end; 

(爲了清楚起見,{在Pascal是註釋開始字符。)

習慣縮進你的代碼更好的做法也有助於澄清發生了什麼。


編輯爲您編輯首先,您應該讓您的修改更加明顯,或張貼新的問題。我沒有注意到編輯,直到我注意到您的第二個帳戶在您的問題中添加了Repeat聲明,而他們之前不存在這些聲明,並且必須通過問題編輯歷史記錄進行搜索。

沒有崩潰,但在第一個問題後沒有輸出。但那是因爲這就是你告訴它做的。

通過您添加的邏輯進行跟蹤。您有:

Ptr:=1; 
While Ptr < 1 Do 
{ .... } 
End; 

這將跳過程序的整個主塊在while循環,因爲Ptr不是< 1。然後,最後一節基本上不跑,要麼,你說:

If PlayerOneScore > PlayerTwoScore Then 
Writeln('Player One Wins'); 
If PlayerTwoScore > PlayerOneScore Then 
Writeln('Player Two Wins'); 

因爲while循環之前,你必須初始化兩個變量來0,使那些都行打印的,程序只是退出(一般)。

繼續嘗試!但考慮一下。你下次也應該發佈一個新問題。

0

之前,不要使用;到:

... 

Else PlayerTwoScore := CurrentScore 

Until Ptr=2; 

...