Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.03.2017, 05:23
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Как засунуть в цикл?
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}
итд

подскажите плиз! как сократить
Ответить с цитированием
  #2 (permalink)  
Старый 06.03.2017, 07:58
Кандидат Javascript-наук
Отправить личное сообщение для Diphenyl Oxalate Посмотреть профиль Найти все сообщения от Diphenyl Oxalate
 
Регистрация: 21.01.2017
Сообщений: 139

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

var koef = (1 - (plosh - 3) / 33).toPrecision(2);
Ответить с цитированием
  #3 (permalink)  
Старый 06.03.2017, 08:47
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

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>

Последний раз редактировалось рони, 06.03.2017 в 08:53.
Ответить с цитированием
  #4 (permalink)  
Старый 06.03.2017, 08:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от 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);
Ответить с цитированием
  #5 (permalink)  
Старый 06.03.2017, 09:17
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

ksa,
если plosh = 20?
Ответить с цитированием
  #6 (permalink)  
Старый 06.03.2017, 09:43
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от рони
если plosh = 20?
Это вопрос к ТСу...
У него такие варианты не обрабатываются в примере...
Ответить с цитированием
  #7 (permalink)  
Старый 06.03.2017, 09:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от ksa
У него такие варианты не обрабатываются в примере...
Сообщение от j0hnik
else if (plosh <= 5.0) {var koef = 0.93} итд
Ответить с цитированием
  #8 (permalink)  
Старый 06.03.2017, 12:10
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от 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
Изображения:
Тип файла: jpg Screenshot from 2017-03-06 12-02-25.jpg (14.9 Кб, 11 просмотров)
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук

Последний раз редактировалось nerv_, 06.03.2017 в 12:12.
Ответить с цитированием
  #9 (permalink)  
Старый 06.03.2017, 16:22
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Спасибо всем =))) столько ответов.
Ответить с цитированием
  #10 (permalink)  
Старый 06.03.2017, 16:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от j0hnik
столько ответов
Мы народ легкий, заводной! (с)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как совместить setTimeout и цикл for? vlad35 Общие вопросы Javascript 18 24.10.2016 14:41
Как добавить в append цикл Cdelphi78 Элементы интерфейса 5 02.03.2016 22:40
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
как сделать чтобы цикл не запускался второй раз Brook Events/DOM/Window 5 12.05.2013 21:43
Как поместить javascript в php цикл do{} while() galap Общие вопросы Javascript 4 09.04.2010 14:57