Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];




Вниз

Системы исчисления 


Yan Kovalskiy   (2001-12-28 06:39) [0]

Добрый день!

Подскажите существует ли формула(алгоритм) перевода из одной системы исчисления в другую.
Скажем из 3-тичной в 6-тиричную.



panov   (2001-12-28 08:48) [1]

3-тичная-->2-ичная-->6-ричная



Nemesis   (2001-12-28 09:30) [2]

> panov
а почему не через 10, 8, 16 ...

Если знаеш как это зделать на бумаге: програмировать не составит труда



Sergii   (2002-01-05 06:56) [3]

Для целых чисел можно попробовать так (на примере 3-й и 6-й систем, в скобках буду указывать систему счисления).
(3): 0,1,2,10,11,12,20,21,22,100,101,...
(6): 0,1,2,3,4,5,10,11,12,13,14,15,20,...
Значения по ворастанию степени числа 6(10) для "старшей" системы в значениях "младшей"(для наглядности, справа будут числа в 10-й системе):
6(10) = 10(6) = 20(3)
36(10) = 100(6) = 1"100(3)
216(1) = 1"000(6) = 22"000(3)

Для перевода из "старшей" системы в "младшую" алгоритм следующий:
раскладываем число по разрядам, переводим полученные числа в "младшую" систему и производим алгебраические действия. Например, пусть необходимо преобразовать 5420(6) в 3-ю систему:
1. Раскладываем по разрядам(все числа - в 6-й системе):
(5 * 1"000) + (4 * 100) + (2 * 10) + (0 * 1)
2. Переводим в 3-ю систему каждое число(все числа в 3-й системе):
(12 * 22"000) + (11 * 1"100) + (2 * 20) + (0 * 1) =
3. Производим алгебраические действия
= 1"111"000 + 12 100 + 110 + 0 = 1"200"210

Для перевода из "младшей" в "старшую" необходимо:
1. Разделить число на максимально возможную степень числа-основания "старшей" системы (но, естественно, это значение должно быть переведено в "младшую") так, что-бы в результате получилось число, содержащее целую часть и некоторый остаток.
2. Умножить целую часть на делитель и вычесть полученное значение из делимого. Если разность окажется ненулевой, то повторяем пункт один, где в качестве делимого выступет эта разность, а делитель - (степень - 1) числа основания старшей "систмемы". Если на это число поделить не удается, то записываем в разряд 0.
3. Если разность оказалась нулевой, то переводим полученные на предыдущих этапах целые значения в "старшую" систему и выписываем их по разрядам. Однако следует учитывать, что если процедура деления закончилась, когда делитель не являлся числом основанием в нулевой степени, то во все последующие разряды по убыванию, необходимо записать 0.
Пример , переведем 1"200"210(3) в 6-ю систему:

1"200"210(3)/22"000(3) = 12(3) + остаток
1"200"210(3) - (12(3) * 22"000(3)) = 1"200"210(3) - 1"111"000(3) = 12"210(3), т.к. 12"210(3) <> 0 то

12"210(3)/1"100(3) = 11(3) + остаток.
12"210(3) - (11(3) * 1"100(3)) = 12"210(3) - 12"110(3) = 110(3)
т.к. 110(3) <> 0 то

110(3)/20(3) = 2(3) + остаток
110(3) - (20(3) * 2(3)) = 110(3) - 110(3) = 0. Т.е. остаток = 0.
Данный разряд не является нулевым 20(3) = 10(6), поэтому в оставшееся разряды (а разряд остался один) записываем 0. Выписываем все полученные числа по порядку:
12(3), 11(3), 2(3), 0. Переводим в 6-ю систему: 5420.





Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.018 c
14-66349          Seeree                2001-11-23 14:33  2002.01.21  
Промышленное и заказное программирование


1-66290           VadX                  2002-01-03 21:22  2002.01.21  
Окно программы....


14-66362          J_S                   2001-11-22 21:45  2002.01.21  
http://delphi.mastak.com/prikol/prayer.htm


14-66359          fliz                  2001-11-23 17:14  2002.01.21  
Пародия на


1-66295           Stupid                2002-01-04 22:22  2002.01.21  
HELPPPP ME