Перевод чисел из одной системы счисления в другую

Условие

Перевести заданное пользователем целое число A из одной системы счисления (P) в другую (Q). P и Q могут изменяться от 2 до 10.

Решение

MS Excel содержит функции для преобразования чисел между различными системами счисления, однако здесь мы создадим универсальное решение. Вы сможете встроить этот код в свои проекты. При необходимости вы сможете доработать его так, чтобы он смог работать с системами счисления, основание которых превышает 10.

В данном случае наиболее очевидным является перевод введенного числа сначала из системы счисления с основанием P в систему с основанием 10, а потом уже из системы с основанием 10 в систему с основанием Q.

Перевод в десятичную систему счисления осуществляется в два этапа:

  1. Разбиение введенного числа на отдельные цифры
  2. Получение десятичного числа по следующему алгоритму:

Первую цифру числа в системе счисления с основанием Q нужно умножить на Q в нулевой степени. Полученное число прибавить к произведению второй цифры числа, умноженную на Q в 1-й степени и так далее. Например:

Перевод из двоичной системы в десятичную:

1101 =1*2^3+1*2^2+0*2^1+1*2^0=8+4+0+1=13

Перевод из пятеричной системы в десятичную:

1042=1*5^3+0*5^2+4*5^1+2*5^0=125+0+20+2=147

Перевод в систему счисления с основанием Q из системы с основанием 10 осуществляется путем накапливания остатков от деления этого числа на Q с последующим изменением этого числа целочисленным делением его на Q до тех пор, пока переводимое число не станет равным 0.

Для решения этой задачи нам понадобится форма, содержащая следующие элементы управления (табл. 6.). У текстовых полей свойство AutoSize установлено в True.

Таблица 6. Элементы упавления
Имя элемента управления Подпись и примечания
cmd_OK Перевести. Кнопка для перевода чисел
txt_P Из системы P. Текстовое поле для хранения основания системы счисления P.
txt_Q В систему Q. Поле для хранения основания системы счисления Q
txt_A Число для перевода. Число, заданное для перевода из системы P в Q
txt_B Результат. Текстовое поле для вывода результата перевода

На рис. 7. вы можете увидеть форму программы.


Рис. 7. Форма программы для перевода чисел из одной системы счисления в другую

В листинге 7. вы можете найти код события Click для кнопки cmd_OK.

'Для хранения основания системы P

Dim num_P

'Для хранения основания системы Q

Dim num_Q

'Для хранения числа в 10-й системе

Dim num_10

'Для хранения очередного числа в

'системе счисления Q

Dim num_S

num_P = Val(txt_P)

num_Q = Val(txt_Q)

'Переводим введенное число из

'системы счисления P

'в десятичную систему

For i = 1 To Len(txt_A)

num_10 = num_10 + Val(Mid(txt_A, i, 1)) * _

num_P ^ (Len(txt_A) - i)

Next i

'Переводим число из десятичной системы

'в систему с основанием Q

txt_B = ""

While num_10 <> 0

'Остаток от деления запишем в str_S

num_S = num_10 Mod num_Q

'Запишем очередное число в

'окно для вывода результата

txt_B = Mid(Str(num_S), 2, 1) + txt_B

'Запишем в num_10 результат

'целочисленного деления

'num_10 на основание системы

'счисления Q

num_10 = num_10 \ num_Q

Wend

Листинг 7. Решение задачи


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: