Глава 5. Итоговый тест

   | 

   | 

 Обновлено 5 Авг 2017  | 

 2872

 ǀ   15 

Поздравляю! Мы продвинулись еще на одну главу дальше. Чтобы закрепить пройденный материал на деле, повторим быстренько теорию и выполним 2 практических задания.

Теория

Операторы if позволяют выполнить код, основываясь на результате условия (истинно оно или нет). Если условие оказалось ложное, то выполняется оператор else. Можно объединять несколько операторов if и else вместе.

Операторы switch обеспечивают более удобный и быстрый способ использования условий в коде. Они отлично сочетаются с перечислениями.

Операторы goto позволяют переносить точку выполнения в программе из одного места в другое. Их использовать мы не рекомендуем.

Циклы while позволяют программе выполнять код до тех пор, пока определенное условие истинно. Сначала вычисляется условие, затем выполняется код.

Циклы do while – это те же циклы while, только сначала выполняется код, а затем уже проверяется условие. Они отлично подходят для вывода меню или других элементов, так как позволяют выполнить код хотя бы один раз.

Циклы for — наиболее используемые циклы, идеальны, когда нужно выполнить код определенное количество раз.

Операторы break позволяют немедленно завершить выполнение операторов switch, циклов while, do while или for.



Операторы continue позволяют немедленно перейти к следующей итерации цикла. Будьте осторожны при использовании их в связке с циклами while или do while – не забывайте о возникновения проблемы с инкрементом счетчика цикла.

И, наконец, рандомные числа позволяют получать разные результаты выполнения одной и той же программы при каждом запуске.

Примечание: С этого момента тесты будут уже посложнее, но вы все равно с ними справитесь. Удачи!

Задание №1

В итоговом тесте главы №2 мы написали программу имитации мячика, падающего с башни. Так как тогда мы еще ничего не знали о циклах и не умели их использовать, то время полета мячика составляло всего лишь 5 секунд.

Используя программу ниже измените её так, чтобы мячик падал столько секунд, сколько необходимо, пока не достигнет земли.

В файле constants.h:

В основном файле:

Ответ 1

В файле constants.h:

В основном файле:

Задание №2

Напишите программу-игру типа hi-lo. Во-первых, ваша программа должна выбрать случайное целое число в диапазоне от 1 до 100. Пользователю дается 7 попыток угадать это число. Если пользователь не угадывает правильное число, то программа должна подсказывать, была ли его догадка слишком большой или слишком маленькой. Если пользователь угадывает число, то программа должна сообщить, что всё верно, вы выиграли. Если же у пользователя кончились попытки, и он не угадал число, то программа должна сообщить ему, что он проиграл и показать правильный ответ. В конце игры программа должна спросить у пользователя, не хочет ли он поиграть снова. Если пользователь не ведет ни «y», ни «n» (а что-то другое), то программа должна спросить снова.

Вот так примерно должен выглядеть вывод вашей программы:

Let's play a game. I'm thinking of a number. You have 7 tries to guess what it is.
Guess #1: 64
Your guess is too high.
Guess #2: 32
Your guess is too low.
Guess #3: 54
Your guess is too high.
Guess #4: 51
Correct! You win!
Would you like to play again (y/n)? y
Let's play a game. I'm thinking of a number. You have 7 tries to guess what it is.
Guess #1: 64
Your guess is too high.
Guess #2: 32
Your guess is too low.
Guess #3: 54
Your guess is too high.
Guess #4: 51
Your guess is too high.
Guess #5: 36
Your guess is too low.
Guess #6: 45
Your guess is too low.
Guess #7: 48
Your guess is too low.
Sorry, you lose. The correct number was 49.
Would you like to play again (y/n)? q
Would you like to play again (y/n)? f
Would you like to play again (y/n)? n
Thank you for playing.

Подсказки:

* Используйте в качестве стартового числа в генераторе случайных чисел функцию time(0).

* Пользователям Visual Studio: Из-за плохой реализации функции rand() (первое рандомное число не сильно отличается от стартового) — вызовите rand() сразу после установки стартового числа, чтобы сбросить первый результат.

* Используйте функцию getRandomNumber() из урока 71 для выбора случайного числа.

* В функции, которая будет спрашивать у пользователя, не хочет ли он поиграть еще раз, используйте механизм обработки некорректного пользовательского ввода.

Ответ 2

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (19 оценок, среднее: 4,89 из 5)
Загрузка...
Подписаться на обновления:

Комментариев: 15

  1. Владислав:

    Привет. Решение второго задания хорошее, но стоило бы еще сделать проверку ввода числа от пользователя, ибо если будет введен символ, то будет бесконечный цикл. А также в правилах указывается, что загадывается число от 1 до 100, то стоило бы и сделать проверку числа на нахождение в этом диапазоне (т.к. можно и отрицательные числа вводить, никто не запрещает 🙂 )
    Ну и мой код:

  2. Alexey:

    Решил вторую задачу несколько другим путём. Пришлось добавить заголовочный файл, чтобы можно было объявлять одну функцию внутри другой, а также оператор goto, т.к. это было первое, что пришло на ум.

    Hi-lo.h:

    Hi-lo.cpp:

  3. artem:

  4. Денис:

    Мой вариант:

  5. Алибек:

    Вторая задача:

  6. Андрей:

    Фух, долго пришлось писать эту программу -))
    Пришлось сначала на листке рисовать блоки (кстати было бы неплохо сделать статью на эту тему для начинающих или в Телеграме как Вы делаете пакет ссылок на одну тему)

    От себя я решил немного усложить и добавил 2 условия:
    1 После озвучивания правил игры спрашиваю согласия пользователя
    2 В запросе числа от пользователя добавил проверку на корректность ввода числа.

    И саму игру решил не выносить в отдельную функцию — onlinegdb.com/HJcySZIRz.

    1. Юрий Юрий:

      У вас в программе если ввести неверное число первый раз, то выводится предупреждение и после него на все последующие значения также пишет, что не из диапазона, даже если вводить от 1 до 100. Проблема в этой строчке:

      Здесь нужно использоваться оператор И, вместо ИЛИ:

      1. Андрей:

        Если мы поставим оператор И вместо ИЛИ то у нас такое условие никогда не выполнится. Нет таких чисел одновременно меньше 0 и больше 100.
        Ошибка была в расположении циклов For и If относительно друг друга.
        Поменял местами и вроде все варианты работают.

        1. Юрий Юрий:

          Да, я что-то не досмотрел. Решение должно быть другое.

  7. Анатолий:

    srand(); и rand(); для сброса обязательно в main должны быть? Или можно в getRandomNumber вставить? А если getRandomNumber в отдельный файл вынести как тогда?

    1. Li4ik Li4ik:

      rand() можно вставить и в getRandomNumber. Чтобы вынести getRandomNumber в отдельный файл, вам нужно будет тогда просто подключать файл .cpp с этой функцией к файлу, где она будет использоваться — смотрите Урок 20. Многофайловые программы.

  8. Анатолий:

    Есть ограничение на размер комментария? Пробовал писать с кодом, получалось довольно длинное сообщение, и оно, как я понял не отправлялось.

    1. Li4ik Li4ik:

      Попробуйте тогда разбить ваш комментарий на части и отправить несколько комментариев.

  9. Анатолий:

    Как сюда код вставить, чтоб в как в статье выглядело?

    1. Li4ik Li4ik:

      Просто вставляйте код в форму комментария и отправляйте. Весь внешний вид кода я редактирую и тогда уже оно выглядит как в статье.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО