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

  Юрий  | 

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

 42228

 ǀ   65 

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

Easy: Задание №1

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

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

Введите длину дистанции (м): 1000
Введите время (минут.секунд): 3.25
Вы бежали со скоростью 17.56 км/час

Medium: Задание №2


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

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

Введите количество суммируемых чисел: 12
Сума первых 12 целых положительных четных чисел равна 156

Hard: Задание №3

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

Азбука Морзе для букв русского алфавита:

Буква Код Буква Код Буква Код Буква Код
А ·− Б −··· В ·−− Г −−·
Д −·· Е · Ж ···− З −−··
И ·· Й ·−−− К −·− Л ·−··
М −− Н −· О −−− П ·−−·
Р ·−· С ··· Т У ··−
Ф ··−· Х ···· Ц −·−· Ч −−−·
Ш −−−− Щ −−·− Ъ ·−−·−· Ы −·−−
Ь −··− Э ··−·· Ю ··−− Я ·−·−

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

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

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

  1. Sergei:

    Третье задание:

  2. Andrew:

    Пришлось повозиться конечно, чтобы под линуксом избавиться от ошибки «character too large for enclosing character literal type»

  3. Sergei:

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

  4. Sergei:

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

  5. Андрей:

    я может чего то не понимаю но почему все как то сложно пишут 1 задачу?

    1. Богдан:

      У тебя код не правельный, перевода в минуты отсутствует. Вот так будет получше

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

    3 задание (для латинского алфавита)

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

    2 задание:

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

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

    Файл Morse.h

    файл Morse.cpp

    файл Timer.h (для пикалки)

    и файл main.cpp

    P.s. Использовал класс Timer для задержек что не особо умно. Лучшим решением было бы использовать прерывания по таймеру, но как их реализовать в классе и возможно ли это сделать без глобального цикла, пока не разобрался.

  9. Konstantin:

    Задачу №1 решил вот так

  10. Finchi:

    Задание 3:

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

  12. Lunka:

    #2 как-то так

  13. LordJollu:

    задача три слегка длиная полуичлось

  14. Vitalt1158:

    3 Задание, сделал для латинского алфавита

  15. Alexjazz:

    задание №1

  16. Alexjazz:

    задание №2

  17. Petr:

    Задание 3

  18. WAR:

    Задание №3:

  19. WAR:

    Задание №2:

  20. WAR:

    Задание №1:

  21. Сергей:

    Задание 2

  22. Максим:

    Задание №3

  23. Rock:

    Задание 1:

    Задание 2:

    Задание 3: Кейсовое безумие

  24. Данил:

    Наверно стоило сделать для прописных тоже, но в задании вроде как только заглавные…

  25. Slava:

    Quest #1

    Quest #2

  26. Grisha:

    Задача N2

  27. Максим:

  28. Макс:

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

      "дсиатнции", "secodn"… Такая коротенькая программка и такие опечатки! А что будет в больших программах? Не торопитесь!

  29. Алена:

    Задача 2.

  30. Алена:

    Задача 1.

  31. Владимир:

    Задание №2

  32. Владимир:

    Задание №1

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

    Моё решение задания №3.
    Мэппингами, toupper и wcin на момент написания не владела, поэтому сделала, как умею и всё работает.

    1. Владимир:

      В инициализации вектора, кажется, одна пара фигурных скобок лишние, выглядит как трехмерный. Заместо вектора можно сделать и через статический массив вида : const mappingAlphabetToMorze lettersCode[ ][2]{ { } }; без указания длины row, тогда можно добавлять и ё без изменений в остальном коде, но только тогда функция letterToMorze() будет, например, иметь вид:

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

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

        Дополнительную пару фигурных скобок я использую с тех пор, как в одном из предыдущих заданий этого практикума (про скидки) выяснилось, что если сделать вида {{},{},…}, то массив будет инициализироваться совсем не так, как предполагалось.

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

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

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

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

  36. Юлия:

    Задание №3

    1. Victor:

      Первое что бросается в глаза, не считая дизайна и названий:
      — передача строк по значению.. константная ссылка вполне бы подошла.
      — странно каждый раз в цикле создавать строку, странно, дорого, бесполезно. Можно создать её 1 раз и дальше только инициализировать.
      — 4 не явных преобразования со знакового в беззнаковое в цикле ф-и trans ( и что вообще за имя такое, транс.. ), и ещё 2 в num_simbol
      — cin.clear() там вообще нужен? Отлично отрабатывает без него.
      — почему 0 ? Обычно : (Y\N) … Эту проверку можно было выполнять в оглавлении цикла, иф там лишний.
      — abcL и abcS константами по моему стоило бы обьявить, как и morse , и многое другое, они нигде не изменяются точно, а захотелось поискать, где же они таки изменются, т.к они не константы, 2 строки, 1 для больших, вторая для маленьких … ну не знаю даже, решение на вкус и цвет….
      — возврат пустых, ретурнов с воид ф-й, и юз ноунейм констант
      — зачем возвращать строку котороую ввел пользователь через cout ? Без любой доп. инфы и прочего. Она вроде бы итак там остается, в таком виде, на той же позиции.
      — cout << num + 1 ; // это вот что и для чего? зачем пользователю позиция символа +1 на выводе? И зачем char символ напротив шифра…
      — выводить на каждый не валидный символ целую строку с ошибкой == кощунство ( на мой взгляд )
      — есть проблемы небольшие с кодировкой, и лучше по моему wchar тут юзать было.
      — да и вообще много не нужного и бесполезного
      — и прочее прочее

      Пока читал код, чуть чуть его подчистил, просто убрал лишнее, и немножко добавил имена/переименовал, на мой взгляд так прозрачнее реализация, получилось вот что:

      все ещё есть над чем поработать, но от этого уже по проще плясать.
      Пикалку убрал, так как у меня она например не работает, да и там всё итак понятно…

      1. Юлия:

        Благодарю за замечания. Учту. Такого бы мне учителя! (Я самоучка).
        Только о дизайне не поняла 🙁

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

      1) Не слишком ли жирно для подключения кириллицы делать вот это всё сразу:

      Достаточно (если нужен ввод-вывод, как у Вас):

      2) string morse [33]= лучше было бы сделать константой, причём статической, чтобы не создавать каждый раз при вызове это функции.

      3) symbol вместо simbol было бы корректнее. А в целом мне понравилась Ваша реализация поиска номера буквы по двум константным массивам. Но только они у Вас опять же не константные. И число 100 лучше бы было тоже сделать константой с говорящим именем.

      4) Поддержу предыдущего оратора почти во всех остальных пунктах, особенно по поводу передачи строк в функции по ссылке и по поводу Вашего, гхм… нестандартного подхода к выводу итоговых значений с номерами букв алфавита и развёрнутыми ругательствами на незнакомый символ

      1. Юлия:

        Анастасия, спасибо за замечания. Виктор очень толково все объяснил

  37. Владимир:

    Задание №3

    1. Victor:

      ошибка: character too large for enclosing character literal type … И это одна из многих лишь. Вообщем я это у себя вылечил, но ….
      Но это не самое страшное что там есть.
      Винегрет из условных операторов, бесполезный динамический массив, копирование, динамическое формирование при каждом запуске абсолютно статического содержимого…. и прочее прочее прочее… Даже разбирать подробнее не охота.

      1. Владимир:

        Виктор, у меня стоит OS Windows и компилятор VS-2019 и все прекрасно компилируется, может у Вас другая ось или среда разработки, поэтому возникают ошибки, у меня так-же многое из выполненных заданий другими участниками не запускается. По поводу динам. массива, я тоже хотел писать на стат. массиве но компилятор ругается, точно не помню, но что-то вроде — значение длины стат. массива должна быть const величина, — а наша длина зависит от пользовательского ввода. Почему "винегрет"? Ставил себе цель автоматизировать процесс, чтобы можно было просто скопировать таблицу в прогу (не переписывая ее), а она сама разбирала где знаки и буквы, где пробелы и сколько их

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

      1) Идея реализации кодировки через двумерный массив char (&morse)[32][6] мне представляется не самой удачной. Очень много места в этом массиве пропадёт зря. и 6 — это такое себе предельное значение, не очень гибкое к тому же.

      2) char table[] = "А ·- … — массив — не константный это раз. А второе что кодируемые символы и коды там идут вперемешку, что как-то не очень чисто. Поэтому и название этого, по сути, кодирующего, массива тоже какое-то не очень, table. А, я поняла, что Ваша идея состояла в автоматическом разделении таблицы на два массива — буквы и символы. Ок, имеет место быть, но всё равно таблицу лучше сделать константной.

      3) void outputABC(char* letter, char(&morse)[32][6], std::string &str, char* array) — плохое название для функции, из которого не ясен смысл её назначения. Первые два массива в параметрах не предполагаются к изменению, поэтому должны быть объявлены как константные. Смысл строк str и array в параметрах из их названий тоже не очевиден.

      4) int flag(0); // флаг комментарий просто шедеврален, он просто копирует название переменной, не внося никаких пояснений. А для чего этот флаг? Я так поняла, что он показывает наличие пробела между словами, так как он обнуляется для каждого очередного символа, больше 1 он не становится. Так почему бы не сделать его типа bool вместо "дорогого" int? А нет, он смотрит пробелы в другом массиве с говорящим названием array.

      5) Что это за массив array? Пояснений выше не было. Находим пояснение ниже, в main:
      char* array = new char[str.length() + 1]; // динамический массив для вводимого текста
      туда просто копируется наша строка от пользователя. в Вышеупомянутой функции этот массив никак не заполняется, только смотрятся пробелы в нём. Вопрос: зачем он нужен? И если он — динамически выделенная копия str, то зачем передавать в функцию и то, и то? И, раз обе эти строки в функции не изменяются, то почему опять же не обозначить их константами?
      Все эти вопросы не позволяют мне составить полную картину результата работы Вашей программы.

    3. Владимир:

      Задание №3
      решил переделать

  38. Shom:

    Задание №3.

  39. Shom:

    Задание №2.

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

      Почему в

      не переписать, как оно должно быть в классическом виде:

      ? А если заметить, что чётные числа отличаются между собой на 2, так и вовсе можно сократить число итераций в два раза.

      1. Shom:

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

        требуется заменить на

  40. Shom:

    Задание №1

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

      В вашем коде расстояние и время могут быть введены как отрицательные.
      int seconds{static_cast<int>(timeRun)}; — больше похоже на определение минут, чем секунд

      1. Shom:

        Вы всё верно подметили.

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

  41. Максим:

    Задание номер два с помощью рекурсии.

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

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

  42. Илья:

    Задание №3:

    1. Максон-патиссон:

      Можно самому написать функцию, чтобы переводила из upper в lower. По таблице ASCII посмотреть индексы и все…

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

      Мне Ваш код понравился. Ставлю "лайк" за простоту и прозрачность)

  43. Илья:

    Задание №2:

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

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

  44. Илья:

    Задание №1:

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

      Вы не проверяете ввод пользователя на корректность (он может ввести отрицательные числа или буквы).

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

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