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

  Юрий  | 

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

 37419

 ǀ   55 

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

Easy: Задание №1

Напишите программу пересчета расстояния из верст в километры (1 верста = 1.0668 км).

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

Введите расстояние в верстах: 100
100 верст = 106.68 км

Medium: Задание №2


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

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

Введите количество чисел последовательности: 5
Введите последовательность: 5.4 7.8 3.0 1.5 2.3
Среднее арифметическое: 4.00
Минимальное число: 1.5
Максимальное число: 7.8

Hard: Задание №3

Напишите программу, которая объединяет два упорядоченных по возрастанию массива в один (тоже упорядоченный) массив.

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

Введите элементы первого массива: 1 3 5 7 9
Введите элементы второго массива: 2 4 6 8 10
Массив-результат: 1 2 3 4 5 6 7 8 9 10


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

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

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

  1. Sergei:

    Задание 3.

    Массивы (любой длины) из целых чисел  вводит пользователь.

  2. Sergei:

    Задание № 2:

  3. Maslo Kevi:

    2 задание

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

    3 задание было интересным, над ним поколдовать пришлось. Вот мое решение:

  5. Филипп:

    Задание №2.

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

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

      После добавления кода в комментарий, в 4 и 5 строках кода снизу, там где "- 1", произошла автозамена "минуса" на "тире" и компилятор в этих местах выдает ошибку. Нужно изменить "тире" на "минус".

  7. Finchi:

    Задача №2 для С++ 20:

    Задача №3 для С++ 20:

  8. SirAyane:

    3)
    sort или multiset слишком тривиально.

  9. Lunka:

    №3

  10. LordJollu:

    задача 3:

  11. Олег:

    3)

  12. WAR:

    Задание №3:

  13. WAR:

    Задание №2:

  14. Валентин:

    Задание 2 (знаю, многое не учтено, да и очень "просто")

  15. Rock:

    Задание 1:

    Задание 2:

    Задание 3:

  16. Slava:

    Quest #1

  17. Павел:

    Если размер массива фиксирован, то 3 задача простая. Также хочу обратиться к знающим: можно ли как-то реализовать ввод любого кол-ва чисел и запись их в массив без конвертации из string? Запоминать постоянно меняющееся значение переменной может стек, но как реализовать остальное я не знаю.

    Сам код:

    1. Shom:

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

  18. Денис:

    Задание №1 — Решение в "стиле Си"

    1. Денис:

      Поправка — решение Задания 3

  19. pleb:

    простое решение 3-го задания, правда без проверки на то, что массивы упорядочены

  20. Марат:

    Решение третьего задания. По моему скромному мнению, очень простое решение.

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

    Задача 3

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

    Задание 2.

  23. Алена:

    Задача 2.

  24. Алена:

    Задача 1.

  25. Владимир:

    Задание №2

  26. Владимир:

    Задание №1

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

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

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

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

    1. Владимир:

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

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

        У меня предусмотрен ввод отрицательных чисел в том числе, тип ведь double. А насчёт того чтобы через пробел вводились, я решила упростить пользователю задачу и проверить за него, не дав возможность ввести лишнего.

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

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

  30. Владимир:

    Задание №3

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

      1) В первой функции параметр int*& array — это как? Массивы рекомендуется передавать по адресу. Второй параметр std::string str нужно передавать по ссылке.

      2) int number[10]{}; // будет содержать числа (0 — 9) по порядку.Во-первых, почему бы Вам тогда не сделать его константным и не инициализировать сразу как = {0, 1, … , 9}? А во вторых, для использования массивов фиксированной длины есть уже готовый стандартный std::array. В-третьих же, "однозначные числа" имеют официальное название "цифры".

      3) int j(0); // индекс элементов массива arr[] — а массива arr выше нет, только array. И название для индекса не очень говорящее.

      4) while (1 * str.at(i) != 32) — 32 лучше было бы сделать константой с понятным названием. И зачем здесь умножение на 1? Чтобы неявно привести к целочисленному типу? Так явное приведение через static_cast было бы понятней.

      5) Ну, Владимир…
      int y(0); — что это за переменная? Вы, наверное, и сами уже не помните. Потому что назвали как попало.
      for (int k = 0; k < 10; ++k)
      — а ведь выше у нас была такая переменная
      char k = 48; // соответствует символу '0'
      Совпадение? Кстати, почему эту k Вы не сделали константой и не назвали, например, zero_symbol? И я вообще не нашла, где Вы её использовали…

      6) Смысл функции примерно прояснился — получаем строку, переводим символы в цифры и заполняем массив числами. Но это не точно) В main же у Вас немного хаос, к примеру, зачем Вы вручную создаёте динамический массив, когда есть вектор? Почему не сделали сортировку массива в отдельной функции, и вывод итога — ещё одной. Это повысило бы читаемость и структурированность кода.

      7) И вообще, почему Вы решили сделать реализацию этой программы через строки? Ведь можно было бы просто просить пользователя вводить числа и проверять ввод на корректность. Хотя и Ваша реализация тоже имеет место быть.

      8) Упорядоченность по возрастанию исходных массивов (в Вашем случае — строк) тоже никак не проверяется. Хотя это можно считать одним из условий этой задачи…

  31. Shom:

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

      Здесь я удивилась, встретив stoi(), никогда раньше его не встречала, а это, оказывается, весьма полезная вещь.
      И поначалу меня смутила пляска с iii и jjj в функции combine, но потом я оценила её прелесть. Не понравилось только, что два else if под одним if и их код идут со всё большим отступом от if и его кода, а ведь это по сути три равноправных альтернативы, я бы сделала их на одном уровне. Но это дело вкуса.

      1. Shom:

        По-моему, в C++ можно найти уже готовую библиотечную функцию почти под любую задачу)). С combine() долго пришлось возиться — два листа бумаги исписал прежде чем она нормально заработала, так как пришлось учитывать возможность совпадения чисел в массивах и разную длину массивов. Сейчас свежим взглядом посмотрел на "лестницу" if else if и она мне тоже не понравилась.

        1. Марат:

          Ваша реализация не работает с отрицательными числами. Если интересно, как их включить, можете взглянуть на мою реализацию!

    2. Shom:

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

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

  32. Shom:

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

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

      А в остальном мне понравилась Ваша идея проверять ввод с шаблоном.

      1. Shom:

        Здесь в уроках рекомендовалось без крайней необходимости unsigned не использовать. Меня очень порадовало, что мой код Вам понравился))

  33. Shom:

    Задание №1

  34. Илья:

    Задание №3.2
    Первая версия проще понятнее и быстрее,но я всё же решил поломать себе мозги и придумал такой код:

    1. Илья:

      Вся суть в этой функции, которая принимает два ОТСОРТИРОВАННЫХ вектора, и лепит их в один ОТСОРТИРОВАННЫЙ вектор

      Хотя мне кажется что лучше использовать первую версию:
      а)она универсальная(там можно использовать и НЕотсортированный вектора)
      б)она проще и быстрее
      в)мне просто хотелось сделать данное задание как-то по-другому, поэтому я и придумал данный костыль:

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

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

  35. Илья:

    Задание №3.1

    1. Илья:

      Задание №3.1.1(небольшое улучшение)

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

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

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

        И в целом это странно:

        — в синтаксисе вектора нет его длины. Что Вы делаете, записываете длину как единственный элемент вектора?

        — вектор у нас длины 1, так как там только один элемент, его длина. Так? Тогда здесь мы заполним только один элемент. Гм… Или что, блин, здесь происходит? почему не i < len1 ?

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

          Я разобралась, что такой синтаксис для задания длины вектора уместен. Но всё равно это как-то не очень хорошо выглядит, ведь это же вектор, у него динамическая длина…

  36. Илья:

    Задание №2:

  37. Илья:

    Задание №1:

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

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