Часть №2: Практические задания по С++

  Юрий  | 

  Обновл. 29 Авг 2020  | 

 16350

 ǀ   57 

Здесь размещены задания по С++, которые вы можете выполнить. Каждое задание имеет свой уровень сложности. Готовых ответов не будет, поэтому welcome в комментарии.

Easy: Задание №1

Напишите программу вычисления стоимости поездки на автомобиле на дачу (туда и обратно). Исходными данными являются:

   расстояние до дачи (в км);

   количество бензина, которое потребляет автомобиль на 100 км пробега;

   цена одного литра бензина.

Пример выполнения программы:

Расстояние до дачи (км): 67
Расход бензина (литров на 100 км пробега): 8.5
Цена литра бензина (руб.): 6.5
Поездка на дачу и обратно обойдется в 74.04 руб.

Medium: Задание №2


Напишите программу вычисления стоимости покупки с учетом скидки. Скидка в 3% предоставляется, если сумма покупки больше 500 руб., в 5% — если сумма покупки больше 1000 руб.

Пример выполнения программы:

Введите сумму покупки: 640
Вам предоставляется скидка в 3%
Сумма с учетом скидки: 620.80 руб.

Hard: Задание №3

Напишите программу реализующую игру «Угадай число». Компьютер загадывает число от 0 до 999 (используйте генерацию случайных чисел), а пользователь угадывает его. На каждом шаге угадывающий делает предположение, а задумавший число — сообщает, сколько цифр из числа угаданы и сколько из угаданных цифр занимают правильные позиции в числе. Например, если задумано число 725 и выдвинуто предположение, что задумано число 523, то угаданы две цифры (5 и 2) и одна из них занимает верную позицию. Например:

Компьютер загадал трехзначное число. Вы должны его отгадать. После очередного числа вам будет сообщено, сколько цифр угадано и сколько из них находятся на своих местах.
Ваш вариант: 123
Угадано: 0. На своих местах: 0
Ваш вариант: 456
Угадано: 1. На своих местах: 0
Ваш вариант: 654
Угадано: 2. На своих местах: 2
Ваш вариант: 657
Угадано:  2. На своих местах: 2
Ваш вариант: 658
Угадано: 3. На своих местах: 3
***Вы угадали число 658!***


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

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (23 оценок, среднее: 4,78 из 5)
Загрузка...

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

  1. Аватар Slavik:

    Задание №1

    Задание №2

  2. Аватар Artem:

    №3:

  3. Аватар Юра:

    Задание №3:

  4. Аватар Екатерина:

    Задание №2

  5. Аватар Игорь:

    Задание 3

  6. Аватар Максим:

    Задание №3.

  7. Аватар Марат:

    Третье задание. Вроде неплохо получилось!

  8. Аватар Виктор:

    Сделал игру "угадай число" через класс, так что в main есть минимум кода.

    1. Аватар Марат:

      Ваша программа работает не правильно!
      ИГРА УГАДАЙ ЧИСЛО

      У вас 7 попыток угадать число
      введите 3-x значное целое число: 553
      На своих местах : 1 , угадано : 5

      1. Аватар Виктор:

        Не может такого быть, "угадано" не может быть больше 3.

        1. Аватар Виктор:

          На двух компиляторах проверил программу. Работает как задумано.

  9. Аватар Артур:

  10. Аватар Алена:

    Задача 2.

  11. Аватар Алена:

    Задача 1.

  12. Аватар макс:

    1. Аватар Shom:

      101

      Компьютер загадал трёхзначное число. Вы должны его отгадать. После очередного числа вам будет сообщено, сколько цифр угадано и сколько из них находятся на своих местах.

      введите число: 1
      ваш варииант 1
      на своих местах 2; угадано 3
      введите число: 0
      ваш варииант 0
      на своих местах 1; угадано 3
      введите число: 3
      ваш варииант 3
      на своих местах 1; угадано 2
      введите число: 2
      ваш варииант 2
      на своих местах 1; угадано 2
      введите число: 0
      ваш варииант 0
      на своих местах 1; угадано 3
      введите число: 10
      ваш варииант 10
      на своих местах 0; угадано 3
      введите число: 11
      ваш варииант 11
      на своих местах 1; угадано 3
      введите число: 101
      ваш варииант 101
      на своих местах 3; угадано 3

  13. Аватар Денис:

    Задание #1:

  14. Аватар Владимир:

    Задание №2

  15. Аватар Владимир:

    Задание №1

  16. Аватар Анастасия:

    Пример работы программы к третьему заданию — это пример работы плохой программы.
    Ваш вариант: 456
    Угадано: 1. На своих местах: 0
    Ваш вариант: 654
    Угадано: 2. На своих местах: 2
    Цифры те же, но в первом случае (456) угадана 1, а во втором (654) — 2. Плохой пример.

    1. Аватар Владимир:

      К кому предназначен комментарий?

      1. Аватар Анастасия:

        автору третьего задания, это из задания пример.

  17. Аватар Анастасия:

    Моё решение задания №3:

    1. Аватар Владимир:

      Ваш вариант: 111
      Угадано: 3. На своих местах: 2.
      Ваш вариант: 110
      Угадано: 3. На своих местах: 1.
      Ваш вариант: 101
      ***Вы угадали число 101! ***
      На числа 110 и 111, программа выдает результат: "Угадано: 3".

      1. Аватар Анастасия:

        Вы абсолютно правы, Вам попался хороший пример, который я не учла. В функции compareWithNumber вместо

        нужно сделать немного по=другому, чтобы учесть тот случай, когда цифра на своём месте уже была засчитана по совпадению с цифрой на другом месте:

  18. Аватар Анастасия:

    Моё решение задания №2 (решила сделать чуть сложнее):

    1. Discounts.h:

    2. Discount_Price.cpp:

  19. Аватар Анастасия:

    Моё решение задания №1:

  20. Аватар Владимир:

    // Задание №3

    1. Аватар Анастасия:

      Владимир, настал и Ваш звёздный час. Если про pow (кстати, комментарий к #include<cmath> пишет о row) и раскладывание с его помощью на цифры Вы придумали сами — большой респект! Ваш код мне понравился, хоть и традиционно не запустился на моём стареньком компиляторе. Но goto… это плохой знак, ещё лет 15 назад меня учили, что использовать его — дурной стиль. Я думаю, Вы вполне способны справляться и без него.

  21. Аватар Shom:

    Задание №3.

    Не совсем уверен что правильно понял как программа должна реагировать на числа с повторяющимися цифрами.

    1. Аватар Сергей:

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

      1. Аватар Shom:

        Ниже пример работы программы с загаданным числом 121. Программа себя ведёт как и было запланировано. А Вы считаете какие ответы она должна выводить?

        Ваш вариант: 1
        Угадано: 2. На своих местах: 1.
        Ваш вариант: 101
        Угадано: 2. На своих местах: 2.
        Ваш вариант: 10
        Угадано: 2. На своих местах: 0.
        Ваш вариант: 212
        Угадано: 3. На своих местах: 0.
        Ваш вариант: 12
        Угадано: 3. На своих местах: 0.
        Ваш вариант: 21
        Угадано: 3. На своих местах: 2.
        Ваш вариант: 233
        Угадано: 1. На своих местах: 0.
        Ваш вариант: 121
        Угадано: 3. На своих местах: 3.
        ***Вы угадали число 121!***

    2. Аватар Анастасия:

      1) В глаза бросается обилие магических чисел — 32767, 1000, 3, 100, 10, -1, -2. Используйте поясняющие смысл этих чисел константы.
      2) Как работает тип size_t из <cstdlib>?
      3) Раскладывая число на цифры, прописывая каждую цифру в ячейку массива, указывая её номер от 0 до 2 в main (!), это конечно, дичь. И потом практически то же вы делаете с числом от пользователя… Здесь тот самый случай, когда нужно всё это дело выносить в отдельную функцию, как минимум. Насчёт различать отсутствие разрядов разными отрицательными цифрами — идея неплоха, но можно ещё лучше, например, чтобы это каждый раз разное число генерировал или рассчитывал компьютер. Подумайте над этим или посмотрите, как это у меня ; )
      4) Само сравнение по цифрам и местам тоже можно было бы в отдельной функции разместить. Здесь это прям просится.
      5) Логика подсчёта совпадений — довольно топорная. И, конечно, если загаданное число, скажем 321, а пользователь вводит 111, то если программа покажет 3 совпадения — это будет неправильно. Недоработка
      6) "До новых встречь" — убило)) (здесь не должно быть мягкого знака)

      1. Аватар Shom:

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

        2) size_t — беззнаковое целое число, в <cstdlib> не входит, насколько мне известно.
        «std::size_t обычно используется для индексации массивов и счетчиков циклов. Программы, которые используют другие типы, например unsigned int, для индексации массивов, могут неправильно работать на, например, 64-битных системах, когда индекс превзойдет UINT_MAX или если он полагается на возможность переполнения 32-битного числа.»

        4) Возможно. Дело вкуса.

        5) Работа программы с загаданным числом 321:

        Ваш вариант: 111
        Угадано: 1. На своих местах: 1.
        Ваш вариант: 333
        Угадано: 1. На своих местах: 1.
        Ваш вариант: 222
        Угадано: 1. На своих местах: 1.
        Ваш вариант: 321
        Угадано: 3. На своих местах: 3.
        ***Вы угадали число 321!***

        6) : ь

        Задание №3. Корректировка №1.

  22. Аватар Shom:

    1. Аватар Анастасия:

      Поясните, пожалуйста,

      что делают и зачем нужны в этом коде?
      500, 1000, 3, 5 хотелось бы видеть в виде каких-либо констант

      1. Аватар Shom:

        Эти две строчки кода округляют расчитанную сумму до сотых.
        Верно, с константами выглядело бы лучше.

  23. Аватар Shom:

    Задание №1

    1. Аватар Анастасия:

      последняя формула ужасно написана:

      делим расстояние в км на 100? Зачем? Какой приоритет у умножения относительно деления, Вы помните? Я не помню. Как будет выполняться здесь расчёт: сначала поделится на 100, потом результат перемножается на всё остальное или расстояние делится на произведение всего, что идёт потом? делим на 100, потом умножаем на 100 и ещё раз делим на 100. Я не запускала код, но засомневалась, что он считает верно, формула реально очень запутывающая.

      1. Аватар Shom:

        У деления и умножения приоритет равный, то есть действия в скобках будут выполнятся последовательно слева на право.
        Сначала расстояние до дачи разделится на 100 (чтобы высчитать сколько сотен километров мы проехали, так как у нас расход бензина вводится на сотню км), затем полученное значение умножается на расход бензина автомобилем на сто км пробега, затем на цену бензина за литр. И всё это умножается на 2, так как считаем стоимость поездки туда и обратно. Далее полученное значение умножается на 100 — это нужно для округления высчитываемого числа до сотых. Потом число округляется функцией round() до целого и делиться на 100 чтобы получить наше конечное округлённое значение.
        И Вы правы: обе сотни в скобках можно сократить — я их там для наглядности оставил. )

  24. Аватар Михаил:

    удалите этот код, я его случайно отправил

  25. Юрий Юрий:

    Есть, пишите, сделаю.

  26. Аватар Михаил:

    3-е задание