Не могу заставить Паскаль работать правильно - PullRequest
0 голосов
/ 17 апреля 2011

Что не так со следующим кодом? Сбой при вводе номера.

Я потратил более 2 часов, пытаясь понять, и до сих пор не могу, я изучаю паскаль, поэтому, пожалуйста, потерпите меня.

Program Game;

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

Begin
  CurrentScore := 0;
  PlayerOneScore:= 0;
  PlayerTwoScore:= 0;
  Writeln('How many balls do you wish to face?');
  Readln(BallsNo);
  Ptr:=BallsNo;
  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
          Writeln('This is',BallsNo);
          Readln(Result);
          BallsNo:=BallsNo-1;
        Until BallsNo = 0;
        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
      End;
    Until Ptr=2;
  End;

  If Ptr = 1 Then
    PlayerOneScore := CurrentScore
  Else
    PlayerTwoScore := CurrentScore;
  If PlayerOneScore > PlayerTwoScore Then
    Writeln('Player One Wins');
  If PlayerTwoScore > PlayerOneScore Then
    Writeln('Player Two Wins');
  If PlayerOneScore = PlayerTwoScore Then
    Writeln('Tie');
End.

Ответы [ 4 ]

1 голос
/ 15 января 2013

Изменить

Пока Ptr <1 </p>

на

Пока Ptr> 1

У вас глючит цикл ниже по алгоритму.

-Cheers!

1 голос
/ 17 апреля 2011

Ptr: = 1;Пока Ptr <1 Do </p>

Это ваша проблема.Я считаю, что вы должны заменить 1 на BallsNo.

0 голосов
/ 17 апреля 2011

Пожалуйста, не говорите, что "он падает". Это дает вам какое-то сообщение об ошибке, что это?

У вас также есть проблема, что независимо от того, у какого игрока ваш счет равен нулю. Это не приведет к сбою.

0 голосов
/ 17 апреля 2011

CurrentScore не всегда инициализируется.Попробуйте вставить «CurrentScore: = 0;»после первого "Begin".

Кроме того, откуда вы знаете, что он падает?Может быть, это просто ничего не печатает.Что произойдет, если вы добавите «Если PlayerOneScore = PlayerTwoScore Then Writeln ('Tie')", непосредственно перед "Конец."?

...