Математическая задача

Аватара пользователя
DrMario
Лейтенант
Сообщения: 373
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 60
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

Математическая задача

#1

Сообщение DrMario » 09.02.2022{, 02:53}

Помогите решить задачу по математике с двумя переменными.
Переменные C D - это два байта, могут принимать значение 0-255. Правильный ответ должен быть от -128 до +128, но он получается неправильный, голову уже сломал.
ups.PNG
Схема
ups.PNG (10.37 КБ) 773 просмотра
ups.flp
Пример
(136.63 КБ) 24 скачивания
Снимок.PNG
Исходная формула
Снимок.PNG (1.61 КБ) 773 просмотра

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Математическая задача

#2

Сообщение com » 09.02.2022{, 05:07}

DrMario писал(а):
09.02.2022{, 02:53}
Помогите решить задачу по математике с двумя переменными
У вас же там подсказка 0.5!! , может до тяпницы подождать? :D . В общем, поменяйте тип данных в математических блоках с integer на float :yes: :smile9:
Первая строка с типом данных float, вторая строка integer
СпойлерПоказать
0.5.jpg
СпойлерПоказать
IMG_20220209_072953.jpg
Последний раз редактировалось com 09.02.2022{, 05:37}, всего редактировалось 1 раз.

Naladchik
Капитан
Сообщения: 827
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 155
Откуда: Новосибирск
Имя: Павел

Математическая задача

#3

Сообщение Naladchik » 09.02.2022{, 05:32}

DrMario писал(а):
09.02.2022{, 02:53}
...получается неправильный...
СпойлерПоказать
111.png
111.png (7.58 КБ) 756 просмотров
Если Вам нужно получить на выходе 0,5 используйте float, integer - это целочисленный тип данных.
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Математическая задача

#4

Сообщение Sancho » 09.02.2022{, 08:33}

DrMario писал(а):
09.02.2022{, 02:53}
Помогите решить задачу по математике с двумя переменными.
DrMario писал(а):
09.02.2022{, 02:53}
Пример
В Вашем случае, примера, уберём общий знаменатель и получим:
С + D/256 - 128 =
Что имеем на выходе при байтах и округлении до байта по 0.5
С-128 и +1 при D > 127
Как-то так.

Отправлено спустя 5 минут 32 секунды:
Что-бы получить указанный Вами диапазон, нужно привести результат к типу char, он же int8_t, а затем, желательно, к integer.
Однако, для каждого конкретного компилятора нужно смотреть результат.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 785
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Математическая задача

#5

Сообщение Dryundel » 09.02.2022{, 10:11}

Ха-ха. И ни одного грамотного ответа. Даже Sancho, перемудрил. :) Не выспались похоже.
Самый правильный из ответов это предложение от com. Вычисления будут верными, но зачем же заставлять контроллер с самого начала работать с float. Это тяжелые вычисления.
Вроде бы мудрее поступил Naladchik, добавив float только при делении, т.к. до этого дробных быть не может. Однако он позабыл про самое первое действие умножения. Там два integer, значит и на выходе первого блока будет integer а это -32768… 32767. Умножив 256 * 255 = 65280. В результате будет ошибка. Нужен long int на любом из входов.
Теперь Sancho. :)
Он упростил формулу. Это хорошо. Но почему...
Sancho писал(а):
09.02.2022{, 08:38}
Что имеем на выходе при байтах и округлении до байта по 0.5
С-128 и +1 при D > 127
С + D/256 - 128 = 255 + 255/256 - 128 = 127 (при округлении) почему до +1? Точно не выспался. :yes:

А вот это для чего? Я вообще не понял.
Sancho писал(а):
09.02.2022{, 08:38}
Что-бы получить указанный Вами диапазон, нужно привести результат к типу char, он же int8_t, а затем, желательно, к integer.
Да и в вопросе топикстартера ошибка:
DrMario писал(а):
09.02.2022{, 02:53}
Правильный ответ должен быть от -128 до +128 ...
Исходя из формулы результат не может быть "+128" , максимум 127

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Математическая задача

#6

Сообщение Sancho » 09.02.2022{, 10:28}

Dryundel писал(а):
09.02.2022{, 10:11}
Теперь Sancho.
Он упростил формулу. Это хорошо. Но почему...
Dryundel писал(а):
09.02.2022{, 10:11}
С + D/256 - 128 = 255 + 255/256 - 128 = 127 (при округлении) почему до +1? Точно не выспался.
Если операции с байтами, то результат округляем: при D менее или равно 127 то d/256 даст 0, при более 127 результат деления на 256 примем 1
Только с аргументом 128 в уравнении не понятно, т.к. 128 более половины байта, будут сложности с типами.
Итого:
255 + 255/256 - 128 = 255 + 1 - 128 = 128 - это переполнение int8_t
0 + 0 - 128 = -128 это в пределах типа.
Dryundel писал(а):
09.02.2022{, 10:11}
А вот это для чего? Я вообще не понял.

да вроде как
DrMario писал(а):
09.02.2022{, 02:53}
Переменные C D - это два байта, могут принимать значение 0-255. Правильный ответ должен быть от -128 до +128, но он получается неправильный, голову уже сломал.
Тут правда засада, указанный диапазон, от -128 до +128, выходит за рамки 8 бит.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 785
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Математическая задача

#7

Сообщение Dryundel » 09.02.2022{, 10:45}

Sancho писал(а):
09.02.2022{, 10:28}
Если операции с байтами, то результат округляем:
А никто не говорил что результат должен быть байтовым или целочисленным.

Ну тогда так и говори.
Sancho писал(а):
09.02.2022{, 10:28}
при D менее или равно 127 то d/256 даст 0, при более 127 результат деления на 256 примем 1
А то любишь людей запутывать. :)
Sancho писал(а):
09.02.2022{, 08:38}
В Вашем случае, примера, уберём общий знаменатель и получим:
С + D/256 - 128 =
Что имеем на выходе при байтах и округлении до байта по 0.5
С-128 и +1 при D > 127

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Математическая задача

#8

Сообщение Sancho » 09.02.2022{, 10:50}

Dryundel писал(а):
09.02.2022{, 10:45}
А то любишь людей запутывать.
Сорян, не до конца изложил мысль,
Dryundel писал(а):
09.02.2022{, 10:11}
Даже Sancho, перемудрил. Не выспались похоже.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Математическая задача

#9

Сообщение com » 09.02.2022{, 11:10}

Ничего се зубры поляну натоптали :D. ТС какую задачу поставил? Что бы было 0,5.! А уж как там да чего там моя незнай :smile469: я честно говоря и так доволен тем, что чуть чуть приблизился к волшебству программирования благодаря Автору, иначе все это так и осталось бы мечтой. Хорошо в детстве ознакомился и освоил логику, счетчики компаратор. Досих пор поражаюсь, только по книжкам и без какой либо практики в железе. Так что чем мог тем помог

Аватара пользователя
dekorator
Лейтенант
Сообщения: 427
Зарегистрирован: 06.09.2015{, 09:39}
Репутация: 7
Откуда: Баку

Математическая задача

#10

Сообщение dekorator » 09.02.2022{, 14:48}

Еще вариант с блоком "scale". Жаль он с Float не работает.
Скрины- ups.flpПоказать
ups.flp_Лист1.png
ups.png
ups.flp
(392.28 КБ) 24 скачивания

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 785
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Математическая задача

#11

Сообщение Dryundel » 09.02.2022{, 15:37}

dekorator писал(а):
09.02.2022{, 14:48}
Еще вариант с блоком "scale". Жаль он с Float не работает.
Ну так можно же умножить вход и выход на 100 например, а потом вернуть его во float делением.

Отправлено спустя 18 минут 11 секунд:
Я к стати думал про масштабирование, но так бросил эту мысль. С утра лень было.
А задачка очень просто решается двумя блоками масштабирования и одним сложением. (если дробные не нужны)
Если же требуются то в начале умножаем на коэффициент 10 или 100 или 1000 а потом делим результат на него же.

Отправлено спустя 22 минуты 52 секунды:
Во! Готово.
Оба варианта.
Проверяйте, должно работать.
Скрин решенияПоказать
Задачка.jpg
Задачка.flp
(192.92 КБ) 30 скачиваний
Отправлено спустя 20 минут 52 секунды:
Похоже топикстартер сдулся. Погиб при решении задачи. В 3 часа ночи по Москве. Написал просьбу о помощи и все! Это было его последнее посещение.
Наверное ударился головой об подушку и потерял сознание. :D

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

Математическая задача

#12

Сообщение AndrejK » 10.02.2022{, 20:23}

Можно спросить... Зачем конвертировать в стринг? Что это дает?
Вложения
С конвертацией.PNG
Без конвертации.PNG

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

Математическая задача

#13

Сообщение AlexCrane » 10.02.2022{, 20:28}

AndrejK писал(а):
10.02.2022{, 20:23}
Можно спросить... Зачем конвертировать в стринг? Что это дает?
Визуальную читаемость человеком
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

Математическая задача

#14

Сообщение AndrejK » 10.02.2022{, 21:03}

Одинаково... :smile37:
Вложения
Стринг.PNG
Стринг
Без Стринг.PNG
Без Стринг

com
Капитан
Сообщения: 831
Зарегистрирован: 31.05.2018{, 22:12}
Репутация: 83
Откуда: Санкт-Петербург
Имя: Ринат

Математическая задача

#15

Сообщение com » 10.02.2022{, 21:09}

AndrejK писал(а):
10.02.2022{, 20:23}
Можно спросить... Зачем конвертировать в стринг? Что это дает?
Попробуйте вывести такие данные в integer из разных источников на вход UART : 123, 456, 789, "№;%?*

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

Математическая задача

#16

Сообщение AndrejK » 10.02.2022{, 21:19}

com писал(а):
10.02.2022{, 21:09}
"№;%?*
Это не integer.
А так опять не понял зачем вызывать функцию конвертации в string. :smile37: :smile37:

Отправлено спустя 12 минут 9 секунд:
Плюс память...
Вложения
123456789.PNG
Integer
С конвертацией2.PNG
С конвертацией.
Без конвертации2.PNG
Без конвертации.
Без конвертации2.PNG (9.18 КБ) 596 просмотров

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 785
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Математическая задача

#17

Сообщение Dryundel » 10.02.2022{, 21:44}

AndrejK писал(а):
10.02.2022{, 20:23}
Можно спросить... Зачем конвертировать в стринг? Что это дает?
В данном случае ничего не дает. Человек видимо по аналогии с LCD вставил блок конвертации.

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

Математическая задача

#18

Сообщение AndrejK » 10.02.2022{, 21:50}

Dryundel писал(а):
10.02.2022{, 21:44}
Человек видимо по аналогии с LCD вставил блок конвертации.
Так и в LCD ничего не дает. Я просто спросил. :smile9:

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 785
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Математическая задача

#19

Сообщение Dryundel » 10.02.2022{, 21:53}

AndrejK писал(а):
10.02.2022{, 21:50}
Так и в LCD ничего не дает.
Да ладно! А ну-ка попробуйте к блоку LCD (HD44780) привязать integer. Удивите нас. :)

AndrejK
Сержант
Сообщения: 119
Зарегистрирован: 20.02.2020{, 13:16}
Репутация: 14
Откуда: Вильнюс
Имя: Андрей

Математическая задача

#20

Сообщение AndrejK » 10.02.2022{, 22:03}

Пожалуйста. viewtopic.php?f=231&t=7890
Просто доработал под STM32 и вывожу float (координаты GPS).

Ответить

Вернуться в «Помогите, а то я "нимагу"»