Деление числа. (a/b) |
Деление числа. (a/b) |
Cheburashka |
18.07.2009 11:35
Сообщение
#1
|
Бывалый Группа: Пользователи Сообщений: 195 Пол: Мужской Реальное имя: Сергей Репутация: 2 |
Меня затронула одна тема, с которой я ни как не могу справиться. Это деление чисел.
Меня интересует деление одного числа на другое если эти числа находятся в массивах (в каждом элементе одна цифра) или в строках. К примеру массив A{1,1,1,1,1,1}, массив B {1,1,1}. Или в тех же самых строках s1='111111', s2='111'; Расскажите алгоритм по которому можно данные числа разделить в самих массивах (строках). (Перевод числа в переменную целочисленного типа (longint, integer) не предлагать, так как я хочу использовать длинную арифметику.) -------------------- ♣♣♣
"Себя великим не считай, гордясь величьем предков, Величья не добудешь ты и золота ценою! Хоть светит на небе луна, но отраженным светом - Чужою славой не живи, не будь второй луною!!!" ♣♣♣ |
amega |
18.07.2009 11:48
Сообщение
#2
|
? Группа: Пользователи Сообщений: 283 Пол: Мужской Репутация: 4 |
я знаю ток как просходит деление(умножение) двоичных чисе в ЭВМ.. незнаю подойтет тибе или нет?
|
volvo |
18.07.2009 12:05
Сообщение
#3
|
Гость |
Посмотри у Окулова, там все хорошо написано: http://inf.1september.ru/2000/1/art/okul1.htm
Процедуры, написанные по Окулову, лежат у нас в FAQ-е ("Длинная арифметика"). |
Cheburashka |
18.07.2009 14:23
Сообщение
#4
|
Бывалый Группа: Пользователи Сообщений: 195 Пол: Мужской Реальное имя: Сергей Репутация: 2 |
Просто понимаете Окулов пишет такие, что начинающему программисту не понять (если я даже не знаю как пишутся процедуры и функции). Можете просто обычным простеньким алгоритмом объяснить мне как это работает?
-------------------- ♣♣♣
"Себя великим не считай, гордясь величьем предков, Величья не добудешь ты и золота ценою! Хоть светит на небе луна, но отраженным светом - Чужою славой не живи, не будь второй луною!!!" ♣♣♣ |
volvo |
18.07.2009 15:00
Сообщение
#5
|
Гость |
Цитата если я даже не знаю как пишутся процедуры и функции , то ты эту задачу не решишь (или решишь - но ОЧЕНЬ неэффективно.) |
Cheburashka |
18.07.2009 15:01
Сообщение
#6
|
Бывалый Группа: Пользователи Сообщений: 195 Пол: Мужской Реальное имя: Сергей Репутация: 2 |
Ну может быть это и так, но можете объяснить как это можно сделать?
-------------------- ♣♣♣
"Себя великим не считай, гордясь величьем предков, Величья не добудешь ты и золота ценою! Хоть светит на небе луна, но отраженным светом - Чужою славой не живи, не будь второй луною!!!" ♣♣♣ |
Lapp |
19.07.2009 7:41
Сообщение
#7
|
|||
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Многострадальный раздел "Теория языка Паскаль" снова подвергается нападению.. Сергей, тебя что, интересует, как именно деление реализовано в TP? Если это вопрос про общий алгоритм - то и задавай его в разделе Алгоритмы!
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
|||
Lapp |
19.07.2009 8:15
Сообщение
#8
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Если ты хочешь делить непосредственно в той системе счисления, в которой записаны числа (типа в десятичной), то в самом первом приближении деление реализуется по алгоритму, который ты знаешь с начальной школы: деление "уголком". Для этого (если ты еще помнишь, что проходил в первом классе)) нужно уметь умножать и вычитать, а для умножения (столбиком) нужно сложение. Так что сначала тебе придется реализовать сложение, вычитание и умножение. Дальше действуй непосредственно по агоритму "уголка": бери первые разряды от делимого, делитель умножай последовательно на числа, начиная с 1 и до основания системы (в десятичном случае от 1 до 10) пока результат не превысит взятый кусок делимого. Тогда к результату приписываешь цифру, на единицу меньшую множителя. Вычитаешь из этого куска произведение цифры на делитель, потом "сносишь цифру" (приписываешь справа) из делимого и повторяешь процесс, пока цифр для сноса не останется...
Это сильно неформальное описание, нуждающееся в доработке и оптимизации, но общий принцип такой. Кстати, тут есть некоторое пересечение с параллельной темой (про перестановки). Дело в том, что деление - это обратная операция к умножению. То есть, разделить a на b - это значит найти корень уравнения b*x=a. И если в операции умножения все определено (возьми a кучек по b предметов и пересчитай), то в делении приходится подбирать ответ (в уголке - брать по 4, по 5...) И это отражается на алгоритме (перебор всех цифр). Это чисто философское замечание, не особо заморачивайся, просто подумай)). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Cheburashka |
20.07.2009 12:13
Сообщение
#9
|
Бывалый Группа: Пользователи Сообщений: 195 Пол: Мужской Реальное имя: Сергей Репутация: 2 |
Извините, но я что-то запутался) Не могли бы вы написать примерчик какой-нибдь?
-------------------- ♣♣♣
"Себя великим не считай, гордясь величьем предков, Величья не добудешь ты и золота ценою! Хоть светит на небе луна, но отраженным светом - Чужою славой не живи, не будь второй луною!!!" ♣♣♣ |
Lapp |
21.07.2009 7:27
Сообщение
#10
|
Уникум Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Не могли бы вы написать примерчик какой-нибдь? ммммм.... Ну, попробую..539123948201 : 1756 result=0 Берем первую цифру делимого: 5 < 1756 сносим цифру: 53 < 1756 сносим цифру: 539 < 1756 сносим цифру: 5391 > 1756 (!) try 1 1*1756=1756 <= 5391 try 2 2*1756=3512 <= 5391 try 3 3*1756=5268 <= 5391 try 4 4*1756=7024 >= 5391 (!) result = result*10+3 = 3 вычитаем: 5391-5268=123 сносим цифру: 1232 < 1756 result = result*10 = 30 сносим цифру: 12323 > 1756 (!) try 1 1*1756=1756 <= 12323 try 2 2*1756=3512 <= 12323 try 3 3*1756=5268 <= 12323 try 4 4*1756=7024 <= 12323 try 5 5*1756=8780 <= 12323 try 6 6*1756=10536 <= 12323 try 7 7*1756=12292 <= 12323 try 8 8*1756=14048 > 12323 (!) result = result*10+7 = 30*10+7 = 307 вычитаем: 12323-12292=31 сносим цифру 319 < 1756 сносим........ и т.д. Я заранее извиняюсь, если нарутал со знаками неравенств. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Cheburashka |
21.07.2009 10:21
Сообщение
#11
|
Бывалый Группа: Пользователи Сообщений: 195 Пол: Мужской Реальное имя: Сергей Репутация: 2 |
Спасибо) Теперь какое-то представление имею!
-------------------- ♣♣♣
"Себя великим не считай, гордясь величьем предков, Величья не добудешь ты и золота ценою! Хоть светит на небе луна, но отраженным светом - Чужою славой не живи, не будь второй луною!!!" ♣♣♣ |
Текстовая версия | 26.09.2024 11:52 |