понял, буду принудительно обнулятьWiseLord писал(а):Там может быть любой мусор, в принципе
как проверить число на отрицательность это понятно, мне не понятно как теперь это отрицательное число проверить на разрядность ?
понял, буду принудительно обнулятьWiseLord писал(а):Там может быть любой мусор, в принципе
я бы, во-первых, функцию сделал именно функциейFreshMan писал(а):для определения разрядности числа использую ф-циюкак определить разрядность отрицательного числа ?Код: Выделить всё
void RazradnostChisla (int16_t x) { uint8_t i; while (x>0) { x/=10; ++i; } raz_chisla=i; }
Код: Выделить всё
uint8_t RazradnostChisla (int16_t x)
{
uint8_t i = 0;
while (x>0)
{
x/=10;
++i;
}
return i;
}Я же написал "код" - сделать число положительным и дальше как обычно.FreshMan писал(а):WiseLord писал(а):как проверить число на отрицательность это понятно, мне не понятно как теперь это отрицательное число проверить на разрядность ?
ваши примеры кода безусловно хороши, вот если бы они хоть мало-мальски были прокоментированны.....ARV писал(а):мои примеры кода
ну вы, блин, даёте! ©FreshMan писал(а):если бы они хоть мало-мальски были прокоментированны.....
Код: Выделить всё
void convert(unsigned int NUM){
int i, m;
for(i=MAX_SIZE-1; i>=0; i--){
// цикл заполнения выходного массива СПРАВА НАЛЕВО
m = NUM % DIG_BASE; // находим остаток от деления числа на основание
out[i] = SYMBOLS[m]; // этот остаток есть ВЫВОДИМАЯ ЦИФРА
NUM /= DIG_BASE; // уменьшаем число в DIG_BASE раз
}
}Код: Выделить всё
// функция, которая заполняет выходной массив СИМВОЛЬНЫМ представлением числа
// при этом не выводит НЕЗНАЧАЩИЕ ЛЕВЫЕ нули, т.е. число 1 выводится как ' 1'
void trim_convert(unsigned int NUM){
int i, m;
for(i=MAX_SIZE-1; i>=0; i--){
// цикл заполнения выходного массива СПРАВА НАЛЕВО
m = NUM % DIG_BASE; // находим остаток от деления числа на основание
if((NUM==0)&&(i!=(MAX_SIZE-1)))
// если наше число - ноль и вывод НЕ в правую позицию
out[i] = SPACE_CHAR; // то выводим "пустое" место - подавляем незначащие нули
else
out[i] = SYMBOLS[m]; // иначе выводим символ нужной ЦИФРЫ
NUM /= DIG_BASE; // уменьшаем число в DIG_BASE раз
}
}Код: Выделить всё
void s_trim_convert(int NUM){
int i, m, sign = 0;
if(NUM <0){
// если число отрицательное
sign = 1; // установим признак наличия знака
NUM *= -1; // а само число возьмем по модулю
}
// выводим уже положительное число
i=MAX_SIZE-1;
do{
// цикл заполнения выходного массива СПРАВА НАЛЕВО
m = NUM % DIG_BASE; // находим остаток от деления числа на основание
if((NUM==0)&&(i!=(MAX_SIZE-1)))
break; // закончим цикл вывода числа
else
out[i] = SYMBOLS[m]; // иначе выводим символ нужной ЦИФРЫ
NUM /= DIG_BASE; // уменьшаем число в DIG_BASE раз
} while (--i >= 0);
// число выведено, проверяем свободное место и выводим при необходимости знак
if (i < 0) return; // места не хватает - выход
if (sign) out[i--] = NEG_CHAR; // выводим знак, если нужно
for(; i>=0;i--) out[i] = SPACE_CHAR; // очищаем незначащие позиции
}Код: Выделить всё
void foo(const uint8_t **arr)
{
uint8_t a;
a = **arr[3][5];// так не работает
}ну почему же надолго, может человек находится на стадии обученияWiseLord писал(а): Иногда смотришь в код новичков, где отступы пляшут, как попало, и понимаешь, что с таким подходом новичок надолго им и останется.
существует два основных подхода к программированию: нисходящий и восходящий.FreshMan писал(а):так существует "золотой алгоритм" усовершенствования или нет ?
оказывается все уже придумано и написано до насARV писал(а):http://arv.radioliga.com/content/view/106/49/FreshMan писал(а):как ее надо усовершенствовать чтобы она разлаживала 3-х и более разрядные числа ?
Код: Выделить всё
// функция, которая заполняет выходной массив СИМВОЛЬНЫМ представлением числа
// при этом не выводит НЕЗНАЧАЩИЕ ЛЕВЫЕ нули, т.е. число 1 выводится как ' 1'
void trim_convert(unsigned int NUM){
int i, m;
for(i=MAX_SIZE-1; i>=0; i--){
// цикл заполнения выходного массива СПРАВА НАЛЕВО
m = NUM % DIG_BASE; // находим остаток от деления числа на основание
if((NUM==0)&&(i!=(MAX_SIZE-1)))
// если наше число - ноль и вывод НЕ в правую позицию
out[i] = SPACE_CHAR; // то выводим "пустое" место - подавляем незначащие нули
else
out[i] = SYMBOLS[m]; // иначе выводим символ нужной ЦИФРЫ
NUM /= DIG_BASE; // уменьшаем число в DIG_BASE раз
}
}
FreshMan писал(а):как при помощи оной ф-ции выводить часы, минуты и секунды ?
как вы понимаете все эти переменные должны быть на своих знакоместах
Код: Выделить всё
//for(i=MAX_SIZE-1; i>=0; i--){
// цикл заполнения выходного массива СПРАВА НАЛЕВО, начиная с заданной позиции на 2 разряда
for(i=pos; i>pos-2;i--)логичноWiseLord писал(а):Можно и проще.