Запущен Pascal и нужна помощь по простым программным проблемам - PullRequest
0 голосов
/ 17 апреля 2011

Я написал некоторый код ниже, и мне удалось его скомпилировать, но он вылетает, как только введите шары №.

Любая помощь очень ценится!

Я разместил структурированныйАнглийский в конце этого поста.

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 ]

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

Ух, сегодня много Паскаля!

Ошибка (по крайней мере, от моего компилятора) находится в строке 39:

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

У вас есть:

Until BallsNo = 0;

Но нет соответствующего оператора Repeat для запуска его цикла.С чем это должно идти Until?То же самое происходит с циклом while в строке 17, который, я думаю, вы намеревались завершить на строке 44. В обоих случаях они стали однострочными циклами while, где только следующая строка является частью цикла.

Цикл while в Паскале с несколькими утверждениями выглядит следующим образом:

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

(Для ясности { в Паскале - это символ начала комментария.)

Привыкание к отступу вашего кода также поможет прояснить, что происходит.


Отредактировано для ваших правок Во-первых, вы должны либо сделать свои правки более заметными, либоопубликовать новый вопросЯ не заметил изменений, пока не заметил, что ваша вторая учетная запись добавила 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 голосов
/ 11 марта 2014

Не используйте ; до тех пор, пока:

...

Else PlayerTwoScore := CurrentScore

Until Ptr=2;

...
...