Вывести значение чисел
Подскажите как правильно поступить с расчётом и выводом.
Есть число в первом input text - 100. Есть число во втором input text - 6. Как вывести вот такую таблицу по заданным выше условиям ? 1 - 35 2 - 35 3 - 25 4 - 5 5 - 0 6 - 0 |
KEMPZOR,
:-? можно пояснить что такое таблица и как она формируется? |
Цитата:
<tr style="display: table-row;"> <td class="rassmonth">1</td> <td class="rasssumm">35</td> </tr> <tr style="display: table-row;"> <td class="rassmonth">2</td> <td class="rasssumm">35</td> </tr> <tr style="display: table-row;"> <td class="rassmonth">3</td> <td class="rasssumm">25</td> </tr> <tr style="display: table-row;"> <td class="rassmonth">4</td> <td class="rasssumm">5</td> </tr> <tr style="display: table-row;"> <td class="rassmonth">5</td> <td class="rasssumm">0</td> </tr> <tr style="display: table-row;"> <td class="rassmonth">6</td> <td class="rasssumm">0</td> </tr> 100 - (35) = 65 (вноситься то что отнимаем) 65 - (35) = 30 (вносится то что отнимаем) 30 - (25) = 5 (если 30 то (25), если 20 (15), если 10 (5)) 5 - (5) = 0 0 - (0) = 0 0 - (0) = 0 |
KEMPZOR,
таблица понятно (только зачем масло делать маслянным Цитата:
то что ниже не осилил Цитата:
|
Цитата:
100 - (35) = 65 - (число 100 не меньше 35) вносим (35) в таблицу 65 - (35) = 30 (число 65 не меньше 35) вносим (35) в таблицу Теперь число 30 меньше 35, значит мы теперь отнимаем 30-(25) 25-потому что нужно кратное 5. (тоесть 30 это 25, 20 это 15, и 10 это 5). 30 - (25) = 5 5 - (5) = 0 0 - (0) = 0 0 - (0) = 0 В итоге, если сложить те числа, которые мы отнимали, получится 35+35+25+5+0+0=100. |
KEMPZOR,
спасибо... но увы не помогло понять |
KEMPZOR,
Закономерность непонятная. 100 - (35) = 65 Почему 35 а не 95? Или 100? или еще что-то? И при чем здесь 6? |
Цитата:
6 - количество месяцев. 35 - сумма, которая изымается каждый месяц. Я так предполагаю что нужно делать через цикл ? |
KEMPZOR,
почему не 35 35 30 ? а 35 35 20 5 |
Цитата:
|
Цитата:
Цитата:
|
Цитата:
https://jsfiddle.net/KEMPZOR/64nnq1p9/ |
Цитата:
|
Цитата:
1 - 35 2 - 35 3 - 35 4 - 35 5 - 35 6 - 825 Последний такой должен быть 825. |
KEMPZOR,
алгоритм формирования чисел так и не понял, помочь не могу. |
Цитата:
0 - 50 1 - 50 2 - 0 3 - 0 4 - 0 5 - 0 6 - 0 0 - Это первый платёж, остальные по месяцам. |
Цитата:
0 - 160 1 - 160 2 - 160 3 - 160 4 - 160 5 - 160 6 - 40 Почему 160 и 40 ? 1000/6=166.6667 Наименьшее кратное будет 165. 165*6 = 990 1000-990=10 последний платёж (не менее 35), значит не подходит, уменьшаем ещё на 5. 160*6 = 960 1000-960=40 последний платёж (не менее 35), значит подходит. Помогите пожалуйста решить задачку, за мной не заржавеет (заплачу денежку). |
Сумма (кратная 5, не меньше 35):<input id="sum" type = "text" value = "1000"><br>
<input type="button" value="Считать" onclick = "calc();"><br>
<div id = "result"></div>
<script>
function calc() {
var summa = +sum.value, period = 6;
if(summa < 35 || Math.floor(summa / 5) * 5 != summa) {
alert("Сумма должна быть кратной 5, не меньше 35");
result.innerHTML = "";
return;
}
var tempPay, currentPay, lastPay;
tempPay = summa / period;
currentPay = Math.floor(tempPay / 5) * 5;
if (currentPay < 35) currentPay = 35;
period = Math.round(summa / currentPay);
currentPay = currentPay + 5;
do {
currentPay = currentPay - 5;
lastPay = summa - currentPay * period;
} while ( lastPay < 35 && lastPay != 0);
if (currentPay < 35) { currentPay = 30;
do {
currentPay = currentPay + 5;
period = Math.floor(summa / currentPay);
lastPay = summa - currentPay * period;
} while (lastPay != 0 && lastPay < 35);
}
result.innerHTML = "";
for (var i = 0; i < period; i++) {
result.innerHTML += i + " - " + currentPay + "<br>";
}
result.innerHTML += i + " - " + lastPay + "<br>";
}
</script>
Насчет денежки - пускай себе ржавеет, лучше пусти эти средства на изучение арифметики |
Цитата:
<script type="text/javascript" src="http://l-c.by/g/libs/jquery/1.10.2/jquery.min.js"
<p>Сумма</p>
<input id="sum" type = "text" value = "">
<p>Месяц</p>
<select class="select-month" name="month">
<option value="2">1</option>
<option value="3">2</option>
<option value="4">3</option>
<option value="5">4</option>
<option value="6">5</option>
<option value="7">6</option>
</select>
<input type="button" value="Считать" onclick = "calc();"><br>
<div id = "result"></div>
function calc() {
var summa = +sum.value.replace(",", "."), period = parseInt($("select[name=month]").val()) , selperiod = period;
if(summa < 35) {
alert("Сумма должна быть кратной 5, не меньше 35");
result.innerHTML = "";
return;
}
var tempPay, currentPay, lastPay;
tempPay = summa / period;
/*if (summa <= 244) { tempPay = summa / 35; }*/
currentPay = Math.floor(tempPay / 5) * 5;
if (currentPay < 35) currentPay = 35;
currentPay = currentPay + 5;
do {
currentPay = currentPay - 5;
lastPay = summa - currentPay * (period-1);
} while ( lastPay < 35 && lastPay != 0);
if (currentPay < 35) { currentPay = 30;
do {
currentPay = currentPay + 5;
period = Math.round(summa / currentPay);
lastPay = summa - currentPay * period;
} while (lastPay != 0 && lastPay < 35);
}
result.innerHTML = "";
for (var i = 0; i < period-1; i++) {
result.innerHTML += i + " - " + currentPay + "<br>";
}
result.innerHTML += i + " - " + lastPay.toFixed(2) + "<br>";
}
P.S. Арифметику подтяну, обещаю ))) |
KEMPZOR,
Цитата:
0 - 50 1 - 50 2 - 0 - это неправильно? Еще какие неправильно? Это условие соблюдается? Сумма должна быть кратной 5, не меньше 35 Или суммы бывают произвольные? Я это не предусматривал - платежи по месяцам кратные 5. Правда, попробовал, снял ограничение по кратности 5 - все считается правильно, даже с копейками. Ошибок не увидел. |
Цитата:
Если ввожу 232 month 1. 0 - 155 1 - 117. Правильно Если ввожу 232 month 2. 0 - 75 1 - 75 2 - 82.00 Правильно Если ввожу 232 month 3. 0 - 55 1 - 55 2 - 55 3 - 67.00 Правильно Если ввожу 232 month 4. 0 - 45 1 - 45 2 - 45 3 - 45 4 - 52.00 Правильно Если ввожу 232 month 5. 0 - 35 1 - 35 2 - 35 3 - 35 4 - 35 5 - 57.00 Правильно Если ввожу 232 month 6. 0 - 95 1 - 42.00 Неправильно, не хватает 95. Если число больше 245 то всё правильно везде считает.
<select class="select-month" name="month">
<option value="2">1</option>
<option value="3">2</option>
<option value="4">3</option>
<option value="5">4</option>
<option value="6">5</option>
<option value="7">6</option>
</select>
|
KEMPZOR,
Цитата:
Сумма :<input id="sum" type = "text" value = "232"><br>
<input type="button" value="Считать" onclick = "calc();"><br>
<div id = "result"></div>
<script>
function calc() {
var summa = +sum.value, period = 6;
// if(summa < 35 || Math.floor(summa / 5) * 5 != summa) {
// alert("Сумма должна быть кратной 5, не меньше 35");
// result.innerHTML = "";
// return;
// }
var tempPay, currentPay, lastPay;
tempPay = summa / period;
currentPay = Math.floor(tempPay / 5) * 5;
if (currentPay < 35) currentPay = 35;
period = Math.round(summa / currentPay);
currentPay = currentPay + 5;
do {
currentPay = currentPay - 5;
lastPay = summa - currentPay * period;
} while ( lastPay < 35 && lastPay != 0);
if (currentPay < 35) { currentPay = 30;
do {
currentPay = currentPay + 5;
period = Math.floor(summa / currentPay);
lastPay = summa - currentPay * period;
} while (lastPay != 0 && lastPay < 35);
}
result.innerHTML = "";
for (var i = 0; i < period; i++) {
result.innerHTML += i + " - " + currentPay + "<br>";
}
result.innerHTML += i + " - " + lastPay + "<br>";
}
</script>
|
Цитата:
<select class="select-month" name="month">
<option value="2">1</option>
<option value="3">2</option>
<option value="4">3</option>
<option value="5">4</option>
<option value="6">5</option>
<option value="7">6</option>
</select>
0 - 160 1 - 160 2 - 160 3 - 160 4 - 160 5 - 160 6 - 40 Это правильно. Я сделал по своему примеру, у меня так показывает. 1000/7=142.85 Ближайшее 140 * 6 = 840 1000-840 = 160 0 - 140 1 - 140 2 - 140 3 - 140 4 - 140 5 - 140 6 - 160.00 Но вот меньше 244 некорректно.:cray: |
Цитата:
Сумма :<input id="sum" type = "text" value = "1000"><br>
Период:<select class="select-month" name="month">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
</select>
<input type="button" value="Считать" onclick = "calc();"><br>
<div id = "result"></div>
<script>
function calc() {
var summa = +sum.value, period = parseInt(document.querySelector("select[name=month]").value);
// if(summa < 35 || Math.floor(summa / 5) * 5 != summa) {
// alert("Сумма должна быть кратной 5, не меньше 35");
// result.innerHTML = "";
// return;
// }
var tempPay, currentPay, lastPay;
tempPay = summa / period;
currentPay = Math.floor(tempPay / 5) * 5;
if (currentPay < 35) currentPay = 35;
period = Math.round(summa / currentPay);
currentPay = currentPay + 5;
do {
currentPay = currentPay - 5;
lastPay = summa - currentPay * period;
} while ( lastPay < 35 && lastPay != 0);
if (currentPay < 35) { currentPay = 30;
do {
currentPay = currentPay + 5;
period = Math.floor(summa / currentPay);
lastPay = summa - currentPay * period;
} while (lastPay != 0 && lastPay < 35);
}
result.innerHTML = "";
for (var i = 0; i < period; i++) {
result.innerHTML += i + " - " + currentPay + "<br>";
}
result.innerHTML += i + " - " + lastPay + "<br>";
}
</script>
|
Цитата:
1000 - сумма. 6 - Период. 0 - это первое число. Всего 7 значений, в <option value="7">6</option> я ставлю 7. Далее
do {
currentPay = currentPay - 5;
lastPay = summa - currentPay * (period - 1);
} while ( lastPay < 35 && lastPay != 0);
и
for (var i = 0; i < period-1; i++) {
result.innerHTML += i + " - " + currentPay + "<br>";
}
Вместо period ставлю (period-1), тогда всё считает как надо, только всё что меньше или равно 244 неправильно. 0 - 140 1 - 140 2 - 140 3 - 140 4 - 140 5 - 140 6 - 160 А и ещё убираю period = Math.round(summa / currentPay); |
KEMPZOR,
Вы нарушаете последовательность - вместо 0,1,2... вы делаете 0,2,3... и отсюда проистекает бред и ошибки |
Цитата:
0 - 140 1 - 140 2 - 140 3 - 140 4 - 140 5 - 140 6 - 160 |
KEMPZOR,
А чем вам не нравится мой вариант пост 24? Зачем вы его портите? |
Цитата:
|
KEMPZOR,
Цитата:
Цитата:
Попробуйте мой вариант по любым суммам не меньше 35 и по любым периодам - есть хоть один вариант, в котором что-то не так? Мой пример работает по следующим правилам: 1. Сумма должна закрываться за время, не большее указанного периода. Первая часть - сразу же, остальные - каждый месяц. 2. Части не должны быть меньше 35. 3. Все части одинаковые и кратные 5, за исключением последней, которая закрывает остаток суммы. |
Цитата:
0 - 55 1 - 55 2 - 0 110/35=3,14. Уже можно на три части сделать. Значит 0 - 35 1 - 35 2 - 40 Почему не так ? 244 на 5. 0 - 40 1 - 40 2 - 40 3 - 40 4 - 40 5 - 44 244 на 6. 0 - 50 1 - 50 2 - 50 3 - 50 4 - 44 а считает как на 244 на 4, что как бы не правильно, должно по идее максимально возможное, тоесть как 244 на 5, не ? |
Всё, разобрался почему считало меньше 244 некорректно, решил проблему так, работает как надо.
tempPay = summa / period;
while (summa <= 244 && tempPay < 35) {
period--;
tempPay = summa / period;
}
|
KEMPZOR,
Костыль, нужный только из-за того, что сначала вы зачем-то завышаете период |
| Часовой пояс GMT +3, время: 01:18. |