Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывести значение чисел (https://javascript.ru/forum/misc/68501-vyvesti-znachenie-chisel.html)

KEMPZOR 20.04.2017 16:43

Вывести значение чисел
 
Подскажите как правильно поступить с расчётом и выводом.

Есть число в первом input text - 100.
Есть число во втором input text - 6.
Как вывести вот такую таблицу по заданным выше условиям ?
1 - 35
2 - 35
3 - 25
4 - 5
5 - 0
6 - 0

рони 20.04.2017 17:02

KEMPZOR,
:-? можно пояснить что такое таблица и как она формируется?

KEMPZOR 20.04.2017 17:28

Цитата:

Сообщение от рони (Сообщение 450444)
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

рони 20.04.2017 17:37

KEMPZOR,
таблица понятно (только зачем масло делать маслянным
Цитата:

Сообщение от KEMPZOR
table-row;

)

то что ниже не осилил
Цитата:

Сообщение от KEMPZOR
(вноситься то что отнимаем)


KEMPZOR 20.04.2017 18:05

Цитата:

Сообщение от рони (Сообщение 450453)
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.

рони 20.04.2017 18:15

KEMPZOR,
спасибо... но увы не помогло понять

Dilettante_Pro 20.04.2017 18:21

KEMPZOR,
Закономерность непонятная.
100 - (35) = 65
Почему 35 а не 95? Или 100? или еще что-то?

И при чем здесь 6?

KEMPZOR 20.04.2017 20:34

Цитата:

Сообщение от Dilettante_Pro (Сообщение 450463)
KEMPZOR,
Закономерность непонятная.
100 - (35) = 65
Почему 35 а не 95? Или 100? или еще что-то?

И при чем здесь 6?

100 - сумма.
6 - количество месяцев.
35 - сумма, которая изымается каждый месяц.
Я так предполагаю что нужно делать через цикл ?

рони 20.04.2017 20:52

KEMPZOR,
почему не 35 35 30 ? а 35 35 20 5

KEMPZOR 20.04.2017 21:36

Цитата:

Сообщение от рони (Сообщение 450480)
KEMPZOR,
почему не 35 35 30 ? а 35 35 20 5

Да, 30 тоже нормально, но хотелось просто чтобы число было кратно 5, если такое возможно. То есть (30 = 25 + 5) (20=15 + 5) (10= 5+5) и всё остальное по нулям.

рони 20.04.2017 21:53

Цитата:

Сообщение от KEMPZOR
число было кратно 5,

30 разве не кратно 5?
Цитата:

Сообщение от KEMPZOR
То есть (30 = 25 + 5) (20=15 + 5) (10= 5+5)

не осилил это, не понимаю, что вы этим хотите сказать.

KEMPZOR 20.04.2017 22:19

Цитата:

Сообщение от рони (Сообщение 450487)
30 разве не кратно 5?
не осилил это, не понимаю, что вы этим хотите сказать.

Приехал домой, покушал, собрался с мыслями, вроде получилось, посмотрите на мою реализацию, подскажите как сделать теперь с 1000, получается везде 35.
https://jsfiddle.net/KEMPZOR/64nnq1p9/

рони 20.04.2017 22:41

Цитата:

Сообщение от KEMPZOR
подскажите как сделать теперь с 1000

:blink: знать бы ещё что вы хотите сделать?

KEMPZOR 21.04.2017 10:23

Цитата:

Сообщение от рони (Сообщение 450497)
:blink: знать бы ещё что вы хотите сделать?

Если ставим 1000 на 6, должно получиться
1 - 35
2 - 35
3 - 35
4 - 35
5 - 35
6 - 825

Последний такой должен быть 825.

рони 21.04.2017 11:01

KEMPZOR,
алгоритм формирования чисел так и не понял, помочь не могу.

KEMPZOR 26.04.2017 02:05

Цитата:

Сообщение от рони (Сообщение 450523)
KEMPZOR,
алгоритм формирования чисел так и не понял, помочь не могу.

Извините Рони, на примере 100 на 6 месяцев я ввёл Вас в заблуждение, правильно будет вот так:
0 - 50
1 - 50
2 - 0
3 - 0
4 - 0
5 - 0
6 - 0

0 - Это первый платёж, остальные по месяцам.

KEMPZOR 26.04.2017 11:13

Цитата:

Сообщение от рони (Сообщение 450497)
:blink: знать бы ещё что вы хотите сделать?

Если 1000 на 6 мес, то правильно будет так.

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), значит подходит.

Помогите пожалуйста решить задачку, за мной не заржавеет (заплачу денежку).

Dilettante_Pro 26.04.2017 17:38

Сумма (кратная 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>

Насчет денежки - пускай себе ржавеет, лучше пусти эти средства на изучение арифметики

KEMPZOR 27.04.2017 16:55

Цитата:

Сообщение от Dilettante_Pro (Сообщение 451122)
Сумма (кратная 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>

Насчет денежки - пускай себе ржавеет, лучше пусти эти средства на изучение арифметики

Сделал под свой лад, всё работает как надо, единственное что не получается, это меньше чем 244 некоторые числа не правильно считает, например 100.
<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. Арифметику подтяну, обещаю )))

Dilettante_Pro 27.04.2017 17:18

KEMPZOR,
Цитата:

Сообщение от KEMPZOR
меньше чем 244 некоторые числа не правильно считает, например 100.

100 неправильно считается?
0 - 50
1 - 50
2 - 0 - это неправильно?
Еще какие неправильно?

Это условие соблюдается? Сумма должна быть кратной 5, не меньше 35

Или суммы бывают произвольные? Я это не предусматривал - платежи по месяцам кратные 5.
Правда, попробовал, снял ограничение по кратности 5 - все считается правильно, даже с копейками. Ошибок не увидел.

KEMPZOR 27.04.2017 17:33

Цитата:

Сообщение от Dilettante_Pro (Сообщение 451209)
KEMPZOR,

100 неправильно считается?
0 - 50
1 - 50
2 - 0 - это неправильно?
Еще какие неправильно?

Если так то правильно.
Если ввожу 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>

Dilettante_Pro 27.04.2017 17:40

KEMPZOR,
Цитата:

Сообщение от KEMPZOR
Если ввожу 232 month 6.
0 - 95
1 - 42.00
Неправильно, не хватает 95.

Откуда у вас такие цифры?

Сумма :<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>

KEMPZOR 27.04.2017 18:04

Цитата:

Сообщение от Dilettante_Pro (Сообщение 451212)
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 количества месяцев, пост №19.
<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:

Dilettante_Pro 27.04.2017 18:47

Цитата:

Сообщение от KEMPZOR
Я сделал по своему примеру, у меня так показывает.
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 некорректно

Что за бред?

Сумма :<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>

KEMPZOR 27.04.2017 20:18

Цитата:

Сообщение от Dilettante_Pro
Что за бред?

Ну смотри как я получаю это число.
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);

Dilettante_Pro 27.04.2017 22:02

KEMPZOR,
Вы нарушаете последовательность - вместо 0,1,2... вы делаете 0,2,3... и отсюда проистекает бред и ошибки

KEMPZOR 27.04.2017 23:15

Цитата:

Сообщение от Dilettante_Pro (Сообщение 451226)
KEMPZOR,
Вы нарушаете последовательность - вместо 0,1,2... вы делаете 0,2,3... и отсюда проистекает бред и ошибки

Ну а как тогда не нарушая последовательность получить с 1000, у меня по другому не выходит, подскажите пожалуйста :help:

0 - 140
1 - 140
2 - 140
3 - 140
4 - 140
5 - 140
6 - 160

Dilettante_Pro 28.04.2017 08:23

KEMPZOR,
А чем вам не нравится мой вариант пост 24? Зачем вы его портите?

KEMPZOR 28.04.2017 08:42

Цитата:

Сообщение от Dilettante_Pro (Сообщение 451231)
KEMPZOR,
А чем вам не нравится мой вариант пост 24? Зачем вы его портите?

Мне ваш вариант нравиться, просто приходится подстраиваться под потребности руководства, мой пример считает правильно , решить вопрос с подсчётом меньше 244, всё будет классно.

Dilettante_Pro 28.04.2017 11:02

KEMPZOR,
Цитата:

Сообщение от KEMPZOR
приходится подстраиваться под потребности руководства

Интересно, что это за потребности, которым мой вариант не соответствует?
Цитата:

Сообщение от KEMPZOR
мой пример считает правильно , решить вопрос с подсчётом меньше 244,

Это как раз говорит о том, что он считает неправильно.
Попробуйте мой вариант по любым суммам не меньше 35 и по любым периодам - есть хоть один вариант, в котором что-то не так?

Мой пример работает по следующим правилам:
1. Сумма должна закрываться за время, не большее указанного периода. Первая часть - сразу же, остальные - каждый месяц.
2. Части не должны быть меньше 35.
3. Все части одинаковые и кратные 5, за исключением последней, которая закрывает остаток суммы.

KEMPZOR 29.04.2017 11:04

Цитата:

Сообщение от Dilettante_Pro
Это как раз говорит о том, что он считает неправильно.
Попробуйте мой вариант по любым суммам не меньше 35 и по любым периодам - есть хоть один вариант, в котором что-то не так?

Ок, по вашему варианту, например число 110 период 3.
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, не ?

KEMPZOR 29.04.2017 12:51

Всё, разобрался почему считало меньше 244 некорректно, решил проблему так, работает как надо.
tempPay = summa / period; 
   while (summa <= 244 && tempPay < 35) {
   period--;
   tempPay = summa / period;
   }

Dilettante_Pro 29.04.2017 19:50

KEMPZOR,
Костыль, нужный только из-за того, что сначала вы зачем-то завышаете период


Часовой пояс GMT +3, время: 16:12.