Code Monkey home page Code Monkey logo

cpp-skillbox-study's Introduction

CPP-Study

Задачи курса "Профессия Разработчик на C++ с нуля" (SkillBox)

1. Вводный модуль. Первая программа

2. Целочисленные переменные. Данные и вычисления

Задание 1. Улучшаем гонщика

Исправьте код программы так, чтобы значение скорости рассчитывалось автоматически. Скорость — это сумма показателей двигателя, колёс и руля минус показатели дождя и ветра.

 #include <iostream>

 int main() {
    int lap = 4;
    int speed = 358;
    int engine = 254;
    int wheels = 93; 
    int steerinWheel = 49; 
    int wind = 21; 
    int rain = 17; 
    std::cout << "===================\n"; 
    std::cout << "Супер гонки. Круг " << lap << "\n"; 
    std::cout << "===================\n"; 
    std::cout << "Шумахер (" << speed << ")\n"; 
    std::cout << "===================\n"; 
    std::cout << "Водитель: Шумахер\n"; 
    std::cout << "Скорость: " << speed << "\n"; 
    std::cout << "-------------------\n"; 
    std::cout << "Оснащение\n"; 
    std::cout << "Двигатель: +" << engine << "\n"; 
    std::cout << "Колеса: +" << wheels << "\n"; 
    std::cout << "Руль: +" << steerinWheel << "\n"; 
    std::cout << "-------------------\n"; 
    std::cout << "Действия плохой погоды\n"; 
    std::cout << "Ветер: -" << wind << "\n"; 
    std::cout << "Дождь: -" << rain << "\n"; 
 }

Задание 2. Калькулятор стоимости товара

Напишите калькулятор для расчёта полной стоимости товара. Она рассчитывается так: стоимость товара + стоимость доставки – скидка. Все значения сохраните в переменные и выводите в нужных местах, имитируя ввод данных (речь про cout).

Задание 3. Время, время!

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

Пример работы программы: Эта программа рассчитает, сколько клиентов успеет обслужить кассир за смену.

Введите длительность смены в минутах: 480 
Сколько минут клиент делает заказ? 2 
Сколько минут кассир собирает заказ? 4 
-----Считаем----- 
За смену длиной 480 минут кассир успеет обслужить 80 клиентов.

Задание 4. Непонятная квитанция

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

Пример работы программы:

Приветствуем вас в калькуляторе квартплаты!  
Введите сумму, указанную в квитанции: 4000000 
Сколько подъездов в вашем доме? 10 
Сколько квартир в каждом подъезде? 40 
----Считаем----- 
Каждая квартира должна платить по 10 000 руб.

Что оценивается Программы запускаются и корректно работают, нет синтаксических ошибок. Правильно проводятся расчёты. Числа выводятся переменными, а не текстом. Переменные названы в соответствии со стилем именования переменных в C++. Имена переменных корректные, отражают суть хранимых данных, удобочитаемые. Выполнено три (или более) задания.

3. Ввод данных пользователя. Строки

Что входит в практическую работу

Обязательные задачи: Симулятор маршрутки. Обмен местами. Злостные вредители. Дополнительная задача: Повышаем градус сложности*.

Задача 1. Симулятор маршрутки

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

Прибываем на остановку «Улица программистов». В салоне пассажиров: 0
Сколько пассажиров вышло на остановке? 0
Сколько пассажиров зашло на остановке? 3
Отправляемся с остановки «Улица программистов». В салоне пассажиров: 3
-----------Едем---------
Прибываем на остановку «Проспект алгоритмов». В салоне пассажиров: 3
…
…

Маршрут состоит из четырёх остановок. Напишите программу так, чтобы в конце она выводила, сколько денег мы заработали при условии, что билет стоит 20 руб., а расходы следующие: четверть — на зарплату водителю; пятая часть — на топливо; пятая часть — на налоги; пятая часть — на ремонт машины. Формат вывода (после прибытия на последнюю остановку):

Всего заработали: 100 руб.
Зарплата водителя: 25 руб.
Расходы на топливо: 20 руб.
Налоги: 20 руб.
Расходы на ремонт машины: 20 руб.
Итого доход: 15 руб.

Рекомендации по выполнению

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

Что оценивается

Правильность подсчёта текущего количества пассажиров.
Правильность подсчёта доходов и расходов.
Отсутствие лишних переменных.

Задача 2. Обмен местами

Есть код программы с двумя переменными типа int и выводом этих переменных на экран. Напишите программу, которая меняет значения переменных местами, то есть нужно добиться того, чтобы в переменной a лежит значение b, а в b — значение a.

Пример программы

int main() {
int a = 42;
int b = 153;
std::cout << "a: " << a << "\n"; /* На экран будет выведено 42 */
std::cout << "b: " << b << "\n"; /* На экран будет выведено 153 */

/* Меняем значения */

std::cout << "a: " << a << "\n"; /* На экран будет выведено 153 */
std::cout << "b: " << b << "\n"; /* На экран будет выведено 42 */
}

Советы и рекомендации

Самый простой способ взаимно менять значения переменных — использовать swap (a, b). Тем не менее важно понимать, как работает операция по обмену значений двух переменных. Для начала посмотрим неправильную реализацию и выясним, что в ней не так. Ошибочная реализация a = b; b = a;

Если вы попытаетесь выполнить обмен значений этим способом, то увидите, что теперь в обеих переменных хранится значение переменной b. Происходит это из-за построчного выполнения кода. Первая операция присваивания сохраняет значение переменной b в переменную a. Затем вторая — новое значение a в b, иными словами, значение b в b. Таким образом, мы полностью теряем содержание контейнера a. В решении необходимо придумать способ, при котором содержимое переменных теряться не будет, а значения переменных поменяются местами.

Что оценивается

По окончании работы алгоритма обмена в переменной a должно лежать значение, которое изначально лежало в переменной b, и наоборот.

Задача 3. Злостные вредители

На бамбуковой плантации завелись гусеницы. Они спят днём и едят бамбук ночью. Бамбук генно-модифицированный, растёт только при свете дня, зато очень быстро — по 50 сантиметров ежедневно! Гусеницы съедают 20 сантиметров бамбука каждую ночь. Бамбуковые саженцы при посадке утром имеют высоту один метр. Напишите программу, которая считает, какой высоты будет бамбук в середине третьего дня. Усложнение — посчитайте это не за несколько подходов, а одной формулой.

Советы и рекомендации

Допускается погрешность в один сантиметр.
Все расчёты проводите в сантиметрах.

Что оценивается

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

Подсказка

Высоту бамбука к середине третьего дня можно посчитать с помощью формулы:

beginHeight + (dailyGrowth - nightFade) * 2 + dailyGrowth / 2;

В ней: dailyGrowth — ежедневный рост; nightFade — размер съедаемого гусеницами бамбука за одну ночь; beginHeight — начальная высота бамбука.

Задача 4 (дополнительная). Повышаем градус сложности*

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

Советы и рекомендации

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

Что оценивается

По окончании работы алгоритма обмена в переменной a должно лежать значение, которое изначально лежало в переменной b, и наоборот.
В программе используются только две переменные.

Критерии оценки работы

Программы запускаются и корректно работают, нет синтаксических ошибок.
Имена переменных корректные (отражают суть хранимых данных, соответствуют стилю именования переменных в C++).
Создан текстовый интерфейс для всех программ:
    описание программы (приветствие или что она делает);
    при вводе данных;
    при выводе данных.
Выполнено три или более задач.

4. Конструкция условия if

Цели практической работы

Научиться работать с условными операторами if, else, else if.
Научиться работать с оператором получения остатка от деления.

Что входит в практическую работу

Обязательные задачи: Минимум из двух чисел Складываем в уме Проверка на чётное число Калькулятор опыта Кратность числа Улучшим барберов Меню ресторана

Дополнительные задачи: Зарплата (необязательная) Прогрессивный налог (необязательная)

Задание 1. Минимум из двух чисел

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

Пример 1 Введите первое число: 45 Введите второе число: 70 -----Проверяем----- Наименьшее число: 45

Пример 2 Введите первое число: 45 Введите второе число: 45 -----Проверяем----- Числа равны!

Советы и рекомендации

Учтите, что числа могут быть равны! Что оценивается Правильность нахождения минимального числа Обработка всех возможных вариантов минимального из двух чисел Использование конструкций else if и else

Задание 2. Складываем в уме Что нужно сделать

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

Пример-1

Введите первое число: 45 Введите второе число: 70 Введите их сумму: 115 -----Проверяем----- Верно!

Пример-2

Введите первое число: 45 Введите второе число: 70 Введите их сумму: 125 -----Проверяем----- Ошибка! Верный результат: 115 Что оценивается

Корректность использования условных конструкций.

Задание 3. Проверка на чётное число Что нужно сделать

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

Пример: int remainder = x % 2 (вычисляет остаток от деления x на 2).

Пример

Введите число: 28 -----Проверяем----- Число 28 — чётное Советы и рекомендации

Для проверки чётности используйте оператор %. Он вычисляет остаток от деления двух чисел.
Не забудьте про отрицательные числа.

Задание 4. Калькулятор опыта Что нужно сделать

Напишите программу, которая определяет уровень персонажа в компьютерной игре. Пользователь вводит число «очков опыта», а программа вычисляет уровень. Новый уровень даётся при достижении 1000, 2500 и 5000 «очков опыта». Начальный уровень равен 1.

Пример

Введите число очков опыта: 2000 -----Считаем----- Ваш уровень: 2 Советы и рекомендации

Программа должна выводить текущий уровень персонажа для любого количества очков.
Обработка некорректного ввода приветствуется.
Чтобы сократить количество проверок, используйте оператор else if.

Что оценивается

Правильное определение текущего уровня персонажа.
Отсутствие лишних и дублирующих проверок.

Задание 5. Кратность числа Что нужно сделать

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

Пример 1

Введите первое число: 45 Введите второе число: 5 -----Проверяем----- Да, 45 делится на 5 без остатка!

Пример2

Введите первое число: 21 Введите второе число: 8 -----Проверяем----- Нет, 21 не делится на 8 без остатка! Советы и рекомендации

Не забудьте про отрицательные числа.
Учитывайте правила деления чисел.

Что оценивается

Корректная работа программы.

Задание 6. Улучшим барберов Что нужно сделать

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

Напишите программу, которая отвечает на вопрос хватает ли барберов в данном

городе если задано число людей и число барберов, а так же указано, что

один барбер работает 8 часов в день, на одного клиента тратит 1 час

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

целочисленного деления оператором % Что оценивается

Программа должна всегда корректно работать и не вылетать.

Задание 7. Меню ресторана Что нужно сделать

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

Пример 1

Введите день недели (от 1 до 7): 4 Меню сегодня (четверг): Гороховый суп Салат «Цезарь» с креветками Куриная ножка с пюре Морс

Пример 2

Введите день недели (от 1 до 7): 2 Меню сегодня (вторник): Харчо Салат «Оливье» Баварские колбаски с капустой Морс Что оценивается

Оптимальное использование условных операторов.
Приветствуется обработка пользовательского ввода.

Задание 8. Зарплата (дополнительное задание) Что нужно сделать

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

Пример

Введите зарплату первого сотрудника: 45 рублей Введите зарплату второго сотрудника: 45 рублей Введите зарплату третьего сотрудника: 45 рублей -----Считаем----- Самая высокая зарплата в отделе: 45 рублей Разница между самой высокой и самой низкой зарплатой в отделе: 0 рублей Средняя зарплата в отделе: 45 рублей Что оценивается

Правильность нахождения разницы зарплат.
Оптимальность нахождения разницы зарплат.

Задание 9. Прогрессивный налог (дополнительное задание) Что нужно сделать

В последнем видео мы писали программу, вычисляющую сумму налога по прогрессивной шкале в зависимости от полученного заработка: 13% — на доход до 10 000, 20% — на доход от 10 000 до 50 000, 30% — на доход выше 50 000.

Однако во многих странах, использующих такую шкалу, эта сумма вычисляется более сложным способом: налоговая ставка 30% на доход выше 50 000 означает, что 30% уплачивается не со всей суммы, а лишь с той её части, которая превосходит 50 000. Аналогично: ставка 20% на доход от 10 000 до 50 000 обязывает уплатить 20% лишь с той части суммы, которая превосходит 10 000, но не превосходит 50 000.

Так, например, с дохода 100 000 придётся заплатить такой налог: 30% * (100 000 – 50 000) + 20% * (50 000 – 10 000) + 13% * 10 000 = 15 000 + 8000 + 1300 = 24 300.

С дохода 30 000: 20% * (30 000 – 10 000) + 13% * 10 000 = 4000 + 1300 = 5300.

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

Обработка некорректного ввода приветствуется.
Чтобы сократить количество проверок, используйте оператор else if.

Что оценивается

Правильное определение налога.
Отсутствие лишних и дублирующих проверок.

Критерии оценки

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

cpp-skillbox-study's People

Contributors

transportdebuger avatar

Watchers

 avatar

Forkers

hl1man

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.