Практика. Часть №2

  Юрий  | 

  Обновл. 6 Сен 2019  | 

 2485

 ǀ   36 

Здесь размещены задания по С++, которые вы можете выполнить. Каждое задание имеет свой уровень сложности, готовых ответов не будет, поэтому 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 (11 оценок, среднее: 4,64 из 5)
Загрузка...

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

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

    Задание №2

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

    Задание №1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    1. Discounts.h:

    2. Discount_Price.cpp:

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

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

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

    // Задание №3

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

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

  8. Аватар Shom:

    Задание №3.

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

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

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

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

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

  9. Аватар Shom:

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

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

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

  10. Аватар Shom:

    Задание №1

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

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

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

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

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

  12. Юрий Юрий:

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

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

    3-е задание

    1. Аватар Димас:

      Не совсем корректно работает. Если num=455 и ввести 444 он выдаст что три правильно, хотя по факту одно.

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

      1) В задании написано: "Компьютер загадывает число от 0 до 999", Вы решили упростить задачу, сделав минимум 100?
      2) гениальное название переменной для числа от пользователя kkk, что Вы хотели этим сказать?
      3) if ((kkk<99)||(kkk>1000)) — должно быть if ((kkk<=99)||(kkk>=1000)), иначе Вы разрешаете вводить 99 и 1000, а к чему это приведёт?

      вот здесь уже будет не то, что Вы ожидали
      4)

      а где здесь мы даём возможность ввести число ещё раз? Нигде. Только пишем, чтобы пробовал.
      5)

      чтобы условие было true, здесь достаточно чтобы хоть одно из условий было true, что уже противоречит смыслы заключения. Но т.к. выше Вы уже и так проверили, что ни одного совпадения нет, то этот if просто лишний.
      6) Извините, но читать дальше такие выражения просто нет желания:

      Общий вывод таков: Вы описали чересчур прямолинейную логику работы программы, стараясь учесть всё, но не учли. Если такой бедлам возник при работе с 3 цифрами, что будет с 6ю, 10ю?.. Нужно использовать циклы, обобщая условия, упрощать жизнь себе и другим, ведь читать и проверять их гораздо проще чем такие нагромождения условий.

  14. Аватар Илья:

    Задание №3:

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

      1) Названия для переменных у Вас понятные. Это плюс. Но не слишком ли их много?

      вот здесь я бы уже задумалась, не сделать ли это массивом (одним двумерным, двумя массивами или одним массивом — как больше нравится?)
      Соответственно весь ряд условий и перепроверок ниже порождается тем, что каждая из переменных у Вас прописывается вручную, а не как элемент массива. Если бы это был массив/массивы было бы гораздо проще запихнуть это всё в один цикл или два цикла, проверяя всё необходимое.

      2) Так как числа могут быть от 0, для однозначных и двузначных чисел мы получим нули в записи сотен и десятков, хотя по факту число может выглядеть как 7. Если пользователь при этом введёт 101, мы получим совпадение одной или сразу двух цифер (как так у Вас дальше, я не читала), что не верно. Или наоборот, число 100, пользователь вводит 5 и опять совпало сразу две цифры. Это плохо.

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

    Второе задание

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

      — но Вы не даёте такой возможности!
      Все используемые в коде числа хотелось бы видеть в качестве констант с понятными названиями

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

    Первое задание

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

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

  17. Аватар Илья:

    Задание №2:

  18. Аватар Илья:

    Задание №1:

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

      для расстояния и расхода бензина из запроса пользователю не ясны ожидаемые единицы измерения. Он же может и в попугаях измерять.

  19. Аватар Ilya:

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

      после вот такого:

      хочется сделать рука-лицо и закрыть этот код.

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

        а после этого:

        ты просто рефлекторно закрываешь этот код, чтобы не засорять мозг , пытаясь отгадать, что человек хотел этим сказать?

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

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

telegram канал
НОВОСТИ RAVESLI