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

  Юрий  | 

  Обновл. 16 Сен 2021  | 

 24566

 ǀ   42 

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

Easy: Задание №1

Напишите программу, которая вычисляет стоимость яблок.

Пример результата выполнения программы:

Цена за 1 кг яблок: 8.5 руб.
Вес яблок: 2.3 кг
Стоимость покупки: 19.55 руб.

Medium: Задание №2


В заданном пользователем целочисленном массиве удалите элементы, которые встречаются более двух раз.

Hard: Задание №3

В поезде 18 вагонов, в каждом из которых 36 мест. Информация о проданных на поезд билетах хранится в двумерном массиве, номера строк которого соответствуют номерам вагонов, а номера столбцов — номерам мест. Если билет на то или иное место продан, то соответствующий элемент массива имеет значение 1, в противном случае — 0. Напишите программу, определяющую число свободных мест в любом из вагонов поезда.


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

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

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

  1. Юрий:

    Задание 1.

  2. Елизавета:

    У всех такое сложное решение задачи №3… А я решила ее просто

  3. Александр:

    Задание 3

  4. Finchi:

    Задание №3

  5. WAR:

    Задание №1:

  6. WAR:

    Задание №2:

  7. Rock:

    Задание 1:

    Задание 2:

    Задание 3:

    1. WAR:

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

  8. Kir:

  9. Kir:

  10. Анастасия:

    Автору: нужен пример выполнения программы для второго задания. Потому что, как выяснилось, только я поняла это задание так, что нужно удалить все элементы, которые встречались больше двух раз. Пример работы моей программы:
    Программа удаляет числа, встречающиеся больше двух раз.
    Введите массив целых чисел через пробел, прочие знаки будут проигнорированы.
    Для окончания ввода нажмите enter: 5 98 43 5 87 5 4 5 98 98 5
    Получен массив: 5 98 43 5 87 5 4 5 98 98 5
    Результат обработки: 43 87 4

  11. Анастасия:

    Моё решение задания №3 (я испугалась, когда подумала, что придётся передавать двумерный массив с помощью указателя, но обошлось, передавала только одну строку):

  12. Анастасия:

    Моё решение задания №2 (получилось длинно, хотя я очень старалась не делать лишнего, позже посмотрю, как решили другие, даже интересно) :

  13. Анастасия:

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

  14. RockNRullz:

    Задание №3:

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

      Во-первых, задание было несколько другое.
      Во-вторых, я не знала, что двумерный массив можно передавать как bool (&arr)[18][36]. Но это ведь просто передача по ссылке, чтобы не копировать, так?
      В третьих, 18 и 36 очень просится завести как константы или по крайней мере передавать их как параметры, а то они повторяются в функциях и main как магические числа. Особенно жаль, что они же указываются при передаче массива в функцию, и они же используются в функции в отрыве от передачи.

  15. Shom:

    Задание №3.

  16. Shom:

    Задание №2.

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

      У меня тоже была мысль делать новый массив, но я подумала, что это будет не совсем честно, ведь по заданию нужно удалить из массива, а не сделать другой массив.
      И, получается, Вы тоже удаляете только лишние дубли, а не все элементы с повторами. То есть, если, например, есть массив:
      n***nn***n, то удалятся только первые два n. Причём, сначала Вы будете считать количество повторов для первого n, удалите его, потом для второго n и т.д. Хотя уже после первого подсчёта можно было бы "пометить" и остальные n, чтобы для них не пересчитывать отдельно. Понимаете, о чём я?
      На самом деле меня больше всего расстроило то, что только я поняла это задание так, что нужно удалить все такие элементы (n) из массива. Очень надеялась, что и Вы поняли так же, но не случилось)

      1. Shom:

        Как я понимаю, массивом в данном задании является набор чисел, этот набор в очищенном виде я сохраняю, просто в другом контейнере. Это во-первых. Во вторых: std::vector, при удалении из него элемента — просто перезаписывыется в другой более короткий динамический выделенный массив, после чего ему присваивается имя перезаписываемого массива с последующим удалением из памяти последнего. Так что, так или иначе, но возвращать придётся другой контейнер с данными или изменять значения дубликатов на специальные выражения.
        Если после первого подсчёта пометить остальные n, то при следующих подсчётах придётся проверять помечены эти n или нет — так что избежать операции сравнения в обоих случаях не удастся.
        И последнее, результат работы моей программы с вашим массивом:

        Ваш массив:
        5, 98, 43, 5, 87, 5, 4, 5, 98, 98, 5,

        Массив после очиски:
        43, 87, 4,

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

          Попыталась запустить у себя, чтобы проверить, потому что по коду я не понимаю, как выходит, что удаляются все повторяющиеся, а не кроме последних двух.
          Так вот, у меня не запустилось, т.к. компилятор не понимает std::getline, поэтому я добавила #include <string>. Так вот, тогда массив ввести не получается, программа просит завершить ввод пробелом, пробелов хоть десяток, она не завершает ввод. Если нажать enter, то только после второго пишет, что ошибка ввода.
          Но я поняла, как получается, что у Вас удаляются все. Вы ведь сначала всё считаете, помечаете дубли >2, а потом уже удаляете. Сначала неправильно поняла.

      2. Shom:

        Компиляторы, видимо, разные, но это не главное. А главное — Вы теперь не одна, кто так понял это задание и, значит, больше нет причин расстраиваться)

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

          =)

  17. Shom:

    Задание №1

  18. Kris:

    Приложу свое решение, оно не такое красивое внешне, но работает за O(n log n) времени и O(n) памяти.

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

      Кровь из глаз. Даже по функции и названиям переменных не догадаться, какую задачу Вы решали. Я предполагаю, что вторую. Но на расшифровку такого кода не хочется тратить время.

      1. Kris:

        Не велика потеря

  19. Владимир:

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

      Странно, но и Вы поняли задание также, как Алёна.
      Но вот здесь есть ловушка:

      почему Вы удаляете элемент j-1, ведь дубль найден на элементе j? Я в своём решении отказалась от for с инкрементом, так как после удаления элемента нужно было продолжать сравнение с того же индекса. А как у Вас будет работать, даже не знаю.

  20. Владимир:

  21. Алена:

    Задача 2.

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

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

  22. Алена:

    Задача 1.

  23. Илья:

    Задание 3:

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

      И всё-таки хромает у Вас диалог с пользователем:

      То есть что должен ввести пользователь? Номер места, предполагая, что номера идут от первого до последнего вагона по возрастающей? Да ещё и имя такое переменной дали — "userNumber", а что за намбэр — вопрос…
      А не проще было просто попросить его ввести номер вагона, как в задании…

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

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

  24. Илья:

    Задание 1:

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

      Илья, большой прогресс, что Вы начали общаться с пользователем. Но введённые данные опять не проверяете.

  25. Игорь:

    3-е Задание

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

      Почему массив называется studentMas? Причём здесь студенты?
      Потом, в main Вы первой строкой объявляете переменную с "говорящим" названием n, а используете её только через несколько строк.
      Странно выглядит и Ваш способ передачи массива в функцию — int mas[][MEST], int col, почему бы тогда не сразу int mas[col][MEST]?
      Не проверяете ввод пользователя на другие провалы, а ведь это просто…

  26. Пётр:

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

      Почему цена ха 1 кг — "ppo?" Не хватает проверки корректности ввода.

Добавить комментарий для Анастасия Отменить ответ

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