Структура выбора и циклы Лаба. ЯиСП Лабораторная 10 Структуры выбора и циклы. Лабораторная работа 10 Структуры выбора и циклы ! В отчет Задание 1 и 2 !
Скачать 122.15 Kb.
|
ЛАБОРАТОРНАЯ РАБОТА № 10 Структуры выбора и циклы ! В отчет Задание 1 и 2 ! $ Задание 1. Решение задачи: Ожидание события Проанализировать условие задачи, разработать код программы и представить его в отчете с результатами и тестированием (т.е. без описания всех этапов проектирования кода). Постановка задачиНаписать программу WaitForEvent, которая в каждом наступившем месяце года сообщает пользователю сколько времени осталось до запланированного события. Например, выводит в консоль сообщение-напоминание о текущем месяце и годе и о количестве оставшихся месяцев до концерта, на который были куплены билеты заранее. При этом известен год и месяц покупки билетов, и количество месяцев до события (месяц покупки не включается в расчет). Например, были куплены билеты 15 мая 2021 года на концерт, который пройдет через10 месяцев. Анализ задачи: Объявить константы класса, входные и выходные данные: MONTHS_OF_YEAR – количество месяцев в году …. – количество дней в году int startMonth – номер месяца покупки билета, вводится пользователем int startYear – год покупки билета, вводится пользователем int numberOfMonths – количество месяцев до события (период ожидания), вводится пользователем Алгоритм программы (с уточняющими формулами): Получить от пользователя номер месяца покупки билета, startMonth Получить год покупки билета, startYear Получить количество месяцев до события (концерта), numberOfMonths Выполнить проверку количества прошедших с покупки билетов месяцев. Для этого реализуем итерацию по месяцам пока счетчик месяцев не станет равен количеству месяцев до события: while (monthsCount < numberOfMonths) // итерация по месяцам периода ожидания с 0 до numberOfMonths monthsCount = 0 – счетчик месяцев Этот цикл осуществляет простую проверку количества прошедших до события месяцев. Но он не позволит определить название месяца и номер года текущей итерации. Переходим к следующему этапу алгоритма. Выполнить проверку по месяцам года и определить месяца, участвующие в периоде ожидания. Так как нумерация месяцев повторяется каждый год реализуем внутреннюю по отношению к while итерацию по месяцам года: for (int j = 1; j <= MONTHS_OF_YEAR; j++) // итерация по месяцам года с 1 до 12 j – счетчик месяцев Пропустить первые месяцы первого проверяемого года, так как они не попадают в период ожидания В нашем случае, пропустить с 1 по 5 месяц включительно 2021 года. Для этого применяем if со следующим условием проверки: if (i == startYear && j <= startMonth) i – счетчик годов если условие выполняется, то пропускаем текущую итерацию цикла for: continue; Проверить, равен ли счетчик месяцев количеству месяцев периода ожидания: if (monthsCount == numberOfMonths) ЕслиДа, то расчет заканчиваем и выходим из цикла for: break; Сообщить о текущем месяце года и количестве оставшихся месяцев до события. Для этого в конце цикла for вывести на консоль сообщение, например, Текущий месяц: Июнь, 2021 года. До концерта осталось 9 месяцев Увеличить счетчик месяцев периода ожидания (в конце цикла for) Увеличить год (в конце цикла while) Если счетчик месяцев периода ожидания меньше его значения, то происходит запуск новой итерации цикла while. После выхода из цикла while вывести итоговое сообщение: Концерт состоится в … месяце … года. – Задание 2. Решение задачи: Вычисление процентов по вкладу (аналогичная предыдущей) Задача для самостоятельной работы, аналогичная предыдущей Проанализировать задачу, разработать код программы и представить его в отчете с результатом и тестированием (без описания этапов проектирования кода). Написать код программы DepositeCalculation, которая вычисляет ежемесячные проценты по вкладу (без капитализации1), исходя из введенных пользователем: месяца и года открытия вклада, срока вклада в месяцах, годовой процентной ставки и суммы вклада в рублях. Пусть количество дней в году будет всегда равно 365, т.е. високосные года в вычислениях не учитываются. Например, месяц открытия вклада равен 3 (март), год открытия равен 2021, срок вклада равен 2 года или 24 месяца, сумма вклада равна 1000 рублей, годовая процентная ставка равна 5%. Проценты начинают начисляться с четвертого месяца 2021 года. Всего 24 начисления. Начисления в каждом месяце отличаются из-за разности количества дней в месяце. Методы класса 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 Под капитализацией вклада следует понимать регулярное начисление процентов на общую денежную сумму, имеющуюся на счету вкладчика. То есть банк начисляет процент на тот вклад, который клиент решает внести на свой счёт. Затем проценты перечисляются на этот же самый счёт, увеличивая общую сумму депозита. В следующий раз процент начисляется уже не на первоначальный взнос денежных средств вкладчика, а на общую сумму, которая числится на его счету. |