Как сравнить 2 числа?
- Войдите на сайт для отправки комментариев
Чт, 16/01/2020 - 19:42
Имеется 2 числа,оба могут находиться в диапазоне от 880 до 1080,как их сравнить по разрядно?
например 2 десятичных числа-1011 и 1010,мы то отличие видим,что в разряде единиц цифры отличаются,а в разрядах десятков,сотен и тысяч одинаковые,а как программно определить равны ли разряды единиц,десятков,сотен и тысяч отличаются или нет?
Имеется 2 числа,оба могут находиться в диапазоне от 880 до 1080,как их сравнить по разрядно?
очевидно, что числа надо разбить на разряды - то есть 880 это будет 0-8-8-0, а 1080 -1-0-8-0 - и каждый разряд сравнить отдельно. Это и будет "поразрядно"
Сделал так,но работает не корректно
работает не корректно
а конкретнее?
Так вроде и сделал-разряды разбил,но!
1011 и 1010-показывает разницу,а вот 1010 и 1011-не показывает!мистика
Это мне надо для приемника на RDA5807 и дисплея ILI9341,частота на дисплее 880-1080 (точка искуственная),при перестройке частоты на 1 приходиться перерисовывать все значение частоты,например была 1011,стало 1010,это занимает много времени,быстрее понять в каком разряде изменилось значение и отрисовать только этот разряд,да и помех приему меньше
Вот подпрограмма вывода на дисплей-
почему 1010 и 1011 не показывает разницы - не вижу, но в целом у вас в логике ошибка. Подумайте, как будет работать ваш код, если разница будет не в одной цифре, а в двух, например 1010 и 1009
если числа 1010 и 1009,то есть на экране частота 1010,и она сменилась на 1009,то как я хочу-
сравниваем тысячные-одинаковые,не перерисовываем
сравниваем сотые-одинаковые,не перерисовываем
сравниваем десятки-отличаются,стираем 1 и рисуем 0
сравниваем единицы-отличаются,стираем 0 и рисуем 9
XOR
Спасибо!нашел ошибку,лишние freqOld=freq; в сравнениях!!!
Вот так теперь
Тему можно закрыть!еще раз огромное спасибо!
использование глобальных переменных внутри функции - плохой стиль
так?
Во-первых, так вообще работать не будет - buffer потеряли.
Ну и кроме того, касаемо стиля стало еще хуже - теперь в процедуре Frequence() куча глобальных параметров, описанных непонятно где и используемых "втемную". Уж лучше прежний вариант верните :)
Если надо сравнивать не числа, а символы в строке, то я бы так и поступил (хоть это и неизящно): законвертил два числа в две ASCIIZ строки и пробежался по ним циклом. Символ не совпадает - перерисовываем.
b707 по мне так в посте 5 для меня нагляднее,там норм?
b707 по мне так в посте 5 для меня нагляднее
ну и оставьте. Это я уже придираться стал. Главное работает
оставил так,еще раз спасибо!
Мой вариант (для обдумывания):
А у меня частоты тоже целыми хранятся, дак я их абычна так вывожу
из 870 - 1080 делает 87.0 - 108.0
А просто рисую точку и все,никаких лишних вычислений,каждый разряд имеет свое знакоместо на дисплее
А просто рисую точку и все,никаких лишних вычислений,каждый разряд имеет свое знакоместо на дисплее
В частном случае использования семисегментника для отображения - да, метод годный. Но не всегда используется семисегментник ;) И поэтому дополнительные вычисления делать приходится (например, шрифты могут использоваться пропорциональные, а не моноширинные).
А просто рисую точку и все,никаких лишних вычислений,каждый разряд имеет свое знакоместо на дисплее
В частном случае использования семисегментника для отображения - да, метод годный. Но не всегда используется семисегментник ;) И поэтому дополнительные вычисления делать приходится (например, шрифты могут использоваться пропорциональные, а не моноширинные).
какой семисегментник? вы тему читали? дисплей ILI9341! и зачем для точки выделять знакоместо 72*96 пикселей (шрифт 6*8 ,увеличение в 12 раз) пикселей мне не понятно...нарисовал искуственно точку и забыл
Tft.drawString(buffer, 80, 90, 12, BLUE);
какой семисегментник? вы тему читали? дисплей ILI9341! и зачем для точки выделять знакоместо 72*96 пикселей (шрифт 6*8 ,увеличение в 12 раз) пикселей мне не понятно...нарисовал искуственно точку и забыл
Tft.drawString(buffer, 80, 90, 12, BLUE);
В любом случае, семисегментник или нет - это частный случай. Шрифты - бывают разные. Например, в библиотеке UTFT - они моноширинные, в других библиотеках - есть пропорциональные. Во втором случае, "нарисованная искусственно" точка по фиксированным координатам, при использовании пропорционального шрифта - может вызвать эффект визуальной "разорванности". Именно поэтому я и написал - это конкретно частный случай, великолепно заточенный либо под семисегментник (моноширинный шрифт однозначно), либо - под моноширинный шрифт на TFT-дисплее.
Я чего-то не понимаю. Если есть желание сравнить два числа, то надо вычесть из одного другое. Если сравнивать по разрядно, то такая-же петрушка. Выделить разряды каждого и вычесть из одного другое.
Что же касается получения значения определённого разряда числа - то вот, навскидку, вариант, без кучи if и использования pow. Запустить можно здесь: http://cpp.sh/37krb
Как посчитать кол-во разрядов числа - тоже мог бы подсказать, но из палаты не выпускают.
как не в дырочку? пост http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/kak-sravnit-2-chisla#comment-508117 ,это ваши семисегментники не в тему
не хотел вам грубить,просто вы достали с этой точкой,которая только у вас вызывает чувство "разорванности"
Извините!
как не в дырочку? пост http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/kak-sravnit-2-chisla#comment-508117 ,это ваши семисегментники не в тему
не хотел вам грубить,просто вы достали с этой точкой,которая только у вас вызывает чувство "разорванности"
Извините!
Строго говоря - я пишу не только для вас. В том числе и для людей, которые понимают, что контроллеров TFT-дисплеев - множество, а не только ILI9341. В том числе - для людей, которые понимают, что инструменты для вывода информации на дисплей, включая библиотеки и шрифты - могут использоваться разные. И именно поэтому я упомянул, что ваше решение - только частный случай, и объяснил, почему.
Если моя точка зрения вызывает у вас бугурт, то повторюсь - попейте новопассит. Но здесь я, также как и вы - имею полное право высказать свою точку зрения, и буду это делать независимо от того, какие такие слова и сентенции вас достают, и почему что-то странное и нехорошее происходит с вашей психикой. Надеюсь, я вполне доходчиво объяснил.
Еще возник вопрос,не по теме-тачскрину,здесь задавать или плодить еще темы?
Еще возник вопрос,не по теме-тачскрину,здесь задавать или плодить еще темы?
Какой контроллер тачскрина - для начала?
У меня только сама панель тачскрина от дисплея SPFD5408 ,без контроллера,в файле "TFTv2.h" есть строки-
Также в примере программы "POINT" есть библиотека "#include <SeeedTouchScreen.h>",ее я нашел https://github.com/Seeed-Studio/TFT_Touch_Shield_V2 ,будет ли работать? если заработает то можно отказаться от кнопок,тогда вообще будет красота!
Тач - резистивный, ничего не мешает попробовать, тем более - есть с чего начать. Вот тут нашёл статейку, там про ваш тачскрин, похоже: https://misc.ws/2013/11/08/touch-screen-shield-for-arduino-uno/
На форуме тоже мелькало: http://arduino.ru/forum/apparatnye-voprosy/deshevyi-tft-24-displei-na-spfd5408
Также похоже, что указанная вами библиотека от SeedStudio тоже подойдёт.
К сожалению ILI9341 с тачскрином и TSC2046 стоит в другом проекте,если здесь тач не заработает придется выдернуть оттуда контроллер
Попробую подключить тач без контроллера,спасибо!
Работает!!! огромное спасибо!
только подправил
Пока так,осталось добавить часы и термометр
(120 28 это координаты нажатия на тач,для отладки)