Здесь размещены задания по С++, которые вы можете выполнить. Каждое задание имеет свой уровень сложности. Готовых ответов не будет, поэтому welcome в комментарии!
Easy: Задание №1
Напишите программу, вычисляющую скорость, с которой бегун пробежал дистанцию.
Пример результата выполнения программы:
Введите длину дистанции (м): 1000
Введите время (минут.секунд): 3.25
Вы бежали со скоростью 17.56 км/час
Medium: Задание №2
Напишите программу, которая вычисляет сумму первых n
целых положительных четных чисел. Количество суммируемых чисел вводит пользователь.
Пример результата выполнения программы:
Введите количество суммируемых чисел: 12
Сума первых 12 целых положительных четных чисел равна 156
Hard: Задание №3
Напишите программу-телеграф, которая принимает от пользователя сообщение и выводит его на экран в виде последовательности точек и тире. Вывод точек и тире можно сопровождать звуковым сигналом соответствующей длительности.
Азбука Морзе для букв русского алфавита:
Буква | Код | Буква | Код | Буква | Код | Буква | Код |
А | ·− | Б | −··· | В | ·−− | Г | −−· |
Д | −·· | Е | · | Ж | ···− | З | −−·· |
И | ·· | Й | ·−−− | К | −·− | Л | ·−·· |
М | −− | Н | −· | О | −−− | П | ·−−· |
Р | ·−· | С | ··· | Т | − | У | ··− |
Ф | ··−· | Х | ···· | Ц | −·−· | Ч | −−−· |
Ш | −−−− | Щ | −−·− | Ъ | ·−−·−· | Ы | −·−− |
Ь | −··− | Э | ··−·· | Ю | ··−− | Я | ·−·− |
Третье задание:
Пришлось повозиться конечно, чтобы под линуксом избавиться от ошибки «character too large for enclosing character literal type»
Второе задание:
Первое задание.
я может чего то не понимаю но почему все как то сложно пишут 1 задачу?
У тебя код не правельный, перевода в минуты отсутствует. Вот так будет получше
3 задание (для латинского алфавита)
2 задание:
Интересная получилась третья задача. Отчасти из-за того что я первый раз сам придумал как применить класс к задаче, что б это было уместно. Оставлю свой код здесь так как вижу никто еще не решал здесь эту задачу через классы.
Файл Morse.h
файл Morse.cpp
файл Timer.h (для пикалки)
и файл main.cpp
P.s. Использовал класс Timer для задержек что не особо умно. Лучшим решением было бы использовать прерывания по таймеру, но как их реализовать в классе и возможно ли это сделать без глобального цикла, пока не разобрался.
Задачу №1 решил вот так
Задание 3:
#2 как-то так
задача три слегка длиная полуичлось
3 Задание, сделал для латинского алфавита
задание №1
задание №2
Задание 3
Задание №3:
Задание №2:
Задание №1:
Задание 2
Задание №3
Задание 1:
Задание 2:
Задание 3: Кейсовое безумие
Наверно стоило сделать для прописных тоже, но в задании вроде как только заглавные…
Quest #1
Quest #2
Задача N2
"дсиатнции", "secodn"… Такая коротенькая программка и такие опечатки! А что будет в больших программах? Не торопитесь!
Задача 2.
Задача 1.
Задание №2
Задание №1
Моё решение задания №3.
Мэппингами, toupper и wcin на момент написания не владела, поэтому сделала, как умею и всё работает.
В инициализации вектора, кажется, одна пара фигурных скобок лишние, выглядит как трехмерный. Заместо вектора можно сделать и через статический массив вида : const mappingAlphabetToMorze lettersCode[ ][2]{ { } }; без указания длины row, тогда можно добавлять и ё без изменений в остальном коде, но только тогда функция letterToMorze() будет, например, иметь вид:
А вообще, реализация задания мне очень понравилась, работать с вектором через структуру с разным типом элементов, оригинально получилось.
Дополнительную пару фигурных скобок я использую с тех пор, как в одном из предыдущих заданий этого практикума (про скидки) выяснилось, что если сделать вида {{},{},…}, то массив будет инициализироваться совсем не так, как предполагалось.
Моё решение задания №2:
Моё решение задания №1:
Задание №3
Первое что бросается в глаза, не считая дизайна и названий:
— передача строк по значению.. константная ссылка вполне бы подошла.
— странно каждый раз в цикле создавать строку, странно, дорого, бесполезно. Можно создать её 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) string morse [33]= лучше было бы сделать константой, причём статической, чтобы не создавать каждый раз при вызове это функции.
3) symbol вместо simbol было бы корректнее. А в целом мне понравилась Ваша реализация поиска номера буквы по двум константным массивам. Но только они у Вас опять же не константные. И число 100 лучше бы было тоже сделать константой с говорящим именем.
4) Поддержу предыдущего оратора почти во всех остальных пунктах, особенно по поводу передачи строк в функции по ссылке и по поводу Вашего, гхм… нестандартного подхода к выводу итоговых значений с номерами букв алфавита и развёрнутыми ругательствами на незнакомый символ
Анастасия, спасибо за замечания. Виктор очень толково все объяснил
Задание №3
ошибка: character too large for enclosing character literal type … И это одна из многих лишь. Вообщем я это у себя вылечил, но ….
Но это не самое страшное что там есть.
Винегрет из условных операторов, бесполезный динамический массив, копирование, динамическое формирование при каждом запуске абсолютно статического содержимого…. и прочее прочее прочее… Даже разбирать подробнее не охота.
Виктор, у меня стоит OS Windows и компилятор VS-2019 и все прекрасно компилируется, может у Вас другая ось или среда разработки, поэтому возникают ошибки, у меня так-же многое из выполненных заданий другими участниками не запускается. По поводу динам. массива, я тоже хотел писать на стат. массиве но компилятор ругается, точно не помню, но что-то вроде — значение длины стат. массива должна быть const величина, — а наша длина зависит от пользовательского ввода. Почему "винегрет"? Ставил себе цель автоматизировать процесс, чтобы можно было просто скопировать таблицу в прогу (не переписывая ее), а она сама разбирала где знаки и буквы, где пробелы и сколько их
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.
Задание №2.
Почему в
не переписать, как оно должно быть в классическом виде:
? А если заметить, что чётные числа отличаются между собой на 2, так и вовсе можно сократить число итераций в два раза.
Если переписать цикл как Вы предложили, то сложится только, примерно, половина положительных целых чётных чисел от количества запрошенного пользователем.
Со вторым утверждением полностью согласен: строчку
требуется заменить на
Задание №1
В вашем коде расстояние и время могут быть введены как отрицательные.
int seconds{static_cast<int>(timeRun)}; — больше похоже на определение минут, чем секунд
Вы всё верно подметили.
выделяет минуты из введённой пользователем дроби, а в следующей строчке вся эта дробь преобразуется в секунды.
Задание номер два с помощью рекурсии.
Весьма оригинально. Было бы совсем хорошо, если бы Вы как-то дали понять пользователю, что он должен ввести и проверили бы его ввод на то, положительное целое число ли это.
Задание №3:
Можно самому написать функцию, чтобы переводила из upper в lower. По таблице ASCII посмотреть индексы и все…
Мне Ваш код понравился. Ставлю "лайк" за простоту и прозрачность)
Задание №2:
Вы молодец, что вспомнили формулу арифметической прогрессии, но можно было ещё дальше преобразовать её в более простую
Задание №1:
Вы не проверяете ввод пользователя на корректность (он может ввести отрицательные числа или буквы).