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

  Юрий  | 

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

 2556

 ǀ   27 

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

Easy: Задание №1

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

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

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

Medium: Задание №2


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

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

Введите количество чисел последовательности: 5
Введите последовательность: 5.4 7.8 3.0 1.5 2.3
Количество чисел: 5
Среднее арифметическое: 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 (7 оценок, среднее: 5,00 из 5)
Загрузка...

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

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

    Задача 1.

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

    Задание №2

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

    Задание №1

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

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

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

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

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

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

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

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

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

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

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

    Задание №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) Упорядоченность по возрастанию исходных массивов (в Вашем случае — строк) тоже никак не проверяется. Хотя это можно считать одним из условий этой задачи…

  8. Аватар Shom:

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

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

      1. Аватар Shom:

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

  9. Аватар Shom:

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

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

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

      1. Аватар Shom:

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

  10. Аватар Shom:

    Задание №1

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

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

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

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

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

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

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

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

    Задание №3.1

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

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

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

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

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

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

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

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

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

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

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

    Задание №2:

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

    Задание №1:

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

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