Как я могу реструктурировать этот поток управления, чтобы избежать использования goto? - PullRequest
3 голосов
/ 27 апреля 2011

В качестве домашнего задания для моего вводного курса по программированию я должен разработать и реализовать программу, которая генерирует случайное число (1-100), а затем дает игроку 7 предположений, чтобы правильно угадать число. Я придумал этот алгоритм:

control flow

Однако я не могу понять, как перевести это концептуальное представление алгоритма в управляющие структуры. (Мы используем Pascal, поэтому доступны следующие структуры: операторы if, циклы предварительного заказа и циклы post-order). Ни предварительный, ни постзаказный цикл не подходит для внутреннего цикла, так как условие цикла находится в середине цикла и есть две точки выхода!

Кто-нибудь может дать мне указание о том, как структурировать это более четко?

Ответы [ 3 ]

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

Я вообще не знаю Pascal, но знаю, что у него есть цикл 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 голос
/ 27 апреля 2011

я напишу это в стиле c

bool gameover;

int tries = 0;

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

}

ССЫЛКА ДЛЯ ПЕТЛИ В ПАСКАЛЕ: http://www.hkbu.edu.hk/~bba_ism/ISM2110/pas024.htm

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

Это выглядит солидно для меня.Я не знаю Паскаля, но разве ты не можешь «вырваться» из внутреннего цикла?Внутренний цикл считывает предположение пользователя, показывает подсказку и увеличивает счетчик.Он также проверяет две вещи: предположение верно, и число меньше 7. Если любое из них истинно, оно показывает соответствующее сообщение и затем выходит из этого внутреннего цикла, попадая во внешний цикл, где затем спрашивает, является ли пользовательхочет играть снова.

...