Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как засунуть в цикл? (https://javascript.ru/forum/misc/67746-kak-zasunut-v-cikl.html)

j0hnik 06.03.2017 05:23

Как засунуть в цикл?
 
if (plosh <= 3) {var koef = 1}
  else if (plosh <= 3.3) {var koef = 0.98}
  else if (plosh <= 3.6) {var koef = 0.97}
  else if (plosh <= 4.0) {var koef = 0.96}
  else if (plosh <= 4.3) {var koef = 0.95}
  else if (plosh <= 4.6) {var koef = 0.94}
  else if (plosh <= 5.0) {var koef = 0.93}
итд

подскажите плиз! как сократить

Diphenyl Oxalate 06.03.2017 07:58

Лучше написать формулу и вычислять по ней

var koef = (1 - (plosh - 3) / 33).toPrecision(2);

рони 06.03.2017 08:47

j0hnik,
<script>
function fn(plosh)
{  var koef = 1;
   for (var i=0,k = 3; k < plosh; i++)  {
      k += (i + 1)% 3 ? .3 : .4;
      k = +k.toFixed(1)
      koef -= i ? 0.01 : 0.02 ;
      koef = +koef.toFixed(2)

   }
   return koef
}
var test = [3,3.3,3.6,4,4.3,4.6,5,5.3];
function foo(plosh)
{
   var koef = (1 - (plosh - 3) / 33).toPrecision(2);
   return +koef
}

for (var i=0; i<test.length; i++)  {
var plosh = test[i];
document.write([plosh.toFixed(1),fn(plosh),foo(plosh) ].join(" = ")+"<br>")
}
document.write("<br>");
for (var i=0; i<test.length; i++)  {
var plosh = test[i]+.1;
document.write([plosh.toFixed(1),fn(plosh),foo(plosh) ].join(" = ")+"<br>")
}
  </script>

ksa 06.03.2017 08:56

Цитата:

Сообщение от j0hnik
Как засунуть в цикл?

Как вариант...

var a=[
	{plosh: 3, koef: 1},
	{plosh: 3.3, koef: 0.98},
	{plosh: 3.6, koef: 0.97},
	{plosh: 4.0, koef: 0.96},
	{plosh: 4.3, koef: 0.95},
	{plosh: 4.6, koef: 0.94},
	{plosh: 5.0, koef: 0.93}
];
var plosh=4;
for (var i=0; i<a.length; i++) {
	if (plosh<=a[i].plosh) {
		var koef=a[i].koef;
		break;
	};
};
alert(koef);

рони 06.03.2017 09:17

ksa,
если plosh = 20?

ksa 06.03.2017 09:43

Цитата:

Сообщение от рони
если plosh = 20?

Это вопрос к ТСу... :D
У него такие варианты не обрабатываются в примере... :no:

рони 06.03.2017 09:51

Цитата:

Сообщение от ksa
У него такие варианты не обрабатываются в примере...

Цитата:

Сообщение от j0hnik
else if (plosh <= 5.0) {var koef = 0.93} итд

:)

nerv_ 06.03.2017 12:10

Вложений: 1
Цитата:

Сообщение от Diphenyl Oxalate
Лучше написать формулу и вычислять по ней

совершенно верно

1. Берешь свои точки, строишь по ним график функции (см. вложение).

2. Убеждаешься, что на интервале от >=3.3 х график, по сути, представляет из себя прямую.

3. Находишь уравнение прямой по двум точкам,

4. Получившееся уравнение заворачиваешь в функцию:
function foo(x) {
  return -0.03266666666666666*x+1.09
}

при этом не забываешь дописать условие для plosh <= 3 (я этого не далал)

5. используешь эту функцию :)

function foo(x) {
  return -0.03266666666666666*x+1.09
}

alert(foo(3.3)) // 0.98
alert(foo(3.6)) // 0.97
alert(foo(4.0)) // 0.96

j0hnik 06.03.2017 16:22

Спасибо всем =))) столько ответов.

ksa 06.03.2017 16:35

Цитата:

Сообщение от j0hnik
столько ответов

Мы народ легкий, заводной! (с) :D


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