Файл: Лабораторная работа 10 Структуры выбора и циклы ! В отчет Задание 1 и 2 !.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.12.2023
Просмотров: 145
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ЛАБОРАТОРНАЯ РАБОТА № 10Структуры выбора и циклы! В отчет Задание 1 и 2 !$ Задание 1. Решение задачи: Ожидание события Проанализировать условие задачи, разработать код программы и представить его в отчете с результатами и тестированием (т.е. без описания всех этапов проектирования кода).
continue; // пропускаем текущую итерацию, переходим к следующему месяцу Проверить, если номер текущего месяца равен сроку вклада, то расчет заканчиваем и выходим из цикла for: if (monthsCount == depositTerm) { break; Иначе, определить количество дней в текущем месяце с помощью класса LocalDate из пакета java.time: int lengthOfMonth = LocalDate.of(i, j, 1).lengthOfMonth(); рассчитать доход по вкладу в текущем месяце: accruedInterestPerMonth = depositAmount * rate / 100 / DAYS_YEAR * lengthOfMonth; результат расчета округлить до копеек: accruedInterestPerMonth = Math.round(accruedInterestPerMonth * 100) / 100.0; вывести результат начисленных процентов в текущем месяце: System.out.println("Начисленопроцентовв " + i + " году " + j + " месяца = " + accruedInterestPerMonth); добавить процент по вкладу текущего месяца к суммарной выплате по вкладу. accruedInterestTotal = accruedInterestTotal + accruedInterestPerMonth; в конце счетчика for увеличить счетчик месяцев на 1: monthsCount++; // увеличимсчетчикмесяцевна 1 в конце счетчика while увеличить год на 1: i ++; Вывести итоговый результат начисленных процентов за весь период: System.out.println("Всего начислено процентов = " + accruedInterestTotal); Результат:
1 Под капитализацией вклада следует понимать регулярное начисление процентов на общую денежную сумму, имеющуюся на счету вкладчика. То есть банк начисляет процент на тот вклад, который клиент решает внести на свой счёт. Затем проценты перечисляются на этот же самый счёт, увеличивая общую сумму депозита. В следующий раз процент начисляется уже не на первоначальный взнос денежных средств вкладчика, а на общую сумму, которая числится на его счету.
Постановка задачи
Написать программу WaitForEvent, которая в каждом наступившем месяце года сообщает пользователю сколько времени осталось до запланированного события. Например, выводит в консоль сообщение-напоминание о текущем месяце и годе и о количестве оставшихся месяцев до концерта, на который были куплены билеты заранее. При этом известен год и месяц покупки билетов, и количество месяцев до события (месяц покупки не включается в расчет). Например, были куплены билеты 15 мая 2021 года на концерт, который пройдет через10 месяцев. Анализ задачи: Объявить константы класса, входные и выходные данные: MONTHS_OF_YEAR – количество месяцев в году …. – количество дней в году int startMonth – номер месяца покупки билета, вводится пользователем int startYear – год покупки билета, вводится пользователем int numberOfMonths – количество месяцев до события (период ожидания), вводится пользователем Алгоритм программы (с уточняющими формулами):-
Получить от пользователя номер месяца покупки билета, startMonth -
Получить год покупки билета, startYear -
Получить количество месяцев до события (концерта), numberOfMonths -
Выполнить проверку количества прошедших с покупки билетов месяцев.
-
Выполнить проверку по месяцам года и определить месяца, участвующие в периоде ожидания.
итерацию по месяцам года:
for (int j = 1; j <= MONTHS_OF_YEAR; j++) // итерация по месяцам года с 1 до 12 j – счетчик месяцев
-
Пропустить первые месяцы первого проверяемого года, так как они не попадают в период ожидания
-
Проверить, равен ли счетчик месяцев количеству месяцев периода ожидания:
-
Сообщить о текущем месяце года и количестве оставшихся месяцев до события.
-
Увеличить счетчик месяцев периода ожидания (в конце цикла for) -
Увеличить год (в конце цикла while)
Методы класса LocalDate из пакета java.time
Для работы с датами будем использовать класс LocalDate из пакета java.time. Класс java.time.LocalDate представляет по умолчанию даты в формате yyyy-MM-dd, где yyyy – год, MM – месяц и dd – день месяца. Для создания даты используется метод of(), например: LocalDate firstDay = LocalDate.of(2021, 1, 1); // (2021 год, месяц январь, день 1) Метод lengthOfMonth() возвращает продолжительность месяца для конкретной даты – 28, 29, 30 или 31 – и не требует параметра, например: int lengthOfMonth = LocalDate.of(2021, 1, 1).lengthOfMonth(); // возвращает 31Константы
Объявить константы класса: MONTHS_OF_YEAR (количество месяцев в году); DAYS_YEAR (количество дней в году);Входные и выходные данные
Объявить внутри метода main переменные, необходимые для вычислений: startMonth – номер месяца открытия вклада, вводится пользователем startYear – год открытия вклада, вводится пользователем depositTerm – срок вклада в месяцах, вводится пользователем rate – процентная ставка (% годовых), вводится пользователем depositAmount – сумма вклада accruedInterestPerMonth – доход по вкладу в текущем месяце accruedInterestTotal – суммарный доход по вкладуАлгоритм программы
Получить номер месяца открытия вклада, startMonthПолучить год открытия вклада, startYearПолучить срок вклада в месяцах, depositTermПолучить сумму вклада, depositAmountПолучить годовую процентную ставку, rateРассчитать и вывести доход по вкладу для каждого месяца срок вклада. Добавить дополнительные переменные, необходимые для расчета: int monthsCount = 0; //счетчик месяцев: int i = startYear;Организовать счетный цикл while, который осуществляет итерацию по месяцам срока вклада и рассчитывает доход по вкладу в текущем месяце, пока значение счетчика месяцев вклада monthsCount меньше срока вклада в месяцах depositTerm: while (monthsCount < depositTerm). Организовать вложенный цикл for, который позволит итерироваться по месяцам года (так как начисления в месяце зависят от количества дней в нем): for (int j = 1; j <= MONTHS_OF_YEAR; j++) { // итерация по месяцам с 1 до 12 } Следует пропустить первые месяцы первого года срока вклада, если они не попадают в интервал расчета: if (i == startYear && j <= startMonth) {continue; // пропускаем текущую итерацию, переходим к следующему месяцу Проверить, если номер текущего месяца равен сроку вклада, то расчет заканчиваем и выходим из цикла for: if (monthsCount == depositTerm) { break; Иначе, определить количество дней в текущем месяце с помощью класса LocalDate из пакета java.time: int lengthOfMonth = LocalDate.of(i, j, 1).lengthOfMonth(); рассчитать доход по вкладу в текущем месяце: accruedInterestPerMonth = depositAmount * rate / 100 / DAYS_YEAR * lengthOfMonth; результат расчета округлить до копеек: accruedInterestPerMonth = Math.round(accruedInterestPerMonth * 100) / 100.0; вывести результат начисленных процентов в текущем месяце: System.out.println("Начисленопроцентовв " + i + " году " + j + " месяца = " + accruedInterestPerMonth); добавить процент по вкладу текущего месяца к суммарной выплате по вкладу. accruedInterestTotal = accruedInterestTotal + accruedInterestPerMonth; в конце счетчика for увеличить счетчик месяцев на 1: monthsCount++; // увеличимсчетчикмесяцевна 1 в конце счетчика while увеличить год на 1: i ++; Вывести итоговый результат начисленных процентов за весь период: System.out.println("Всего начислено процентов = " + accruedInterestTotal); Результат:
1 Под капитализацией вклада следует понимать регулярное начисление процентов на общую денежную сумму, имеющуюся на счету вкладчика. То есть банк начисляет процент на тот вклад, который клиент решает внести на свой счёт. Затем проценты перечисляются на этот же самый счёт, увеличивая общую сумму депозита. В следующий раз процент начисляется уже не на первоначальный взнос денежных средств вкладчика, а на общую сумму, которая числится на его счету.