![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| MarshallM |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.3.2009 Репутация: нет Всего: нет |
Добрый день форумчане!!!
Возникла у меня необходимость программирования контроллера. На вход поступают 2 четырех-байтовых числа Пусть будет int A[4]; int B[4] Делимое и делитель соответсвенно. Результатом должно явиться целое от деление + остаток. При этом деление должно происходить столбиком, т.к. дополнительные библиотеки не подключаются, т.е. / и % нельзя использовать. Возможно тема обсуждалась, поиском пользовался в течении часа, нужного не нашел. А Си помнится только со времен института))) Давно все это было))) И то, за этот период мозг уже успел подпортится 1С, прошу сильно не пинать))) |
|||
|
||||
| Albor |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 589 Регистрация: 28.2.2009 Репутация: нет Всего: 9 |
Дык, нужно вспомнить Булевую алгебру и без всякого столбика выполнить деление.
PS Обычно, если int 32-разрядный, int A[4] - это 16 байт, так как это массив из 4х int |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
как уже сказано выше - это массив из 32х разрядных чисел. И насчет булевой алгебры точно сказано..могу добавить ссылки
http://www.helpwithpcs.com/courses/multipl...ary-numbers.htm http://www.binarymath.info/multiplication-division.php |
|||
|
||||
| MarshallM |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.3.2009 Репутация: нет Всего: нет |
Albor, точно... в попыках печатал сообщение. это действительно массив из 32х битных чисел. прошу прощение за некорректность вопроса. Булеву алгебру помню)))
Приведу пример: Имеем А={1,2,3,4}; Число 1234 Имеем В={1,2,3}; Число 123 Нужно организовать деление 1234 на 123 используя только вычитание. Т.к. прошивка микропроцессора настолько слаба, что команда printf() подвешивает его на ООООчень продолжительный период времени((( Осталось дело за малым... реализовать данную функцию на С. Есть у кого соображения? |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Обычно с компилятором для микропроцесса идут исходники для всех математических библиотек, используемых в нём (большей частью написанные на ассемблере). Нужно выкусить из них только нужные тебе алгоритмы - это будет работать быстрее, чем вручную писать то же самое на C.
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
||||
|
||||
| MarshallM |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.3.2009 Репутация: нет Всего: нет |
math64, ассемблеровский код есть, проблема в том, что все ост. реализуемые МП функции написаны на С. И дополнительно прошивать компилятор асма не айс, хотелось бы иметь код именно на С. Но вижу что это не совсем просто. Я алгоритм рисовал только втечении дня и то не до конца... слишком сложно все это рационализировать.
Добавлено через 2 минуты и 39 секунд vinter, а если наоборот 123 делим на 1234 (возможно и такая ситуация), ладно 0 я получил, а дальше? из 12300 вычитать 1234, в принципе логично, но вот стоит проблема реализации сего на С. Но большое спасибо все равно!!! В голове стало намного ясней! |
|||
|
||||
| MarshallM |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.3.2009 Репутация: нет Всего: нет |
Вообщем ребята условия задачи несколько поменялись. Переменные имеют тип CHAR и занимают по 1 байту.
Т.е. имеем массив char a[4] - 4 байта. и начинаются танцы с бубном вокруг разрядов, заема единичек и прочей хрени, короче деление столбиком. Надеюсь сейчас выразился яснее... |
|||
|
||||
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
MarshallM, какой должен быть результат? Частное и целый остаток? или только частное? Или вещественный результат? Если вещественный то до какого разряда после запятой считать?
Если частное и целый остаток, то
при этом то частное = 0, а остаток = делимое Добавлено @ 10:08 значит сначала конвертнём наши массивы в целые числа:
индексы может и наоборот будут, я не знаю в каком порядке ты разряды передаешь А если в char'e не готовое значение разряда, а символьная запись цифры, то вместо a[x] подставляем (a[x] - '0') Это сообщение отредактировал(а) ksili - 4.3.2009, 10:10 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| MarshallM |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.3.2009 Репутация: нет Всего: нет |
ksili, смею огорчить тем, что оперировать с переменными типа int и выше я не могу в силу специфики микропроцессора. Максимально хранимая единица памяти имеет значение 1 байт. Т.е. даже при всем желании в ячейку памяти я не смогу запихать четырех байтовое число. А получить в конце мне надо целое число и остаток от деления (опять же в виде массива 1 байтовых "слов").
Это сообщение отредактировал(а) MarshallM - 4.3.2009, 10:25 |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
с этого и надо было начинать... Добавлено через 1 минуту и 8 секунд тогда действительно получается деление в столбик -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| MarshallM |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.3.2009 Репутация: нет Всего: нет |
ksili, значит возвращаемся к нашим баранам))) Есть ли у кого-нибудь алгоритм деления в столбик, реализованный на Си???
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 6 Всего: 44 |
MarshallM, а как интересно должен работать алгоритм деления в столбик если маск память под переменнную 1 байт?
хорошо если значения меньше 255 а если больше то тогда как? ЗЫ что то мне подсказывает что деление столбиком не поможет Это сообщение отредактировал(а) chaos - 4.3.2009, 11:05 |
|||
|
||||
| MarshallM |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 4.3.2009 Репутация: нет Всего: нет |
chaos, ну допустим пусть будет доп условие, что число, составляющее массив А больше числа массива В. Иначе тупо получим 0 без остатка. Теперь по-моему все условия названы, господа программисты!!! Задачка на смекалку)))
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
MarshallM, хочешь готовое - иди в центр помощи
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |