Страница 2 из 5

Re: Помогите с программированием формулы!

Добавлено: Пт фев 14, 2014 7:17 pm
LutsenkoDenis
layet писал(а):Ради такого простого решения библиотеку использовать грешно :D Лишняя трата ресурсов.
Ну это как посмотреть...
Грешно на каждый чих писать новую функцию вместо того, чтобы воспользоваться уже написанной ранее.
Тем более что человек, спрашивая про округление, хотел переводить гектапаскаль в ртутный столб, а данная функция уже написана до него и уже с округлением.

Так что можно при желании создать класс ну например UnitConverter и перенести туда различные функции по переводу из одной ед измерения в другую. Это, на мой взгляд было бы удобно всем.

offtop: OpenWeather я писал для того, что бы выводить данные о погоде с сайта http://openweathermap.org. И в данной либе есть функции по конвертации давления, направления ветра например из NNE в человекопонятное обозначение и т.д.

Re: Помогите с программированием формулы!

Добавлено: Сб фев 15, 2014 6:08 pm
layet
LutsenkoDenis писал(а):
layet писал(а):Ради такого простого решения библиотеку использовать грешно :D Лишняя трата ресурсов.
Ну это как посмотреть...
Грешно на каждый чих писать новую функцию вместо того, чтобы воспользоваться уже написанной ранее.
Тем более что человек, спрашивая про округление, хотел переводить гектапаскаль в ртутный столб, а данная функция уже написана до него и уже с округлением.

Так что можно при желании создать класс ну например UnitConverter и перенести туда различные функции по переводу из одной ед измерения в другую. Это, на мой взгляд было бы удобно всем.

offtop: OpenWeather я писал для того, что бы выводить данные о погоде с сайта http://openweathermap.org. И в данной либе есть функции по конвертации давления, направления ветра например из NNE в человекопонятное обозначение и т.д.
Да я не хотел вас задеть. Я только рад, что вы развиваете проект. Просто хотел, чтобы человек понял что конкретно и как сделать. А насчёт конвертации - возможно действительно стоит подумать над таким модулем.

Re: Помогите с программированием формулы!

Добавлено: Сб фев 15, 2014 6:48 pm
Satgate_M
Не ругайтесь))) Главное, что оба метода отлично работают и кому, что удобнее тот тем и будет пользоваться в зависимости от поставленных задач!
Главное, что все откликаются и готовы помочь!

Re: Помогите с программированием формулы!

Добавлено: Пн фев 17, 2014 1:26 am
LutsenkoDenis
Не мог ответить раньше, т.к. ездил на выходные под Смоленск :)

Собственно никто и не ругается, и не пытается никого задеть. Ну... по крайней мере у меня и в мыслях даже не было кого-либо обидеть или самому обижаться.

Про округление все всё сказали правильно и привели как примеры самого округления, так и ссылку на документацию. В общем, так сказать помогли чем смогли :)

Оpenweathermap я привел в пример, т.к. во первых там уже есть решение задачи, над которой работал автор задавая вопрос про округление.
А во вторых как пример того, что очень часто мы все пишем код, который уже написали за нас другие люди. Причем в 99% случаев делаем это неосознанно, т.к. не известно есть ли такой код в системе.
Взять например этот же перевод давления... ну вот возникла у человека потребность перевести его в ртутные столбы. Вот как можно понять/узнать/догадаться что уже есть такая функция которая это делает? А никак, т.к. не понятно что и где искать. А раз человек не находит нужный ему функционал, то он начинает реализовывать его сам и тем самым дублирует его.

Если говорить о конвертации, хотя это можно отнести и к остальному коду, то на мой взгляд, нужно провести небольшую ревизию кода проекта и выделить функции, которые относятся к переводу различных величин из одной системы в другую в отдельный класс. С комментариями и описанием в вики, так сказать для наглядности. И тогда, при возникновении потребности в переводе, человек будет сначала смотреть, а нет ли нужной функции в данном классе? Это позволит не писать каждый раз свой велосипед, что может уменьшить количество потенциальных ошибок и возможно автоматически снимет некоторые вопросы. Да и если в функции будет ошибка, то её проще исправить один раз в одном месте, чем бегать по коду и справлять.

Но это всего лишь моё мнение, которое может не совпадать с мнением кого-либо ещё.

Re: Помогите с программированием формулы!

Добавлено: Пн май 25, 2015 12:16 pm
Controer
Что нужно написать в коде метода, чтобы с поступившего показания счетчика вычиталось предыдущее показание:
В параметрах метода получаю это:{s:8:"PROPERTY"; s:7:"counter"; s:9:"NEW_VALUE"; s:7:"214.0"; s:9:"OLD_VALUE"; s:7:"200.0"; s:21:"ORIGINAL_OBJECT_TITLE"; s:15:"ESP8266009c7f19"; }

Делаю так, но ничего не вычитается, может не правильно называю переменные?

// получаем значение свойства counter
$counter=$this->getProperty("counter");
// вычисляем скорость ветра
//$wind_speed = (($NEW_VALUE - $OLD_VALUE) * 0.33) / 10;
// записываем значение скорости ветра в свойство wind_speed
$this->setProperty("wind_speed", $wind_speed);

Re: Помогите с программированием формулы!

Добавлено: Пн май 25, 2015 2:07 pm
LutsenkoDenis
Есть ряд вопросов...
  • 1. Что такое 0.33?
  • 2. Что такое 10?
  • 3. Вы уверены что переменные $NEW_VALUE и $OLD_VALUE содержат какие-либо значения?
Небольшой пример для тестаSPOILER_SHOW

Код: Выделить всё

/**
 * GetWindSpeedDiff
 * @param double|int $newSpeed Новое значение скорости ветра
 * @param double|int $oldSpeed Предыдущее значение скорости ветра
 * @return double|int
 */
function GetWindSpeedDiff($newSpeed, $oldSpeed)
{
   $diff = ($newSpeed - $oldSpeed) * 0.33 / 10;
   
   return $diff;
}

$newSpeed = "214.0";
$oldSpeed = 200.0;

if (is_numeric($newSpeed) && is_numeric($oldSpeed))
{
   $diff = GetWindSpeedDiff($newSpeed, $oldSpeed); // Результат: 0.462
   echo $diff;
}
else
{
   echo "Некорректно указаны вводные параметры";
}

Re: Помогите с программированием формулы!

Добавлено: Пн май 25, 2015 3:22 pm
Controer
1. Что такое 0.33? Это коэффициент перерасчета импульсов в скорость ветра
2. Что такое 10? Это время 10 секунд, потому что импульсы приходят каждые 10 секунд
3. Вы уверены что переменные $NEW_VALUE и $OLD_VALUE содержат какие-либо значения? Нет не уверен, ипмульсы приходят на переменную $counter, а в параметрах ниже метода получаю такую информацию, я и думал, что "NEW_VALUE" это новые показания переменной $counter которые равны 214.0 импульсам и "OLD_VALUE" которые соответсвенно равно 200.0

В параметрах метода получаю это:{s:8:"PROPERTY"; s:7:"counter"; s:9:"NEW_VALUE"; s:7:"214.0"; s:9:"OLD_VALUE"; s:7:"200.0"; s:21:"ORIGINAL_OBJECT_TITLE"; s:15:"ESP8266009c7f19"; }

Re: Помогите с программированием формулы!

Добавлено: Пн май 25, 2015 3:31 pm
Controer
Может мне нужно сделать код так:


// получаем значение свойства counter
$counter=$this->getProperty("counter");
// вычисляем скороcть ветра
$wind = (($NEW_counter - $OLD_counter) * 0.33) / 10;
// записываем значение скорости ветра в свойство wind_speed
$this->setProperty("wind", $wind);

Re: Помогите с программированием формулы!

Добавлено: Пн май 25, 2015 4:02 pm
LutsenkoDenis
Думаю лучше попробовать вот так:
SPOILERSPOILER_SHOW

Код: Выделить всё

/**
 * Вычисляем скорость ветра по импульсам
 * @param double|int $newImpulseValue Новое значение импульса
 * @param double|int $oldImpulseValue Предыдущее значение импульса
 * @return double|int
 */
function GetWindSpeedByImpulse($newImpulseValue, $oldImpulseValue)
{
   $secPerImpulse = 10; // приходят каждые 10 секунд
   $impulseToWindSpeedCoeff = 0.33; //коэффициент перерасчета импульсов в скорость ветра
   
   $windSpeed = ($newImpulseValue - $oldImpulseValue) * $impulseToWindSpeedCoeff / $secPerImpulse;
   
   return $windSpeed;
}

/*
 * В параметрах метода получаю это:
 * {s:8:"PROPERTY"; s:7:"counter"; s:9:"NEW_VALUE"; s:7:"214.0"; s:9:"OLD_VALUE"; s:7:"200.0"; s:21:"ORIGINAL_OBJECT_TITLE"; s:15:"ESP8266009c7f19"; } 
 */

// получаем значение свойства counter
$counter = $this->getProperty("counter");

if (is_array($counter))
{
   //проверяем что в $counter есть елементы NEW_VALUE и OLD_VALUE и они числовые, если нет - пишем сообщение об ошибке
   if ((isset($counter["NEW_VALUE"]) && is_numeric($counter["NEW_VALUE"])) && (isset($counter["OLD_VALUE"]) && is_numeric($counter["NEW_VALUE"])))
   {
      $newImpulseValue = $counter["NEW_VALUE"]; //"214.0"; 
      $oldImpulseValue = $counter["OLD_VALUE"]; //200.0;

      $windSpeed = GetWindSpeedByImpulse($newImpulseValue, $oldImpulseValue); // Результат: 0.462
      echo $windSpeed;
      
      // записываем значение скорости ветра в свойство wind_speed
      $this->setProperty("wind_speed", $windSpeed);
   }
   else
   {
      echo "Не корректно указаны вводные параметры";
   }
}
else
{
   echo "Некорректные показания счётчика импульсов.";
   print_r($counter);
}
 

Re: Помогите с программированием формулы!

Добавлено: Пн май 25, 2015 4:03 pm
Controer
Как с переменной $counter, взять новое и старое значение
$NEW_counter и $OLD_counter
или
$NEWcounter и $OLDcounter
Никак не получается!