реклама на сайте
подробности

 
 
> Проблема с преобразованиями
max_mart
сообщение Nov 22 2011, 05:22
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Здравствуйте.
Реализую клавиатуру числовую 0-9. Для окончания ввода использую клавишу принятия ввода. Работаю с 1,2,3,4,5 значными цифрами, если введено чило, содержащее более 5 цифр, то ошибка. Как преобразовать из двоично-десятичной формы в двоичную знаю.
Но вот как реализовать сохранение группы нажатых цифр в одну переменную 16-битную - вот проблема. Например ввели число 4563, надо чтобы оно было сохранено в 16-битной переменнойи и цифры были сохранены в нужной мне последовательности после нажатия клавиши "accept".
Помогите, пожалуйста, в данной проблеме?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение Nov 22 2011, 06:39
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (max_mart @ Nov 22 2011, 13:22) *
Здравствуйте.
Помогите, пожалуйста, в данной проблеме?

Здравствуйте!
Необходимо, как говорят, отделить мух от котлет)
Отдельно реализуйте функции ввода с клавиатуры, отдельно складывайте числа в переменную.

Пусть у Вас есть функция readKey(), которая возращает скан-код нажатой клавиши, или, если есть буфер, то позволяет считать последовательность нажатых кнопок.

Допустим, Вы приняли коды 15, 13, 17, 18, которые обозначают цифры 5, 3, 7 и 8. Коды могут быть любыми, зависит от аппаратной реализации клавиатуры. Могут быть и сразу необходимые нам цифры. Однако у клавиши "ВВОД" все равно будет какой-то свой код, например 20.

Как из скан-кодов получить цифры, объяснять не буду. Используется вычитание.

Поскольку, как правило, заранее не известно, сколько разрядов будет в числе, Вы не знаете сколько цифер введет пользователь, прежде, чем нажать "ВВОД". Следовательно, цифры необходимо складывать в буфер.

Затем считаете количество цифр. Так Вы знаете сколько разрядов необходимо. В нашем случае 4 (цифры 5, 3, 7 и 8). Значит максимальное число, введенное пользователем, может быть 9999. Проверяете, входит в 16 разрядов. Да, входит, в независимости от того, знаковая или беззнаковая переменная используется. Если бы не входила - выдали бы ошибку, не задумываясь.

Далее, из буфер выбираете цифры в любом порядке, но с учетом веса. Например 5 - это тысячи, 8 - единицы.

Далее, проходясь циклом по буферу, выбираете цифру, домножаете на "вес" и суммируете результат в переменную, предварительно ее обнулив.

Примерно так (цикл не пишу нарочно, просто по шагам):

uint16_t sum.

sum = 0;

sum += 5 * 1000;
sum += 3 * 100;
sum += 7 * 10;
sum += 8;

Вроде все. Если ошибся, коллеги поправят rolleyes.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- max_mart   Проблема с преобразованиями   Nov 22 2011, 05:22
- - Navovvol   Цитата(max_mart @ Nov 22 2011, 08:22) Здр...   Nov 22 2011, 06:21
- - stells   Цитата(max_mart @ Nov 22 2011, 09:22) Пом...   Nov 22 2011, 06:27
- - Navovvol   Можно сделать еще интересней. Допустим диапазон от...   Nov 22 2011, 06:40
|- - haker_fox   QUOTE (Navovvol @ Nov 22 2011, 14:40) Мож...   Nov 22 2011, 06:49
- - stells   так все красиво расписывают: буфер , ОЗУ... вопро...   Nov 22 2011, 06:49
|- - haker_fox   QUOTE (stells @ Nov 22 2011, 14:49) так в...   Nov 22 2011, 06:57
|- - stells   Цитата(haker_fox @ Nov 22 2011, 10:57) Ав...   Nov 22 2011, 06:58
|- - haker_fox   QUOTE (stells @ Nov 22 2011, 14:58) а по-...   Nov 22 2011, 07:05
- - max_mart   Во первых я замарачиваться не стал сделал клаву пр...   Nov 22 2011, 07:16
|- - stells   Цитата(max_mart @ Nov 22 2011, 11:16) 5 ц...   Nov 22 2011, 07:20
- - max_mart   мне нужно число 0-65535. Если мне надо будит больш...   Nov 22 2011, 07:34
- - Navovvol   к сожалению я ни черта не понимаю в С/С++   Nov 22 2011, 08:21
- - hd44780   Автор, как я понял, хочет получить, допустим, числ...   Nov 22 2011, 09:48
|- - haker_fox   QUOTE (hd44780 @ Nov 22 2011, 17:48) Буфе...   Nov 22 2011, 09:57
- - max_mart   нет не матрица. Всего 9 клавиш. Я не могу сообраз...   Nov 22 2011, 10:10
|- - ut1wpr   Цитата(max_mart @ Nov 22 2011, 14:10) нет...   Nov 22 2011, 10:49
- - max_mart   Не понял: зачем умножать на 10 и для чего прибавля...   Nov 22 2011, 11:08
|- - hd44780   Цитата(max_mart @ Nov 22 2011, 14:08) зач...   Nov 22 2011, 11:39
- - max_mart   ладно подумаю на накопителем. цифр всего 5, а мак...   Nov 22 2011, 11:54
|- - ut1wpr   Цитата(max_mart @ Nov 22 2011, 15:54) лад...   Nov 22 2011, 12:45
|- - neiver   Цитата(ut1wpr @ Nov 22 2011, 16:45) Не зн...   Nov 22 2011, 14:20
|- - ut1wpr   Цитата(neiver @ Nov 22 2011, 18:20) Здесь...   Nov 22 2011, 15:11
- - max_mart   [удалено]   Nov 22 2011, 14:05
- - max_mart   int GetCodeButton() { if (!ZERO) return 0; ...   Nov 22 2011, 15:36
|- - hd44780   Цитата(max_mart @ Nov 22 2011, 18:36) Хот...   Nov 22 2011, 17:51
- - max_mart   Хотелось бы узнать какое значение получает функция...   Nov 22 2011, 18:31
|- - hd44780   Цитата(max_mart @ Nov 22 2011, 21:31) Как...   Nov 22 2011, 18:34
|- - max_mart   [quote name='max_mart' date='Nov 22 20...   Nov 22 2011, 19:08
- - haker_fox   QUOTE (max_mart @ Nov 22 2011, 15:16) Во ...   Nov 23 2011, 04:40
- - max_mart   Конечно!!! Внутренние подтягивающие ре...   Nov 23 2011, 05:21
- - hd44780   hacker_fox, там и резистор не нужен. Нога МК - кно...   Nov 23 2011, 05:23
|- - haker_fox   QUOTE (hd44780 @ Nov 23 2011, 13:23) hack...   Nov 24 2011, 08:57
- - max_mart   С учетом всего выше сказанного реализую это все. н...   Nov 23 2011, 09:06
|- - hd44780   Ладно, хотите массив, делайте массив. Тоже верно. ...   Nov 23 2011, 13:05
- - max_mart   ))) Извиняюсь!!! Писал в торопях!...   Nov 23 2011, 18:03


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 17:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016