Страницы

18.05.2016

Как разбить число на разряды для вывода на индикатор

Для вывода двух-, трех- или четырех- значного числа на сегментный индикатор необходимо это число предварительно подготовить. Разбивка числа на разряды и есть тема этого поста. Кто то скажет, что эта тема и яйца выеденного не стоит, а для кого то это может быть неразрешимой проблемой. Для себя я представил решение этой задачи следующим образом. Поскольку задача стоит выводить целое число,
заключенное в переменной типа int, можно воспользоваться делением  с последующим округлением до целого.
Если речь идет о четырехзначном числе, деление его на 1000 даст в целой части результата требуемое значение цифры тысяч. Отняв от числа тысячи, делим остаток на 100 и получаем в целой части количество сотен. Процесс повторяем, пока не получим значение единиц.
Математика получается такая:

                   Исходное число 1234
                                                1234 / 1000 = 1, (234) - отбросим остаток, результат = 1
                                                1234 - 1 * 1000 = 234
                                                234 / 100 = 2, (34) - отбросим остаток, результат = 2
                                                234 - 2 * 100 = 34
                                                34 / 10 = 3, (4) - отбросим остаток, результат = 3
                                                34 - 3 * 10 = 4 - получаем число единиц = 4

Код получился такой:

 int razr[4] = {0, 0, 0, 0};   // определяем массив для хранения поразрядно заданного числа DIGIT
unsigned int DIGIT = 1234;            // число, которое будем разбивать на разряды
void setup() {
}
void loop() {
  razr[0] = DIGIT / 1000;             // целая часть от деления будет соответствовать количеству тысяч в числе
                                      // результат заносим в массив под номером 0
  unsigned int cifra = razr[0] * 1000;// вспомогательная переменная
  razr[1] = (DIGIT - cifra) / 100;    // получем количество сотен
  cifra += razr[1] * 100;             // суммируем сотни и тысячи
  razr[2] = (DIGIT - cifra) / 10;     // получем десятки
  cifra += razr[2] * 10;              // сумма тысяч, сотен и десятков
  razr[3] = DIGIT - cifra;            // получаем количество единиц

// теперь наш массив содержит значение числа, разбитого на отдельные цифры
}

Комментариев нет:

Отправить комментарий