Доброго времени суток.
Просто ее написать, просто.. . Главное, понимать, что делаешь и для чего. Одно из возможных решений может быть таким. Сработает аж для 255 разрядов входного числа.
program Bin2Hex;
uses Crt;
const arrHex : String = '0123456789ABCDEF'; {шестнадцатиричные цифры}
var
S, HexOut : String;
i, j, n : Integer;
begin
ClrScr;
ReadLn(S); {ввели двоичную строку}
i := 1; {степень двойки 2^0}
n := 0; {здесь накапливаем десятичный эквивалент тетрады}
for j:=Length(S) downto 1 do begin {просматриваем символы младшего разряда к старшему}
n := n + (Ord(S[j]) - Ord('0')) * i; {умножаем значение разряда на соответствующую степень двойки}
i := i shl 1; {следующая степень}
if i = 16 then begin {закончилась очередная тетрада}
HexOut := arrHex[n+1] + HexOut; {формируем выходную строку}
n := 0; {обнуляем накопитель}
i := 1; {и снова 2^0}
end;
end;
if n > 0 then HexOut := arrHex[n+1] + HexOut; {если была неполная тетрада}
WriteLn(HexOut); {покажем результат}
ReadLn; {и посмотрим на него}
end.
Удачи!
Другие языки программирования и технологии
Как в Паскале написать прогу для перевода чисел из двоичной в шестьнадцатиричную.Длина кода 64 бит.(64 цифры в вводимом
лучше читать по четыре цифры (главное чтобы в конце последняя из 4 пришлась на последнюю цифру кода)
пусть это b1,b2,b3,b4 (b1-старший бит)
тогда шестнадцатеричная цифра ((2*b1+b2)*2+b3)*2+b4
пример для 8-битного
01100101
первая четверка 0110 = ((0*2+1)*2+1)*2+0=6
первая четверка 0101 = ((0*2+1)*2+0)*2+1=5
если получится больше 9, помним, что 10=A, 11=B, 12=C, 13=D, 14=E, 15=F
пусть это b1,b2,b3,b4 (b1-старший бит)
тогда шестнадцатеричная цифра ((2*b1+b2)*2+b3)*2+b4
пример для 8-битного
01100101
первая четверка 0110 = ((0*2+1)*2+1)*2+0=6
первая четверка 0101 = ((0*2+1)*2+0)*2+1=5
если получится больше 9, помним, что 10=A, 11=B, 12=C, 13=D, 14=E, 15=F
сори вопросик не правильно прочитал, тогда сначала переводи в родную десятичную а потом в 16-ричную
Я конечно пишу на с++, на алгоритм такой:
1-делим число на 16(тоесть находим остаток от деления)
выглядит примерно так
ndelitel=chislo-получаем целый делительо (как-то у вас по-другому эта операция называется)
chislo=chislo-ndelitel*16;
далее пишем ifы
тоесть если ndelitel равен 1 в строку с числом пишем 1
если 2 пишем 2
если 10- пишем А
если 11-пишем B
и тд пока ndelitel не будет равен 0 тогда завершаем процедуру и выводим строку
Я конечно пишу на с++, на алгоритм такой:
1-делим число на 16(тоесть находим остаток от деления)
выглядит примерно так
ndelitel=chislo-получаем целый делительо (как-то у вас по-другому эта операция называется)
chislo=chislo-ndelitel*16;
далее пишем ifы
тоесть если ndelitel равен 1 в строку с числом пишем 1
если 2 пишем 2
если 10- пишем А
если 11-пишем B
и тд пока ndelitel не будет равен 0 тогда завершаем процедуру и выводим строку
Похожие вопросы
- Помогите написать программу перевода чисел из двоичного формата в десятичный на языке C#
- перевод чисел в двоичную,восьмеричную системы счисления
- аааа сессия горит!!! помогите написать на си(не с++): перевод числа в двоичную систему
- как сделать в Паскале задачу/программу по переводу числа из десятичной в римскую систему счисления???
- Составьте программу на языке Паскаль! Нужна программа по переводу чисел из десятичной системы счисления в любую другую.
- Если парень в 11 классе смог написать программу по переводу чисел из одной системы счисления в другую, то ему смело
- Как написать программу для перевода числа с 8-ричной в 16-ричную систему? (язык Pascal или delphi в крайнем случае C++)
- Как в ПАСКАЛЕ вводимое число представить как целое, если оно состоит из 1-8 цифр, и в виде строчного если оно может
- Паскаль!!)) входной файл содержит два числа x и y. Выходной последнюю цифру числа x в y степени! помогите пожалуйста!
- СРОЧНО ! Напишите прогу на Паскале