Второй день не могу не могу допереть как ее правильно решить. Условие: Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, когда он избавится от долга? Во сколько школьнику обошелся айфон? То есть, каждый месяц банк начисляет процент и комиссию, увеличивая долг, и каждый месяц школьник его потихоньку выплачивает. Вот мой код с комментариями. https://ideone.com/IkbjG0
Если срок не определен - цикл for() не подходит - необходимо while() использовать. Как раз в условие и поставить, что остаток неотрицательный.
Может через while и легче, но задача в первую очередь предполагает решение через цикл for, т.к она взята после главы где объясняется данный цикл. Поэтому хотелось бы, что бы подсказали алгоритм действий в контексте цикла for и функции if. Просто не хочется идти и учить дальше язык, решив задачу другим более легким путем, не разобравшись в принципе взаимодействия for и if
for и while впринципе легко заменяемы. PHP: for ($i = 0; $i < 123; $i++) {...} $i = 0; while ($i < 123) { ... $i++; } тут могут быть любые инструкции и условия. Если с while выглядит так: PHP: $month = 1; while ($creditBalance > 0) { $creditBalance = ....; if ($creditBalance > $monthlyPayment) { ... } else { ... } echo ...; $month++; } то с for это можно записать так: PHP: for ($month = 1; $creditBalance > 0; $month++;) { $creditBalance = ....; if ($creditBalance > $monthlyPayment) { ... } else { ... } echo ...; }
Спасибо, завтра попробую. Сегодня целый день сижу на этой задаче, и уже даже таблетки от головной боли не помогают.
https://ideone.com/kFoSdq#stdin Наконец то решил. 3 дня ушло на это. Причем что интересно, сегодня я как будто ясней понимал что делаю и для чего, чем когда начинал решать эту задачу 3 дня назад
@zevs непонятно только от куда взялось 4000? PHP: if ($creditBalance < 4000) {...} Чем Вас не устроило: PHP: if ($creditBalance < $monthlyPayment) {...} ? Ну и по условию задачи банк начисляет проценты и комиссию в начале месяца - этот код можно поставить в начало тела цикла.
4000 потому что когда банк начинает начислять проценты и комиссию, сумма становится больше ежемесячного платежа ( 5000), следовательно код начинает идти по обычному сценарию. Если написать: PHP: if ($creditBalance < $monthlyPayment) {...} то получится что вместе со всеми надбавками долг на 12 месяце составит 5260р, и следуя моему коду, ежемесячная оплата приравняется к сумме долга, т.е PHP: $monthlyPayment = $creditBalance; что уже будет неверно, т.к школьник не сможет оплачивать в месяц более чем 5000р. Поэтому от 5260 остается 260 на 13 месяц, которые с надбавками составляют 1260 ( примерно), и долг успешно погашается не уходя в минус.
Это костыль, который не нужен. Если сумма больше 5000 - код и должен идти по обычному сценарию. Можно я приведу Вам для сравнения свой вариант, раз Вы уже написали свой? Результат такой же как и у Вас.
PHP: error_reporting(-1); $creditBalance = 40000; /* Долг перед банком */ $percent = 1.03; /* Банк начисляет 3% в месяц от суммы */ $servicePayment = 1000; /* А также 1000 рублей в месяц комиссии за обслуживание счета */ $monthlyPayment = 5000; /* школьник платит 5000 р в месяц, это все, что ему дает мама на завтраки */ $paymentTotal = 0; /* Сколько всего отдал банку школьник */ for ($month = 1; $creditBalance > 0; $month++) { $creditBalance = $creditBalance * $percent + $servicePayment; if ($creditBalance > $monthlyPayment) { $paymentTotal += $monthlyPayment; $creditBalance -= $monthlyPayment; } else { $paymentTotal += $creditBalance; $creditBalance = 0; } echo "$month месяц спустя: долг = $creditBalance руб, выплачено всего $paymentTotal руб.\n"; } Результат Код (Text): 1 месяц спустя: долг = 37200 руб, выплачено всего 5000 руб. 2 месяц спустя: долг = 34316 руб, выплачено всего 10000 руб. 3 месяц спустя: долг = 31345.48 руб, выплачено всего 15000 руб. 4 месяц спустя: долг = 28285.8444 руб, выплачено всего 20000 руб. 5 месяц спустя: долг = 25134.419732 руб, выплачено всего 25000 руб. 6 месяц спустя: долг = 21888.45232396 руб, выплачено всего 30000 руб. 7 месяц спустя: долг = 18545.105893679 руб, выплачено всего 35000 руб. 8 месяц спустя: долг = 15101.459070489 руб, выплачено всего 40000 руб. 9 месяц спустя: долг = 11554.502842604 руб, выплачено всего 45000 руб. 10 месяц спустя: долг = 7901.137927882 руб, выплачено всего 50000 руб. 11 месяц спустя: долг = 4138.1720657184 руб, выплачено всего 55000 руб. 12 месяц спустя: долг = 262.31722768997 руб, выплачено всего 60000 руб. 13 месяц спустя: долг = 0 руб, выплачено всего 61270.186744521 руб.
Тут по условию в начале месяца % а потом комиссия Но в реальности как раз наоборот будет комиссиия а потом % Правда разница в итоге там около 600 рублей, кажется.
Сорри за оффтоп, но задачу стоит перефразировать: Условие: Школьник решил купить айфон и для этой цели взял кредит. Сумма кредита — 40000 р., банк в начале каждого месяца (включая первый) начисляет 3% от остатка долга за пользование кредитом и 1000 р. комиссии (да, а ты думал, обойдешься процентами?). После этого, в конце каждого месяца, наш герой идет в банк и пытается выплатить долг, но он не может заплатить более 5000 р за раз (сэкономленных на школьных завтраках). Вопрос, какой IQ у манагера, выдававшего кредит? Какова его профпригодность и компетентность?