Доброго времени суток.
Перевод из восьмеричной в шестнадцатиричную и обратно удобнее делать через двоичную систему. Сначала записывается каждая восьмеричная цивра в виде ее двоичного эквиваленита, а затем получившаяся строка читается справа на лево по тетрадам и каждая тетрада записывается в виде шестнадцатиричной цифры.
Пример: 37(8) -> 011 111 -> 01 1111 -> 1F(16)
Удобно объявить пару констант
const
arrOct : array[0..7] of String[3] = ('000','001','010','011','100','101','110','111');
arrHex : array[0..15] of String[4] = ('0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111');
Дальше вводите восьмеричное число как строку, допустим, в переменную S8 и в цикле от длины строки до 1 формируете промежуточное двоичное число в переменной S2
S2 := '';
for i:=Length(S8) do S2 := arrOct[Ord(S8[ i ])-Ord('0')] + S2;
А затем читаете по 4 разряда из строки S2 начиная с конца и ищите в массиве arrHex соответсвующий элемент. Индекс этого элемента и будет шестнадцатиричной цифрой. Нужно только не забыть преобразовать индексы от 10 до 15 в символы от А до F. Это предлагаю сделать самостоятельно. И заметьте, никаких умножений / делений. Только выборка из строки.
Преимущество такого алгоритма перед другими, использующими числа, в отсутствии ограничений на разрядность преобразуемых чисел. Нет здесь частных и произведений. Есть только ограничение на длину строки в 255 символов, но 2^255 достаточно большое число для удовлетворения большинства потребностей.
Удачи!
Другие языки программирования и технологии
Как написать программу для перевода числа с 8-ричной в 16-ричную систему? (язык Pascal или delphi в крайнем случае C++)
Филипп Писаренко
Это через строки, что ли? Попахивает диким извратом.
не понимаю в чем сложность, но за 1wmr сделаю если хош
#include <stdio.h>
int main()
{
unsigned n;
scanf("%o", &n);
printf("%x", n);
return 0;
}
int main()
{
unsigned n;
scanf("%o", &n);
printf("%x", n);
return 0;
}
Vladimir Stolar
Смотрим на порядок предпочтения - "язык Pascal или delphi в крайнем случае C++"
1.переводим в десятичную
переменная = первый знак.
если есть еще знаки? (
"переменная" * основание
"переменная" = переменная + следующий знак
)
2. перевод из десятичной
делим на основание, остаток пишем в начало переменной "результат" (если надо - преобразуем в символ 10 - а 11 - b и т. д. )
частное равно нулю? если да - то конец
иначе - снова, но уже с частным.
переменная = первый знак.
если есть еще знаки? (
"переменная" * основание
"переменная" = переменная + следующий знак
)
2. перевод из десятичной
делим на основание, остаток пишем в начало переменной "результат" (если надо - преобразуем в символ 10 - а 11 - b и т. д. )
частное равно нулю? если да - то конец
иначе - снова, но уже с частным.
Похожие вопросы
- Если парень в 11 классе смог написать программу по переводу чисел из одной системы счисления в другую, то ему смело
- Как перевести число 753,(46) из 8-ричной системы счисления в 6-ричную?
- как переводить числа из 26 ричной системы в 10ричную.. можете предоставить объяснение.. срочно нужно.. к зачету нужно
- аскаль. Написать программу которая переводит число из одной системы счисления в другую
- Составьте программу на языке Паскаль! Нужна программа по переводу чисел из десятичной системы счисления в любую другую.
- как сделать в Паскале задачу/программу по переводу числа из десятичной в римскую систему счисления???
- Написать программу которая определяет количество учеников в классе,чей рост превышает средний(Turbo Pascal)
- Как в Паскале написать прогу для перевода чисел из двоичной в шестьнадцатиричную.Длина кода 64 бит.(64 цифры в вводимом
- Помогите написать программу Дано натуральное число n. Вычислить сумму всех k(k+1), k меняется от 1 до n.
- Как перевести из 16-и ричной системы любое число в 2-ую, 8-ую и 10-ую системы счисления?