Skip to content

Latest commit

 

History

History
201 lines (162 loc) · 16.2 KB

File metadata and controls

201 lines (162 loc) · 16.2 KB

Примитивные типы данных

Памятка к домашнему заданию

Перед тем, как отправить своё решение на проверку преподавателю, сверьтесь с чеклистом

Что делать, если возникли сложности?

И это здорово! Если их преодолевать правильно, то можно получить большую образовательную пользу для себя. Периодическое возникновение вопросов, недопонимание пройденного материала - нормальная и неотъемлемая часть обучения. А мы здесь, чтобы помочь вам пройти этот путь.

Что делать, если непонятна теория?

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

Что делать, если непонятно условие задания?

  1. Прежде чем задать вопрос по условию задачи, перечитайте его ещё раз и убедитесь, что в тексте условия нет прямого ответа на этот вопрос. Умение работать с текстом - важный навык работы с информацией.
  2. Если ответа на свой вопрос в тексте условия не увидели, задайте его в общем чате, мы раскроем детали условия подробнее. Не забудьте при этом скинуть и ссылку на условие задания, про которую у вас вопрос.

Что делать,если не получается задача?

Если ваша проблема это ошибка компиляции (подчёркивает красным, не даёт запустить программу), сборки проекта, CI и прочие подобные ошибки, то:

  1. Найдите и прочитайте текст ошибки, который вам подсвечивает реплит, идея (или логи); "подчёркивает красным" - это не описание ошибки.
  2. Попробуйте понять текст ошибки, при необходимости воспользуйтесь переводчиком. Нестрашно, если вы переведёте неточно, тут главное сам процесс: со временем и с нашей помощью вы будете это делать лучше и лучше, но, пропуская этот этап, вы не сможете научиться это делать.
  3. Если не получилось понять ошибку по её тексту, попробуйте её загуглить и изучить подобную ошибку у других людей. Попробуйте примерить решения их проблем на свой код. Соотнесите найденные описания ошибки с пройденной теорией.
  4. Если все равно вашу трудности не разрешились, напишите в общий чат, обязательно указав:
    1. Название задачи и ссылку на условие
    2. Ссылку на вашу работу
    3. Текст и скриншот (не фотография) ошибки.
    4. Ваши размышления и описание шагов, которые вы совершили для решения.

Если ваша проблема это ошибка исполнения (программа умирает уже после запуска) или она отрабатывает неправильно, то:

  1. Воспользуйтесь отладчиком для пошагового анализа работы вашей программы. Так вы либо убедитесь в неправильности придуманного вами алгоритма или найдёте конкретное место, где ожидаемое поведение программы разошлось с фактическим.
  2. Если проблему найти не получилось, напишите в общий чат, обязательно указав:
    1. Название задачи и ссылку на условие
    2. Ссылку на вашу работу
    3. Конкретное и подробное описание проблемы или затруднения при решении задачи ("Помогите что не так" - это не описание)
    4. Подробное описание вашего анализа программы с помощью отладчика вместе со скринами
    5. Ваши размышления и описание шагов, которые вы совершили для решения.

В решении выполнены все требования задания

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


Пишем в идее, сдаём в реплите 🆕

Теперь вы знакомы с профессиональным редактором кода - Intellij IDEA Community Version. Все задачи теперь должны выполняться в нём.

Как минимум перед каждой отправкой работы на проверку (а лучше - вегда) форматируйте код. Ячейки, а именно локальные переменные, параметры, поля и тп должны быть названы камелкейсом с маленькой буквы, а классы и интерфейсы камелкейсом с большой буквы. Правила, связанные с отступами можно доверить самой идее - выберите в меню Code -> Reformat code чтобы отформатировать код в текущем файле.

При этом задание сдаётся через реплит. Обратите внимание на то, что на реплит ваш код следует добавлять через загрузку файлов, а не через копирование текста; при копировании и вставке кода в окно реплита форматирование может поехать. Тут алгоритм один и тот же: в пустом проекте удаляете Main.java (Delete в меню действий над файлом) и выбираете в меню что повыше пункт Upload file (англ. Загрузить файл) и загружаете Main.java с вашего компьютера из папки вашего проекта, после чего нажимаете в том же меню Upload folder (англ. Загрузить папку) и загружаете папки-пакеты с .java-файлами если они вам нужны.

При любой же проблеме с поведением кода теперь необходимо рассказывать про ваш анализ отладчиком вашей программы.

Задача 1 (обязательная)

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

  • УСН доходы - налог 6% от доходов;
  • УСН доходы минус расходы - налог 15% от разницы доходов и расходов.

Функционал программы

  1. Ввод сумм доходов и расходов ИП;
  2. ИП может несколько раз вносить доходы и расходы, они должны суммироваться с введёнными ранее данными;
  3. При выборе ИП опции определения наиболее выгодной системы налогообложения, программа должна вывести название такой системы (УСН доходы или УСН доходы минус расходы);
  4. При выводе самой выгодной системы налогооблажения, программа должна вывести также сумму, которую удастся сэкономить, если выбрать эту систему, а также налоги на каждой из доступных систем налогооблажения;
  5. Программа должна завершаться при вводе слова end;
  6. Нужно помнить, что налог не может быть отрицательным;
  7. Программа должна быть структурирована в методы (например, расчёт налога для одной системы налогооблажения должен представлять собой отдельный статический метод)

Пример

Выберите операцию и введите её номер:
1. Добавить новый доход
2. Добавить новый расход
3. Выбрать ситему налогооблажения
1 <Enter>
Введите сумму дохода:
400 <Enter>

Выберите операцию и введите её номер:
1. Добавить новый доход
2. Добавить новый расход
3. Выбрать ситему налогооблажения
2 <Enter>
Введите сумму расхода:
100 <Enter>

Выберите операцию и введите её номер:
1. Добавить новый доход
2. Добавить новый расход
3. Выбрать ситему налогооблажения
1 <Enter>
Введите сумму дохода:
600 <Enter>

Выберите операцию и введите её номер:
1. Добавить новый доход
2. Добавить новый расход
3. Выбрать ситему налогооблажения
3 <Enter>

Мы советуем вам УСН доходы
Ваш налог составит: 60 рублей
Налог на другой системе: 135 рублей
Экономия: 75 рублей

Выберите операцию и введите её номер:
1. Добавить новый доход
2. Добавить новый расход
3. Выбрать ситему налогооблажения
end <Enter>

Программа завершена!

Такой вывод программы основан на следующих расчётах:

  • Доходы ИП: 400 + 600 = 1000 рублей
  • Расходы ИП: 100 рублей
  • УСН доходы: 6% от 1000 рублей = 60 рублей
  • УСН доходы минус расходы: 15% от 1000-100 рублей = 135 рублей
  • Экономия: 135 - 60 = 75 рублей

Подсказки

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

Также нужно добавить условие выхода из цикла. Если пользователь ввел end вместо кода символа и нажал , то завершим цикл ввода и выведем результат:

//Создаем scanner - объект, который будет считывать из стандартного потока ввода/вывода (console)
Scanner scanner = new Scanner(System.in);

//Цикл будет работать, пока пользователь не введет `end`
while (true) {     
    // Выводим информацию о возможных операциях пользователю

    String input = scanner.nextLine();
    if ("end".equals(input)) {
        break;
    }
    ...
}
System.out.println("Программа завершена!");

Заведите переменные для хранения доходов и расходов. При вводе новых доходов и расходов увеличивайте их на введённое число:

   int earnings = 0;    // доходы
   int spendings = 0;   // расходы

Если пользователь ввёл номер операции, то превращаем текст в число и делаем по нему свич:

int operation = Integer.parseInt(input);
switch (operation) {
   case 1:
      System.out.println("Введите сумму дохода:");
      String moneyStr = scanner.nextLine(); // Не используйте тут nextInt (!)
      int money = Integer.parseInt(moneyStr);
      earnings += money;
      break;
   case 2:
      // действия при выборе второй операции
      ...
      break;
   case 3::
      // действия при выборе второй операции
      ...
      break;
   default:
      System.out.println("Такой операции нет");
}

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

public static int taxEarningsMinusSpendings(int earnings, int spendings) {
   int tax = (earnings - spendings) * 15 / 100;
   if (tax >= 0) {
      return tax;
   } else {
      // если расходы оказались больше, то налог посчитается отрицательным
      return 0;
   }
}

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

Выведите результат работы на экран.