Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.78/27: Рейтинг темы: голосов - 27, средняя оценка - 4.78
MyskSmyth
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 72
1

остаток от деления

22.11.2012, 12:34. Просмотров 5039. Ответов 20
Метки нет (Все метки)

Добрый день!
столкнулся с проблемой.
пишу
Код
a=(a%100);
в остатке получаются 2 цифры. например ,15
если остаток с нулем т.е ,05 то в "а" у меня просто 5
Возможно ли как то обойти это?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 12:34
Ответы с готовыми решениями:

Остаток от деления в си
Казалось бы всё ясно.. ан нет. Я на си больно то не писал ничего серьёзного может я чё туплю......

Найти частное от деления нацело N на K, а также остаток от этого деления
Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти частное...

Найти частное от деления нацело N на K, а также остаток от этого деления
While3. Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти...

Найти частное и остаток от деления нацело без операции деления
1)Дано целое число A (> 0) и целое число B (> 0). Найти долю Q и остаток R от деления нацело числа...

Найти частное от деления нацело N на K, а также остаток от деления
Даны целые положительные числа N и K. Используя только операции сложения и вычитания, найти...

20
VyvotzorD
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 2,309
22.11.2012, 12:38 2
А как остаток может быть дробным? Из начальной школы ясно сказано, что при делении получается частное - целое число, и остаток - целое число. В итоге все записывается так: <целое частное> <остаток>/<делитель>
Пример: надо разделить 13 на 5 получаем результат 2 целых и 3/5 (три пятых). Вот как раз 3 - это остаток.
0
kytikot
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
22.11.2012, 12:40 3
Если предположить, что речь идет о целых числах (ибо автор ничего нам про это не сказал), то скорее всего происходит вот что:

а =105
а%100 =5

И нет там никакой десятичной точки. А незначащие нули никогда практически не принимаются во внимание. Что не нравится в результате???
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
22.11.2012, 12:41 4
Цитата Сообщение от MyskSmith
... если остаток с нулем т.е ,05 то в "а" у меня просто 5 ...
Не понял, можно перефразировать понятнее?
0
22.11.2012, 12:41
sirki962
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 124
22.11.2012, 12:45 5
a=((a%100)/10+a%10)
Это?
0
MyskSmyth
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 72
22.11.2012, 12:46 6
Все просто
Что бы не связаться с плавучкой, я представляю числа в виде целого. например 5,25 я представляю как 525.
соответственно, что бы мне вывести такое число на дисплей, мне надо вначале получить целое от деления, затем напечатать точку и получить остаток от деления.
Но всплыло, что при получении остатка, у меня получается машинный ноль, который я не могу преобразовать в символ.
Kitkat правильно изобразил суть проблемы.
Вот чешу репу, как бы это изящно решить.
0
VyvotzorD
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 2,309
22.11.2012, 12:48 7
Дык я ж написал. У тебя есть делитель - 100. 5 - это пять сотых, остаток. Дальше дело только отобразить...
0
kytikot
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
22.11.2012, 12:49 8
Если ТС это отображает на дисплее, через перевод в символьные строки - то да, над этим нужно подумать.

char buf[3];

b = a%100;
if (b<10) { buf[0]=0; itoa(b,buf+1,10); }
else itoa(b,buf,10);
....
lcd_puts(buf);

------------
Только проверитьнадо аргументы функции itoa(), я их точно не помню на память.
0
MyskSmyth
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 72
22.11.2012, 12:51 9
Цитата Сообщение от sirki962
a=((a%100)/10+a%10)
Это?
нет, такой вариант не прокатывает.
Суть в чем, я результат преобразую в строку символов. а тут получается просто число 5 например, хотя перед ним должен быть 0. Если в остатке получается ,15 то все прокатывает. Преобразование дает два символа 1 и 5
0
kytikot
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
22.11.2012, 12:52 10
Вместо

if (b<10) { buf[0]=0; itoa(b,buf+1,10); }

можно применить не всегда переносимый хак (hack)

if (b<10) { buf[0]=0; buf[1]=0+b; buf[2]=\0; }
0
MyskSmyth
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 72
22.11.2012, 12:56 11
Цитата Сообщение от kytikot
Вместо

if (b<10) { buf[0]=0; itoa(b,buf+1,10); }

можно применить не всегда переносимый хак (hack)

if (b<10) { buf[0]=0; buf[1]=0+b; buf[2]=\0; }
Логично, спасибо.
О результате отпишусь.
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
22.11.2012, 12:58 12
А может просто использовать BCD арифметику?
0
VyvotzorD
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 2,309
22.11.2012, 13:02 13
2 omokost
Кстати тоже вариант. А в AVR есть команды BCD коррекции???
0
MyskSmyth
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 72
22.11.2012, 13:06 14
Цитата Сообщение от omokost
А может просто использовать BCD арифметику?
Т.е утаптывать в одном байте две цифры?
Я думал об этом, но как то лень клепать доп код.
Получится доп преобразование.
Делал как то устройство с сегментным индикатором. Мысль так поступить первая в голову пришла. Сделал а потом узнал, что это называется BCD:-)
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
22.11.2012, 13:13 15
Цитата Сообщение от VyvotzorD
А в AVR есть команды BCD коррекции???
Цитата Сообщение от MyskSmith
Т.е утаптывать в одном байте две цифры?
Нет, команд BCD коррекции в AVR нет. Но они нужны только если две цифры упакованы в один байт (упакованный BCD формат). Вам просто нужна свободная библиотека для работы с неупакованным BCD форматом. Думаю найдете, и не одну.
0
MyskSmyth
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 72
22.11.2012, 13:50 16
Цитата Сообщение от omokost
Цитата Сообщение от VyvotzorD
А в AVR есть команды BCD коррекции???
Цитата Сообщение от MyskSmith
Т.е утаптывать в одном байте две цифры?
Нет, команд BCD коррекции в AVR нет. Но они нужны только если две цифры упакованы в один байт (упакованный BCD формат). Вам просто нужна свободная библиотека для работы с неупакованным BCD форматом. Думаю найдете, и не одну.
Да думаю и библиотеки не нужно. Функции не сложно написать самому.
Вопрос в целесообразности. Ресурсы то не резиновые.
Вот когда я выводил на сегментный индикатор, там да. Был единственный правильный и оптимальный способ.
А в случаем с знаковым дисплеем мне проще сразу число в строку преобразовать. Только коррекцию надо доделать. Всяко легче чем BCD городить.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
22.11.2012, 13:53 17
остаток нужно было искать поразрядно (несколько раз %10, а не сразу %100), а не на всю "дробную" часть сразу. изящнее некуда.
0
omokost
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
22.11.2012, 14:03 18
Цитата Сообщение от MyskSmith
Вот когда я выводил на сегментный индикатор, там да. Был единственный правильный и оптимальный способ.
А в случаем с знаковым дисплеем мне проще сразу число в строку преобразовать. Только коррекцию надо доделать. Всяко легче чем BCD городить.
А в чем принципиальное различие? На сегментный индикатор вы выводили цифру за цифрой, при этом еще и разряды считали. На энаковый дисплей все так же надо выводить цифру за цифрой, только счетчик знакомест в дисплее инкрементирутся.
0
MyskSmyth
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 72
22.11.2012, 14:17 19
Цитата Сообщение от omokost
Цитата Сообщение от MyskSmith
Вот когда я выводил на сегментный индикатор, там да. Был единственный правильный и оптимальный способ.
А в случаем с знаковым дисплеем мне проще сразу число в строку преобразовать. Только коррекцию надо доделать. Всяко легче чем BCD городить.
А в чем принципиальное различие? На сегментный индикатор вы выводили цифру за цифрой, при этом еще и разряды считали. На энаковый дисплей все так же надо выводить цифру за цифрой, только счетчик знакомест в дисплее инкрементирутся.
там было удобно таблицу кодировки с BCD увязать.
0
MyskSmyth
0 / 0 / 0
Регистрация: 13.10.2012
Сообщений: 72
22.11.2012, 14:38 20
Все, спасибо. решил вопрос как предложил Kitket. Получилось тремя строчками отделаться.
Код
if (a<10)
{
*(buf+sm)=0;
++sm;}
.....
0
22.11.2012, 14:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2012, 14:38

Написать программу, которая используя функции mod (остаток от деления) и div (целая часть от деления)
Написать программу, которая используя функции mod (остаток от деления) и div (целая часть от...

Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления
Помогите с решением Даны целые положительные числа N и K. Используя только операции сложения и...

Используя только операции сложения и вычитания, найти частное от деления нацело N на K, а также остаток от этого деления
Реализовать данные задания с помощью циклов с предусловием или циклов с постусловием. Даны целые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru