подскажите как переместить символ

Клапауций 567
Offline
Зарегистрирован: 17.02.2018

Penni пишет:

Можно DUE взять там double двойной точности как положено.

кому положено?

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

ELITE пишет:

вот только что в паскале, что даже в Си шарпе 0.1+0.1=0.2000001 , и если откинуть всё дальше 1 знака после точки, что 0.1+0.1 таки и дадут 0.2 и никак иначе.

Так ты ж говорил, что тебе 9 знаков надо? И что, получишь ты там свои 9 знаков?

ELITE пишет:

всёравно мне не понятнео, кто и главное зачем лобирует распространение Си и С++ ....и почему они упорно не хотят исправлять его недоработки , тормознутость и глючность....

Ты читать не умеешь или просто идиот? Я ж тебе писал, что это не С, это стандарт реализации чисел с плавающей точкой. Он применяется везде в том числе и в аппаратных реализациях.

ELITE пишет:

что вы можете предложить, как специалисты, в решении возникшей задачи

Тебе - ничего. Во-первых, толком ты не сформулировал задачу. Ты выдал только свои безграмотные подходы к решению, а о задаче надо догадываться. А во-вторых, для реализации 10-разрядной десятичной арифметики у тебя просто нет необходимых знаний.

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Penni пишет:

Можно DUE взять там double двойной точности как положено.

Ты и впрямь думаешь, что ему это поможет? По-моему, такому специалисту хоть double, хоть long double - один хрен. С-то всё равно нечестный!

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Клапауций 567 пишет:

Penni пишет:

Можно DUE взять там double двойной точности как положено.

кому положено?

Не кому, а чем. Стандартом.

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Ворота пишет:

Penni пишет:

Можно DUE взять там double двойной точности как положено.

Ты и впрямь думаешь, что ему это поможет? По-моему, такому специалисту хоть double, хоть long double - один хрен. С-то всё равно нечестный!

Ну это уже другой вопрос, пусть сам выбирает ввязываться или нет :)

Клапауций 567
Offline
Зарегистрирован: 17.02.2018

пусть возьмёт dtostre(), укажет нужную точность и прекратит трахать мосг форумчанам.

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

что вы можете предложить, как специалисты, в решении возникшей задачи

я вижу только вариант убрать точку и работать с целым числом.

вы  можете подсказать, есть ли еще варианты решения? и какие?

задача-то какая? Для каких расчетов вы используете координаты с такой точностью? Вы там выше писали. что координаты нужны для вывода на экран.

Я не удивлюсь, если окажется. что число вам вообще не нужно - и достаточно строки. Например, чтобы записывать координаты в лог.

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

отсюда вопрос к профи ардуины - как решить сложившуюся проблему для точных вычислений с правильным округлением для чисел в 8 знаков (4 или 6 после точки)

Давайте перейдем от абстрактных знаков после точки к реальному миру и выясним, нахера весь этот сыр-бор.  4 знака после точки в формате GPS (5432.5656) или 6 знаков в формате целых градусов - 54.325656 - обеспечивают точность примерно +- 30см на местности. 30 САНТИМЕТРОВ, Карл!!!

ELITE!!! - поведайте нам модель вашего GPS - это должен быть выдающийся прибор, если вам нужны координаты до 6-ого знака.

Если вернутся на землю, обычные GPS приемники в самых отличных условия дают точность до 3-5м, а в среднем -10-20м. То есть точность определения координат - порядка географической секунды (31м по экватору). И знаки после 5-ого, а то и после 4-ого - это просто ШУМ.

Вывод - максимум, что имеет смысл брать от этих чисел - это пять знаков (точность 3м), а вообще хватит и 4х.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

b707 пишет:

ELITE пишет:

что вы можете предложить, как специалисты, в решении возникшей задачи

я вижу только вариант убрать точку и работать с целым числом.

вы  можете подсказать, есть ли еще варианты решения? и какие?

задача-то какая? Для каких расчетов вы используете координаты с такой точностью? Вы там выше писали. что координаты нужны для вывода на экран.

Я не удивлюсь, если окажется. что число вам вообще не нужно - и достаточно строки. Например, чтобы записывать координаты в лог.

 

С ЖПС получаются данные (посимвольно чар)

далее 2 задачи

1) писаль лог на СД - тут да, я на прямую пишу

2) - обсчитывать полученные данные - а именно вычислять пройденый путь и скорость

ЖПС умеет отдавать скорость - но она очень не точная, особенно при движении на склонах погрешность до 20% может быть, что много - поэтому скорость надо высчитывать исходя из пройденного пути , перепада высоты и времени между полученными данными 

отсюда я упираюсь в точность рассчета пути 

использую функцию

double distance_between (double lat1, double long1, double lat2, double long2) 
{
  double delta = radians(long1-long2);
  double sdlong = sin(delta);
  double cdlong = cos(delta);
  lat1 = radians(lat1);
  lat2 = radians(lat2);
  double slat1 = sin(lat1);
  double clat1 = cos(lat1);
  double slat2 = sin(lat2);
  double clat2 = cos(lat2);
  delta = (clat1 * slat2) - (slat1 * clat2 * cdlong); 
  delta = sq(delta); 
  delta += sq(clat2 * sdlong); 
  delta = sqrt(delta); 
  double denom = (slat1 * slat2) + (clat1 * clat2 * cdlong); 
  delta = atan2(delta, denom); 
  return delta * 6367445; //6372795; 
}

она пока сильно упрощена и дает +-1% на плоскости (не учитывает перепад высоты и не учитывает  широту)

но тк координаты приходят в формате ХХ.УУУУУУ то отклонение в 1 знак = +- 3 метров на 54 широте

а тк точность вычисления с такой погрешностью идет и в рассчет скорости - то она еще больше прыгает

а все пройденый путь и скорость мне надо максимально точные для отображение на экране

ЖПС модуль GT-1613SKR

 

при полевых испытаниях на отрезке в 10км погрешность составила порядка 500 метров - это очень много

при этом испытание проводил уже несколько раз - подбирал коэфициенты, но если скорость (с самого ЖПС) еще более-менее точно показывает, то путь рассчитать никак не могу хотябы +- 50 метров на 10км

в качестве "эталона" смартфон, китайский жпс трекер и гармин - между ними +-10 метров на 10 км отклонения

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

но тк координаты приходят в формате ХХ.УУУУУУ то отклонение в 1 знак = +- 3 метров на 54 широте

ошибка - 6 знак это 30 см

ELITE пишет:
точность вычисления с такой погрешностью идет и в рассчет скорости - то она еще больше прыгает

она у вас прыгает, потому что сами координаты прыгают вплоть до 4-ого знака. И эти погрешности вы расчетом не уберете.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ELITE пишет:

С ЖПС получаются данные (посимвольно чар)

Все нормальные библиотеки умеют выдавать числа.

Например, TinyGPS

// lat/long in MILLIONTHs of a degree and age of fix in milliseconds
  // (note: versions 12 and earlier gave lat/long in 100,000ths of a degree.
  void get_position(long *latitude, long *longitude, unsigned long *fix_age = 0);

  // date as ddmmyy, time as hhmmsscc, and age in milliseconds
  void get_datetime(unsigned long *date, unsigned long *time, unsigned long *age = 0);

  // signed altitude in centimeters (from GPGGA sentence)
  inline long altitude() { return _altitude; }

  // course in last full GPRMC sentence in 100th of a degree
  inline unsigned long course() { return _course; }

  // speed in last full GPRMC sentence in 100ths of a knot
  inline unsigned long speed() { return _speed; }

  // satellites used in last full GPGGA sentence
  inline unsigned short satellites() { return _numsats; }

  // horizontal dilution of precision in 100ths
  inline unsigned long hdop() { return _hdop; }

  void f_get_position(float *latitude, float *longitude, unsigned long *fix_age = 0);
  void crack_datetime(int *year, byte *month, byte *day, 
    byte *hour, byte *minute, byte *second, byte *hundredths = 0, unsigned long *fix_age = 0);
  float f_altitude();
  float f_course();
  float f_speed_knots();
  float f_speed_mph();
  float f_speed_mps();
  float f_speed_kmph();

Так чего не брать готовые числа? Чего мозг-то выносить?

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

она пока сильно упрощена и дает +-1% на плоскости (не учитывает перепад высоты и не учитывает  широту)

НЕ УЧИТЫВАЕТ ШИРОТУ??????  пляяяяя :)))))))))))))))

Вы в курсе, что длина градуса долготы меняется по широте от 111км на экваторе до нуля на полюсе? Например, на широте Казани одна секунда уже не 31м, а чуть больше 20. Какую точность вы хотите получить, не учитывая широту?

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

я пробовал разные библиотеки для ЖПС - да они отдают более красиво всё, но и ресурсов больше жрут, а с этим на нано у меня в притык...

используя свой парсер мне удалось съэкономить 15% памяти по сравнению с TinyGPS и TinyGPS++

я заказал себе мегу - но щас китайский НГ и придет она минимум через 1.5 месяца...

и да, приведенная функция рассчета пути взята из TinyGPS

еще проблема библиотек - они отдают числа, но точно также сами не обрабатывают полученную информацию - итого стоит заехать в зону плохого ЖПС сигнала - как скачки могут быть в сотни км - это в любом случае надо отдельно перепроверять и исключать явно неверные данные

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, удачи!

b707
Offline
Зарегистрирован: 26.05.2017

ИЛИТЕ, имхо, для такой задачи нужен IQ на пару десятков выше .... Вы постоянно путаетесь в трех соснах. Даже если вы доведете проект до "финала" - уверен, это будет невероятное глюкало, непригодное к реальной жизни.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

b707 пишет:

ELITE пишет:

но тк координаты приходят в формате ХХ.УУУУУУ то отклонение в 1 знак = +- 3 метров на 54 широте

ошибка - 6 знак это 30 см

ELITE пишет:
точность вычисления с такой погрешностью идет и в рассчет скорости - то она еще больше прыгает

она у вас прыгает, потому что сами координаты прыгают вплоть до 4-ого знака. И эти погрешности вы расчетом не уберете.

ЖПС прыгает в пределах 5-6 знака максимум+- 10-20 единиц (с окна) и +- 3-5 единиц на улице (в машине)

наприме с окна один из наибольших погрешностей между соседними замерами по логу

Lat: 54.324020
Lon: 36.181209
 и
Lat: 54.323997  // -0,000023
Lon: 36.181221 // +0,000012
 
погрешность составляет ~2.6 метра 

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

b707 пишет:

НЕ УЧИТЫВАЕТ ШИРОТУ??????  пляяяяя :)))))))))))))))

Вы в курсе, что длина градуса долготы меняется по широте от 111км на экваторе до нуля на полюсе? Например, на широте Казани одна секунда уже не 31м, а чуть больше 20. Какую точность вы хотите получить, не учитывая широту?

вот поэтому надо получать для конвертации максимально точные числа, и вводить поправочный коэффициент в зависимости от широты

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

ЖПС прыгает в пределах 5-6 знака максимум+- 10-20 единиц (с окна) и +- 3-5 единиц на улице (в машине)

Что означает, что 6-й знак в принципе бесполезен, а пятый - только в хороших условиях. Реально даже 4й не вполне точен.

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

вот поэтому надо получать для конвертации максимально точные числа, и вводить поправочный коэффициент в зависимости от широты

вывод неверный. Если вы измеряете длину линейкой, которая врет в 1.5 раза - ловить доли миллиметра не имеет ни малейшего смысла.

И то. что до вас это не доходит.... подтверждает мой вывод выше.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

b707 пишет:

ELITE пишет:

ЖПС прыгает в пределах 5-6 знака максимум+- 10-20 единиц (с окна) и +- 3-5 единиц на улице (в машине)

Что означает, что 6-й знак в принципе бесполезен, а пятый - только в хороших условиях. Реально даже 4й не вполне точен.

тут я вынужден с вами согласиться, 6й знак практически не важен, но вот 5й уже надо учитывать.

но вот в чем всё дело, с чего это всё началось

при переводе из ЧАР в ФЛОАТ отличия были начиная с 5го знака. а порой и 4й +-1 прыгал 

а иметь погрешность в ЖПС на 5-6 знак и + погрешность при переводе 5-6 знак (а то и 4й) + при вычислениях с плавающей точкой пройденого пути = итого набегает очень большие погрешности... в плоть до десятков метров, даже если сам жпс вернул с точностью 2 метра

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

а иметь погрешность в ЖПС на 5-6 знак и + погрешность при переводе 5-6 знак (а то и 4й) + при вычислениях с плавающей точкой пройденого пути = итого набегает очень большие погрешности... в плоть до десятков метров, даже если сам жпс вернул с точностью 2 метра

Если вы не учитываете поправку на широту, то там ошибка и в километры будет.

Что касается собственно задачи - нормальный программист легко ее решит. Например, можно выделять градусы и минуты в целые числа типа байт, а во флоат - только секунды с долями. И точность перевода будет на 2 порядка выше. чем вам надо.

Я б на вашем месте нанял для проекта программиста. вам самому не вытянуть.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

b707 пишет:

ELITE пишет:

а иметь погрешность в ЖПС на 5-6 знак и + погрешность при переводе 5-6 знак (а то и 4й) + при вычислениях с плавающей точкой пройденого пути = итого набегает очень большие погрешности... в плоть до десятков метров, даже если сам жпс вернул с точностью 2 метра

Если вы не учитываете поправку на широту, то там ошибка и в километры будет.

Что касается собственно задачи - нормальный программист легко ее решит. Например, можно выделять градусы и минуты в целые числа типа байт, а во флоат - только секунды с долями. И точность перевода будет на 2 порядка выше. чем вам надо.

Я б на вашем месте нанял для проекта программиста. вам самому не вытянуть.

программист есть в "запасе" на случай если я не вытяну, хоя я постараюсь.

да и в проекте есть еще и физический датчик для получения оборотов колеса

с ним я уже всё реализовал и проверил, считает стабильно и с хорошей точностью даже на скоростях более 100км/ч, ну там то ничего сложного нет, вся погрешность вылезает только из поворотов и не точности времени у ардуины - хотя они для моего проекта являются незначительными

но всяже вернусть к флоату

---

немного поразмыслив над проектом и тех заданием решил немного поменять подход

распарсеные данные оставлять в чаре

в нем их отправлять на СД карту в лог

также в нем их выводить на дисплей

а переводить в числовой вид убирая точку вообще - работать с целочисленным. по нему уже и считать путь

также тк отрезки замеров малы (несколько метров) - то толку нет брать сложные формулы - всё округлить до простейшего отрузка на плоскости , а в качестве поправки брать широту с точностью до минут (вполне достаточно) и по таблице (массив значений инт) подставлять нужное

а заодно защиту от ложных данных простую - сравнивать время между полученными точками и путь - если итоговая скорость из этого выше 250км/ч - значит данные не верные пришли и не учитывать их

b707
Offline
Зарегистрирован: 26.05.2017

ELITE - еще одна мысль вдогонку. Советую внимательно разобраться в формате координат, выдаваемых вашим GPS.

Дело в том, что запись 5432.5656 может означать как 54 гр 32' 56.56'', так и чисто 54.325656 градусов в десятичном формате. Это приличная разница. Во первом случае "убрать точку и работать как с целым" не получится.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

b707 пишет:

ELITE - еще одна мысль вдогонку. Советую внимательно разобраться в формате координат, выдаваемых вашим GPS.

Дело в том, что запись 5432.5656 может означать как 54 гр 32' 56.56'', так и чисто 54.325656 градусов в десятичном формате. Это приличная разница. Во первом случае "убрать точку и работать как с целым" не получится.

хм, ушел чистать о форматах жпс координат... чтото из школьного курса он был 1... а тут их оказывается 3 разных...

спаисбо, буду читать что мне в итоге более правильно брать....

а я то думаю, что за фигня, меня на 40 км в сторону уводит на некоторых картах, а на некоторых как надо показывает....

по даташиту приемника формат ddmm.mmmm (Градусы, десятичные минуты)

 

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

по даташиту приемника формат ddmm.mmmm (Градусы, десятичные минуты)

В этом случае "убрать точку и перевести в целое" не выйдет.

Надо сначала из строки градусы выделить и убрать, а вот остальное можно либо во флоат, либо целиком в целое

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

я думаю так - все вычисления делаются над градусами, значит сразу в них и конвертировать , при этом число делить на 2 части

градусы = 2 знака

и минуты *10000 (откидываю точку) и 6 знаков /60 = доли градуса

получу формат DDdddddd

------------

так тест

void setup() {
    Serial.begin(9600);
}

void loop() {
char g[12]={'5','4','3','2','.','3','5','7','7'};
char t[6],d[2];
float m=0;

Serial.print("1 g=");Serial.println(g);

g[4]=g[5]; g[5]=g[6]; g[6]=g[7]; g[7]=g[8]; g[8]='0'; //убираю точку
t[0]=g[2]; t[1]=g[3]; t[2]=g[4]; t[3]=g[5]; t[4]=g[6]; t[5]=g[7];  // беру минуты с добями
d[0]=g[0]; d[1]=g[1]; // градусы
Serial.print("2 t="); Serial.println(t);
m=atol(t)/60.0;  //число float
Serial.print("3 m=");Serial.println(m);
m=m/1000000;
Serial.print("4 m=");Serial.println(m,6);
m=m+atoi(d);
Serial.print("5 m=");Serial.println(m,6);



Serial.println("---------------------");
delay(10000);

}


результат

1 g=5432.3577
2 t=32357754
3 m=539295.87
4 m=0.539296
5 m=54.539295
 
--
результат точно соответствует ручному рассчету :)
и на картах точка точно показывается теперь
 
ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

в одну строку без функций

m = ( (g[0]-48)*10 + (g[1]-48) + ( (g[2]-48)*100000 + (g[3]-48)*10000 + (g[5]-48)*1000 + (g[6]-48)*100 + (g[7]-48)*10 + (g[8]-48)  )/600000.0 );
 
результат такой же в итоге
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Жесть!

ELITE пишет:

 g[4]=g[5]; g[5]=g[6]; g[6]=g[7]; g[7]=g[8]; g[8]='0'; //убираю точку
t[0]=g[2]; t[1]=g[3]; t[2]=g[4]; t[3]=g[5]; t[4]=g[6]; t[5]=g[7];  // беру минуты с добями
d[0]=g[0]; d[1]=g[1]; // градусы 

Что, strncpy - происки гнусных лоббистов C?

ELITE пишет:

m=atol(t)/60.0;  //число float

Точно float?

Я уж не говорю, что массивы t и d абсолютно не нужны, а соответственно и половина Вашего копирования нахрен не нужно. Достаточно всего трёх операций присваивания -  сместить символы g[2] и g[3] вправо на 1, а в позицию g[2] поставить '\0'. Сразу получили бы Ваш t по адресу g, а ваш d по адресу g+3

 

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

да, вы правы, надо смещать так

и да, наткнулся на очередные грабли, нельзя переводить чар в инт путем вычитания 48,  в строке с 0 по середине результат будет совсем не ожидаемый

:)

щас перепишу

подскажите, а как можно взять часть массива чар? например с 3 по 8 элементы сразу, как подмассив

b707
Offline
Зарегистрирован: 26.05.2017

ELITE !!!!!!!!!!!!!!!

Ничему вас жизнь не учит. Почему опять массив t[] - 6 элементов, массив d[] - 2 элемента?!! Потом опять будете спрашивать. почему функции atoi и atol не работают?

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

Наймите программиста, блин!

Или просто не пишите сюда. я уже больше не могу читать эту ахинею.

sadman41
Offline
Зарегистрирован: 19.10.2016

Отпишите меня от этой темы, умоляю. 

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

и да, наткнулся на очередные грабли, нельзя переводить чар в инт путем вычитания 48,  в строке с 0 по середине результат будет совсем не ожидаемый

МОЖНО. кроме юзера ELITE

 

ELITE пишет:
подскажите, а как можно взять часть массива чар? например с 3 по 8 элементы сразу, как подмассив

последняя строка сообщения 78 от Евгения

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:

Отпишите меня от этой темы, умоляю. 

+100500!

Предлагаю написать письмо модераторам. чтоб его забанили. Такого идиотизма на пустом месте не припомню. Другому напишешь, что он идиот - тот обидится и уйдет. А этот нет - как не оскорбляй. все равно через день новая тема, одна тупее другой.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018
char g[12]={'3','6','1','8','.','0','2','7','5'};
float m=0;
 
Serial.print("1 g=");Serial.println(g);
g[4]=g[3];g[3]=g[2];g[2]='\0';
 
Serial.print("5 m=");Serial.println(atol(g));
Serial.print("6 m=");Serial.println(atol(strstr((char*)g, "")+3)) ;
Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015
//Serial.print("6 m="); Serial.println(atol(strstr((char*)g, "") + 3)) ;
  Serial.print("6 m="); Serial.println(atol(g+3));
ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

Penni пишет:

//Serial.print("6 m="); Serial.println(atol(strstr((char*)g, "") + 3)) ;
  Serial.print("6 m="); Serial.println(atol(g+3));

Огромное спасибо, нигде еще не встречал, что так можно обращаться к массиву 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Памагити! мне это развидеть.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

del. Виноват Там точка в середине. Только сдвигать тогда 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ELITE пишет:

char g[12]={'3','6','1','8','.','0','2','7','5'};
float m=0;

Serial.print("1 g=");Serial.println(g);
g[4]=g[3];g[3]=g[2];g[2]='\0';

Serial.print("5 m=");Serial.println(atol(g));
Serial.print("6 m=");Serial.println(atol(strstr((char*)g, "")+3)) ;

 

Это что за бред?

То, что раньше было в g[4] Вы просто выбросили за ненадобностью - затёрли нафиг.

А что написано в строке 8 понять невозможно в прицнипе.

Вы не пробовали сначала думать, потом проверять на компьютере, потом снова думать (и так пока проверка не даст хорошего результата) а только потом постить? Чего ж у Вас всё вчено наоборот-то?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ELITE пишет:

нигде еще не встречал, что так можно обращаться к массиву 

Потому что не прочитал НИ ОДНОЙ книжки по языку. Может пора уже, а? Прочитать-то? Ну, чего идиотом себя выставлять?

sadman41
Offline
Зарегистрирован: 19.10.2016

Мастер обфускации 80lvl.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

ЕвгенийП пишет:

ELITE пишет:

char g[12]={'3','6','1','8','.','0','2','7','5'};
float m=0;

Serial.print("1 g=");Serial.println(g);
g[4]=g[3];g[3]=g[2];g[2]='\0';

Serial.print("5 m=");Serial.println(atol(g));
Serial.print("6 m=");Serial.println(atol(strstr((char*)g, "")+3)) ;

 

Это что за бред?

То, что раньше было в g[4] Вы просто выбросили за ненадобностью - затёрли нафиг.

А что написано в строке 8 понять невозможно в прицнипе.

Вы не пробовали сначала думать, потом проверять на компьютере, потом снова думать (и так пока проверка не даст хорошего результата) а только потом постить? Чего ж у Вас всё вчено наоборот-то?

 

ок, вернемся назад, раз этот код вас заинтерисовал

в g[4] была точка - она отброшена нафик была

а 8я строка делает тоже самое, что и [g+3] только результат получается от strstr 

извращенно но этот код тоже работает

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

DetSimen пишет:

del. Виноват Там точка в середине. Только сдвигать тогда 

точка прекновения и была виной этого обсуждения

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ELITE пишет:

извращенно но этот код тоже работает

Это Вы меня типа проконсультировать решили? Что вот такая фигня "тоже работает".

Конечно, работает. куда ж ей деваться. Но понять, зачем человек в здравом уме это написал решительно невозможно. Впрочем, это если "в здравом уме". Как говорил известный киногерой, "До Вас это не относится" :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, кстати, не знаю, что там выдаёт Ваш жпс, но вся эта бодяга будет работать только если после g[11] в памяти идёт 0.

Если такой гарантии нет, его надо туда засунуть перед atol, а потом восстановить старое значение.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

ЕвгенийП пишет:

Да, кстати, не знаю, что там выдаёт Ваш жпс, но вся эта бодяга будет работать только если после g[11] в памяти идёт 0.

Если такой гарантии нет, его надо туда засунуть перед atol, а потом восстановить старое значение.

с этим всё нормально, сбоев нет.

в общем с текущей задачей всё разрешилось, теперь осталось немного подкорректировать функцию рассчета дистанции между точек . 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, дело Ваше. Только знайте. Если после g[11] в памяти '\0' или хотя бы "не цифра", то окей. Но если там попадётся цифра, она приклеется к преобразуемому числу - опять будете говорить. что всё криво и глюкаво.

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

спасибо, учту обязательно

b707
Offline
Зарегистрирован: 26.05.2017

ELITE пишет:

спасибо, учту обязательно

НЕ УЧТЕТЕ!

Приклейте себе над кроватью плакат буквами в 30см высотой

КАЖДЫЙ ЧАР-МАССИВ ДОЛЖЕН ЗАКАНЧИВАТЬСЯ НУЛЕМ, ИДИОТ!!!!!!!!!!!!