Главная » Pascal, Исходники, Перевод » Программа перевода с десятичного числа в шестнадцатеричное.
Ноя
23

Программа перевода с десятичного числа в шестнадцатеричное.

Вводится строка до 200(!) десятичных цифр. Выводится число в шестнадцатеричном формате.

[sourcecode language=»css»]
program Dec2Hex;
uses Crt;
const
h15 = ‘0123456789ABCDEF';
var
hold_in, dec_str, hex_str: String;
hex_digits: Array[0..15] of Char;
ch: Char;
k: Integer;
procedure Initialize;
var
j: Word;
temp: String[Length(h15)];
begin
temp:=h15;
for j:=0 to 15 do
hex_digits[j]:=temp[j+1];
end;
procedure get_decimal(var dec_str: String);
var
k: Word;
begin
Repeat
Writeln(‘Input decimal number : ‘);
Readln(dec_str);
if dec_str = » then Halt;

for k:=Length(dec_str) downto 1 do
if not (dec_str[k] in [‘0′..’9′]) then
Delete(dec_str, k, 1);

While (Length(dec_str) > 1) and (dec_str[1] = ‘0’) do
Delete(dec_str, 1, 1);
if Length(dec_str) > 0 then Exit;
Writeln(‘Input error. Repeat please ‘);
Writeln;
Until False;
end;
procedure convert(var dec_str, hex_str: String);
var
remainder: Integer;
procedure divide_by_16;
var
j, k, dividend: Word;
error: Integer;
begin
remainder:=0; {0 <= remainder <=15}
for j:=1 to Length(dec_str) do
begin
if KeyPressed then Halt;
Val(dec_str[j], k, error);
dividend:=10*remainder+k;
{0 <= dividend <=159}
remainder:=dividend mod 16;
{0 <= remainder <= 15}
dec_str[j]:=hex_digits[dividend div 16];





end;
Delete(dec_str, 1, 1);
end; { divide_by_16}
begin
hex_str:=»;
while Length(dec_str) > 0 do
begin
if KeyPressed then Halt;
divide_by_16;
hex_str:=hex_digits[remainder]+hex_str;
end;
while hex_str[1] = ‘0’ do Delete(hex_str, 1, 1);
end;
begin
Initialize;
Repeat
get_decimal(dec_str);
hold_in:=dec_str;
convert(dec_str, hex_str);
k:=Length(hold_in)-2;
while k>1 do
begin
Insert(‘.’, hold_in, k);
Dec(k, 3);
end;
Write(Hold_in, ‘ = $’);
while Length(hex_str) mod 4 <> 0 do
hex_str:=’0’+hex_str;
k:=Length(hex_str)-3;
while k > 1 do
begin
Insert(‘.’, hex_str, k);
Dec(k, 4);
end;
Writeln(hex_str);
Writeln;
writeln(‘To continue press <ENTER>, to exit <ESC>’);
ch:=ReadKey;
if ch = #27 then Break;
Writeln;
Until False;
end.
[/sourcecode]

P.S. Русские коментарии будут добавлены сегодня-завтра.



Понравилась статья? Сделай приятно ее автору, поделись с друзьями:


Хотите получать обновления данного блога на EMail?

Введите адрес Почтового Ящика:




Подтвердите подписку в письме пришедшем на Почту, после чего начнете получить рассылку.