Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > алгоритм корректировки числа на СИ


Автор: supercelt 5.3.2017, 18:28
Всем привет!

На СИ под микроконтроллер.

Задача:

есть целое число в 16 разрядной переменной типа uint16_t. Оно равно году = 2317. Год может быть любой из 4 чисел максимум.

Представьте, что это число отобразилось на дисплее, после набора его на клавиатуре. Но юзер ошибся, ведь сейчас 2017. И он нажимает backspace и курсор послушно двигаясь назад выводит на эран 231, потом нажимает ещё и 23, ещё раз и 2. Потом печатает уже 2017. Задача состоит в том, что бы когда юзер нажал первый раз на стирание, то в переменной бы стало 2310, ещё нажал -  2300, ещё - 2000, и наконец - 0. Задача скорее математическая. И надо учесть, что цифры могут быть абсолютно любые, нет привязки к тысячилетию и т.д. И работаем не со строкой, а с числом. Например может быть 5448 год. И тогда получится 5440 - 5400 - 5000 - 0
Помогите пожалуйста придумать как это сделать)

Автор: vpf 5.3.2017, 18:49
Код

        int year = 2317;
        print("Скорректируйте число > " + year);
        for (int i = 0; i < 4; i++) {
            inkey();
            year /= 10;
            print("Новое значение >" + year);
        }
 //результаты на печать
Скорректируйте число > 2317
<
Новое значение >231
<
Новое значение >23
<
Новое значение >2
<
Новое значение >0

Общий смысл это последовательное деление на 10.
inkey() некая функция ввода с клавиатуры.



Автор: supercelt 5.3.2017, 19:06
спасибо!

Автор: supercelt 5.3.2017, 19:49
Код

switch(count_symbol){
                                                                case 3:
                                                                        year = (year / 10) * 10;
                                                                break;
                                                                case 2:
                                                                        year = (year / 100) * 100;
                                                                break;
                                                                case 1:
                                                                        year = (year / 1000) * 1000;
                                                                break;
                                                                case 0:
                                                                        year = 0;
                                                                break;
                                                        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)