Другие языки программирования и технологии
Pascal. 16ричное число превести в 2ичное
Задача строкового типа:Дано 16ричное число, его нужно превести в 2ичное.думаю оптимальнее будет пойти по такому алгоритму: 16ричную цифру заменяем группой из четырех двоичных. Как это сделать, пишите код(лучше весь)
Доброго времени суток.
trex` , к сожалению, комментов нет, так что здесь выскажу замечания. Вы под что дали решение? Turbo или Delphi? Дело в том, что обе эти реализации здесь называют паскалем. Однако, есть небольшие отличия.
Такая конструкция вполне допустима в ТР for i=1 to Incoming[0] do begin, где строки не могут быть длиннее 255 символов и где в нулевом байте хранится длина строки. Но продвигаясь дальше по вашему коду, обнаруживается result = Outcoming; А это уже делфийское. В турбо нет предопределенной переменной Result. Ну и тупой перебор Hex цифр немного не так смотрится. Вот рабочий вариант.
const arrHex : array[0..15] of String[4] = ('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111','1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111'); {типизированная константа с одновременной инициализацией}
var
S, S1 : String;
j, n : Integer;
begin
ClrScr;
Write('Введите 16-ричное число : ');
ReadLn(S);
for j:=1 to Length(S) do begin {цикл по символам Hex числа}
S[j] := UpCase(S[j]); {приведение к верхнему регистру для обеспечения работы case}
case S[j] of {анализ очередного символа и вычисление соответствующего ему индекса}
'0'..'9' : n := Ord(S[j]) - Ord('0');
'A'..'F' : n := Ord(S[j]) - Ord('A') + 10;
end;
S1 := S1 + arrHex[n]; {накапливание результирующей строки}
end;
WriteLn(S1); {вывод результата}
ReadLn; {чтобы увидеть результат}
end.
Удачи!
PS Не понимаю, почему этот вопрос возник еще раз, если 9 часоов назад я уже отвечал на него.
trex` , к сожалению, комментов нет, так что здесь выскажу замечания. Вы под что дали решение? Turbo или Delphi? Дело в том, что обе эти реализации здесь называют паскалем. Однако, есть небольшие отличия.
Такая конструкция вполне допустима в ТР for i=1 to Incoming[0] do begin, где строки не могут быть длиннее 255 символов и где в нулевом байте хранится длина строки. Но продвигаясь дальше по вашему коду, обнаруживается result = Outcoming; А это уже делфийское. В турбо нет предопределенной переменной Result. Ну и тупой перебор Hex цифр немного не так смотрится. Вот рабочий вариант.
const arrHex : array[0..15] of String[4] = ('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111','1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111'); {типизированная константа с одновременной инициализацией}
var
S, S1 : String;
j, n : Integer;
begin
ClrScr;
Write('Введите 16-ричное число : ');
ReadLn(S);
for j:=1 to Length(S) do begin {цикл по символам Hex числа}
S[j] := UpCase(S[j]); {приведение к верхнему регистру для обеспечения работы case}
case S[j] of {анализ очередного символа и вычисление соответствующего ему индекса}
'0'..'9' : n := Ord(S[j]) - Ord('0');
'A'..'F' : n := Ord(S[j]) - Ord('A') + 10;
end;
S1 := S1 + arrHex[n]; {накапливание результирующей строки}
end;
WriteLn(S1); {вывод результата}
ReadLn; {чтобы увидеть результат}
end.
Удачи!
PS Не понимаю, почему этот вопрос возник еще раз, если 9 часоов назад я уже отвечал на него.
function HexStrToBinStr(Incoming : string):string;
var Outcoming:string;
i:integer;
begin
for i=1 to Incoming[0] do begin
case Incoming квадратня скобочка откр. i квадратня скобочка закр. of
'0': Outcoming = Outcoming + '0000';
'1': Outcoming = Outcoming + '0001';
'2': Outcoming = Outcoming + '0010';
'3': Outcoming = Outcoming + '0011';
'4': Outcoming = Outcoming + '0100';
'5': Outcoming = Outcoming + '0101';
'6': Outcoming = Outcoming + '0110';
'7': Outcoming = Outcoming + '0111';
'8': Outcoming = Outcoming + '1000';
'9': Outcoming = Outcoming + '1001';
'A': Outcoming = Outcoming + '1010';
'B': Outcoming = Outcoming + '1011';
'C': Outcoming = Outcoming + '1100';
'D': Outcoming = Outcoming + '1101';
'E': Outcoming = Outcoming + '1110';
'F': Outcoming = Outcoming + '1111';
end;
end;
result = Outcoming;
end;
Вроде так. Хотя я на паскале давненько не писал, так что может в комментах что подправят...
var Outcoming:string;
i:integer;
begin
for i=1 to Incoming[0] do begin
case Incoming квадратня скобочка откр. i квадратня скобочка закр. of
'0': Outcoming = Outcoming + '0000';
'1': Outcoming = Outcoming + '0001';
'2': Outcoming = Outcoming + '0010';
'3': Outcoming = Outcoming + '0011';
'4': Outcoming = Outcoming + '0100';
'5': Outcoming = Outcoming + '0101';
'6': Outcoming = Outcoming + '0110';
'7': Outcoming = Outcoming + '0111';
'8': Outcoming = Outcoming + '1000';
'9': Outcoming = Outcoming + '1001';
'A': Outcoming = Outcoming + '1010';
'B': Outcoming = Outcoming + '1011';
'C': Outcoming = Outcoming + '1100';
'D': Outcoming = Outcoming + '1101';
'E': Outcoming = Outcoming + '1110';
'F': Outcoming = Outcoming + '1111';
end;
end;
result = Outcoming;
end;
Вроде так. Хотя я на паскале давненько не писал, так что может в комментах что подправят...
Похожие вопросы
- задача pascal. представить число в виде всех возможных сумм.
- как решить через abc pascal задачу "Дано натуральное число n. Получить все простые делители этого числа"
- Pascal . Дан массив вещественных чисел. Найти сумму элементов, номера которых являются простыми числами
- программирование pascal (паскаль) алгоритм с перестановкой цифр в числе
- Pascal(поиск минимальных среди двух чисел). Какой метод лучше?
- PASCAL - Мне необходимо округлить число в большую сторону
- Pascal - Вывести три наибольших числа
- Как в Pascal найти суму числел числа!?
- Сортировка одномерного массива + вставка числа в отсортированный массив PASCAL
- pascal or delphi