program Pascal_169236;
type
{* Класс-конвертер *}
TBinary2HexConverter=object
str:String;
function NumConvert(b: String): Char;
public
constructor Init(s: String);
function ToHex: String;
end;
{* Конструктор *}
constructor TBinary2HexConverter.Init(s: String);
var
i: Integer;
skipZeroes:Boolean;
begin
str:='';
{* Флаг сигнализирующий, что ведущие нули еще не пропущены *}
skipZeroes:=true;
for i := 1 to Length(s) do begin
{* Проверка на корректность строки *}
if not (s[i] in ['0','1']) then begin
Fail;
end;
{* Если не ноль или ведущие нули уже пропущены *}
if not(skipZeroes and (s[i]='0') and (i<>Length(s))) then begin
skipZeroes:=false;
str:=str+s[i];
end;
end;
end;
{* конвертирует 4х битовую двоичную строку в шестнадцатиричное число *}
function TBinary2HexConverter.NumConvert(b: String): Char;
const
hexdigits:array[0..15] of char='0123456789ABCDEF';
var
num:Integer;
i: Integer;
begin
num:=0;
for i := 1 to Length(b) do begin
num:=(num shl 1) + (Ord(b[i]) - Ord('0'));
end;
NumConvert:=hexdigits[num];
end;
{* Собственно сам конвертер *}
function TBinary2HexConverter.ToHex: String;
var
cur,len:Integer;
res:String;
begin
res:='';
cur:=1;
while cur<=Length(str) do begin
len:=(Length(str)-cur) mod 4+1;
res:=res+ NumConvert(Copy(str,cur,len));
Inc(cur,len);
end;
ToHex:=res;
end;
var
s:String;
bin:TBinary2HexConverter;
begin
Write('Enter binary number:');
ReadLn(s);
if bin.Init(s) then begin
WriteLn('In Hex:',bin.ToHex);
end else begin
WriteLn('This is not binary number');
end;
ReadLn;
end.
Enter binary number:1001010101011011
In Hex:955B
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.