2011-04-27 79 views
3

作爲我的入門編程課程的家庭作業,我必須設計和實現一個生成隨機數(1-100)的程序,然後給玩家7猜測以正確猜測數字。我想出了這個算法:如何重構此控制流程以避免使用goto?

control flow

但是,我不能工作,如何對算法的這個概念表示翻譯成控制結構。 (我們使用Pascal,所以可用的結構是if語句,預定義循環和後序循環)。由於循環條件位於循環中間並且有兩個退出點,因此無論是預定循環還是後循環都適合內循環!

有人能給我一個關於如何更清晰地構造這個結構的指針嗎?

回答

2

我不知道帕斯卡爾所有,但我不知道它有一個while循環,所以,我會構建它類似於下面......(寫在僞代碼)

的方式
boolean userWishesToPlay = true; 
int userGuess = -1; 
int ranValue; 
int guessCount = 0; 

    while (userWishesToPlay) { 
     ranValue = generateRandomValue(); 
     while(userGuess != ranValue && guessCount < 7) { 
      // Give hint if user has guessed more than once 
      if (guessCount >= 1) { 
       // give hint 
      } 
      userGuess = // get input from user 
      guessCount += 1; 
     } 

     if (userGuess == ranValue) { 
      // print congrats! 
     } else { 
      // print game over 
     } 

     userWishesToPlay = // get input from user on whether to play again or not 
     userGuess = -1; // since random value will be between 1 and 100 this is safe 
     guessCount = 0; 
    } 
+1

這是不是因爲它不是Pascal,或者它不正確?如果它不正確,我想指出爲什麼會更多很有幫助。 – rybosome 2011-04-27 13:58:37

1

我會寫出來在C風格

bool gameover; 

int tries = 0; 

while(!gameover) 
{ 
    game over = (tries > 7); 
    if(answer == correct) 
     break; 
    tries++ 

} 

鏈接,while循環PASCAL:http://www.hkbu.edu.hk/~bba_ism/ISM2110/pas024.htm

+1

您的僞代碼不正確 - 循環中的第二行將覆蓋第一個的結果 – Alnitak 2011-04-27 13:51:28

+0

訂單已修復。我給了更多的例子,但你是對的,這個位置並不是最好的。 – 2011-04-27 13:53:53

+0

仍然不正確。最後一行會將「遊戲結束」設置爲錯誤7次,即使您在第一次嘗試中猜出了數字。 – Groo 2011-04-27 13:56:30

0

它看起來固體給我。我不知道帕斯卡,但你不能從內部循環中「打破」嗎?內部循環正在讀取用戶的猜測,顯示提示並遞增計數。它還檢查兩件事:猜測是正確的,計數小於7.如果其中任何一個都是真的,它會顯示一條適當的消息,然後脫離該內部循環,落入外部循環,然後它會詢問用戶想再玩一次。

+0

不幸的是,帕斯卡設計師決定循環中的break語句太危險,不應該被允許。對我來說倒黴:( – guhou 2011-04-27 14:16:16

+0

我做了一些Google搜索,看起來Pascal中有一個「break」命令:http://www.baskent.edu.tr/~tkaracay/etudio/ders/prg/pascal/ PasHTM1/pas/pasl1004.html。然而,我認爲這裏給出的While循環解決方案更優雅 – 2011-04-27 15:14:34