program ideone;
{$MODE OBJFPC}{$LONGSTRINGS ON}
type
TBinaryNumber = class(TObject)
private type
TBinaryDigits = array [0 .. 3] of Char;
private
FDigits: TBinaryDigits;
private
function BinaryToDecimal(ADigits: TBinaryDigits): UInt8;
function DecimalToBinary(ANumber: UInt8): TBinaryDigits;
private
function GetAsBinary(): String;
function GetAsDecimal(): UInt8;
public
constructor CreateAsBinary(ADigits: array of Char);
constructor CreateAsDecimal(ANumber: UInt8);
public
procedure Add(ABinaryNumber: TBinaryNumber);
procedure Multiply(ABinaryNumber: TBinaryNumber);
public
property AsBinary: String read GetAsBinary;
property AsDecimal: UInt8 read GetAsDecimal;
end;
constructor TBinaryNumber.CreateAsBinary(ADigits: array of Char);
begin
FDigits := ADigits;
end;
constructor TBinaryNumber.CreateAsDecimal(ANumber: UInt8);
begin
FDigits := DecimalToBinary(ANumber);
end;
function TBinaryNumber.BinaryToDecimal(ADigits: TBinaryDigits): UInt8;
var
intCode: Integer;
begin
Val('%' + ADigits, Result, intCode);
end;
function TBinaryNumber.DecimalToBinary(ANumber: UInt8): TBinaryDigits;
begin
Result := BinStr(ANumber, Length(TBinaryDigits));
end;
function TBinaryNumber.GetAsBinary(): String;
begin
Result := FDigits;
end;
function TBinaryNumber.GetAsDecimal(): UInt8;
begin
Result := BinaryToDecimal(FDigits);
end;
procedure TBinaryNumber.Add(ABinaryNumber: TBinaryNumber);
begin
FDigits := BinStr(UInt8(Self.AsDecimal + ABinaryNumber.AsDecimal), Length(TBinaryDigits));
end;
procedure TBinaryNumber.Multiply(ABinaryNumber: TBinaryNumber);
begin
FDigits := BinStr(UInt8(Self.AsDecimal * ABinaryNumber.AsDecimal), Length(TBinaryDigits));
end;
var
Bin1st, Bin2nd: TBinaryNumber;
begin
Bin1st := TBinaryNumber.CreateAsBinary('0010');
Bin2nd := TBinaryNumber.CreateAsDecimal(3);
try
WriteLn('Bin1st - 0b', Bin1st.AsBinary, ' (', Bin1st.AsDecimal, ')');
WriteLn('Bin2nd - 0b', Bin2nd.AsBinary, ' (', Bin2nd.AsDecimal, ')', #10);
Bin1st.Add(Bin2nd);
WriteLn('Bin1st - 0b', Bin1st.AsBinary, ' (', Bin1st.AsDecimal, ')');
WriteLn('Bin2nd - 0b', Bin2nd.AsBinary, ' (', Bin2nd.AsDecimal, ')', #10);
Bin2nd.Multiply(Bin1st);
WriteLn('Bin1st - 0b', Bin1st.AsBinary, ' (', Bin1st.AsDecimal, ')');
WriteLn('Bin2nd - 0b', Bin2nd.AsBinary, ' (', Bin2nd.AsDecimal, ')', #10);
finally
Bin1st.Free();
Bin2nd.Free();
end;
ReadLn();
end.
cHJvZ3JhbSBpZGVvbmU7Cgp7JE1PREUgT0JKRlBDfXskTE9OR1NUUklOR1MgT059Cgp0eXBlCiAgVEJpbmFyeU51bWJlciA9IGNsYXNzKFRPYmplY3QpCiAgcHJpdmF0ZSB0eXBlCiAgICBUQmluYXJ5RGlnaXRzID0gYXJyYXkgWzAgLi4gM10gb2YgQ2hhcjsKICBwcml2YXRlCiAgICBGRGlnaXRzOiBUQmluYXJ5RGlnaXRzOwogIHByaXZhdGUKICAgIGZ1bmN0aW9uIEJpbmFyeVRvRGVjaW1hbChBRGlnaXRzOiBUQmluYXJ5RGlnaXRzKTogVUludDg7CiAgICBmdW5jdGlvbiBEZWNpbWFsVG9CaW5hcnkoQU51bWJlcjogVUludDgpOiBUQmluYXJ5RGlnaXRzOwogIHByaXZhdGUKICAgIGZ1bmN0aW9uIEdldEFzQmluYXJ5KCk6IFN0cmluZzsKICAgIGZ1bmN0aW9uIEdldEFzRGVjaW1hbCgpOiBVSW50ODsKICBwdWJsaWMKICAgIGNvbnN0cnVjdG9yIENyZWF0ZUFzQmluYXJ5KEFEaWdpdHM6IGFycmF5IG9mIENoYXIpOwogICAgY29uc3RydWN0b3IgQ3JlYXRlQXNEZWNpbWFsKEFOdW1iZXI6IFVJbnQ4KTsKICBwdWJsaWMKICAgIHByb2NlZHVyZSBBZGQoQUJpbmFyeU51bWJlcjogVEJpbmFyeU51bWJlcik7CiAgICBwcm9jZWR1cmUgTXVsdGlwbHkoQUJpbmFyeU51bWJlcjogVEJpbmFyeU51bWJlcik7CiAgcHVibGljCiAgICBwcm9wZXJ0eSBBc0JpbmFyeTogU3RyaW5nIHJlYWQgR2V0QXNCaW5hcnk7CiAgICBwcm9wZXJ0eSBBc0RlY2ltYWw6IFVJbnQ4IHJlYWQgR2V0QXNEZWNpbWFsOwogIGVuZDsKCiAgY29uc3RydWN0b3IgVEJpbmFyeU51bWJlci5DcmVhdGVBc0JpbmFyeShBRGlnaXRzOiBhcnJheSBvZiBDaGFyKTsKICBiZWdpbgogICAgRkRpZ2l0cyA6PSBBRGlnaXRzOwogIGVuZDsKCiAgY29uc3RydWN0b3IgVEJpbmFyeU51bWJlci5DcmVhdGVBc0RlY2ltYWwoQU51bWJlcjogVUludDgpOwogIGJlZ2luCiAgICBGRGlnaXRzIDo9IERlY2ltYWxUb0JpbmFyeShBTnVtYmVyKTsKICBlbmQ7CgogIGZ1bmN0aW9uIFRCaW5hcnlOdW1iZXIuQmluYXJ5VG9EZWNpbWFsKEFEaWdpdHM6IFRCaW5hcnlEaWdpdHMpOiBVSW50ODsKICB2YXIKICAgIGludENvZGU6IEludGVnZXI7CiAgYmVnaW4KICAgIFZhbCgnJScgKyBBRGlnaXRzLCBSZXN1bHQsIGludENvZGUpOwogIGVuZDsKCiAgZnVuY3Rpb24gVEJpbmFyeU51bWJlci5EZWNpbWFsVG9CaW5hcnkoQU51bWJlcjogVUludDgpOiBUQmluYXJ5RGlnaXRzOwogIGJlZ2luCiAgICBSZXN1bHQgOj0gQmluU3RyKEFOdW1iZXIsIExlbmd0aChUQmluYXJ5RGlnaXRzKSk7CiAgZW5kOwoKICBmdW5jdGlvbiBUQmluYXJ5TnVtYmVyLkdldEFzQmluYXJ5KCk6IFN0cmluZzsKICBiZWdpbgogICAgUmVzdWx0IDo9IEZEaWdpdHM7CiAgZW5kOwoKICBmdW5jdGlvbiBUQmluYXJ5TnVtYmVyLkdldEFzRGVjaW1hbCgpOiBVSW50ODsKICBiZWdpbgogICAgUmVzdWx0IDo9IEJpbmFyeVRvRGVjaW1hbChGRGlnaXRzKTsKICBlbmQ7CgogIHByb2NlZHVyZSBUQmluYXJ5TnVtYmVyLkFkZChBQmluYXJ5TnVtYmVyOiBUQmluYXJ5TnVtYmVyKTsKICBiZWdpbgogICAgRkRpZ2l0cyA6PSBCaW5TdHIoVUludDgoU2VsZi5Bc0RlY2ltYWwgKyBBQmluYXJ5TnVtYmVyLkFzRGVjaW1hbCksIExlbmd0aChUQmluYXJ5RGlnaXRzKSk7CiAgZW5kOwoKICBwcm9jZWR1cmUgVEJpbmFyeU51bWJlci5NdWx0aXBseShBQmluYXJ5TnVtYmVyOiBUQmluYXJ5TnVtYmVyKTsKICBiZWdpbgogICAgRkRpZ2l0cyA6PSBCaW5TdHIoVUludDgoU2VsZi5Bc0RlY2ltYWwgKiBBQmluYXJ5TnVtYmVyLkFzRGVjaW1hbCksIExlbmd0aChUQmluYXJ5RGlnaXRzKSk7CiAgZW5kOwoKdmFyCiAgQmluMXN0LCBCaW4ybmQ6IFRCaW5hcnlOdW1iZXI7CmJlZ2luCiAgQmluMXN0IDo9IFRCaW5hcnlOdW1iZXIuQ3JlYXRlQXNCaW5hcnkoJzAwMTAnKTsKICBCaW4ybmQgOj0gVEJpbmFyeU51bWJlci5DcmVhdGVBc0RlY2ltYWwoMyk7CiAgdHJ5CiAgICBXcml0ZUxuKCdCaW4xc3QgLSAwYicsIEJpbjFzdC5Bc0JpbmFyeSwgJyAoJywgQmluMXN0LkFzRGVjaW1hbCwgJyknKTsKICAgIFdyaXRlTG4oJ0JpbjJuZCAtIDBiJywgQmluMm5kLkFzQmluYXJ5LCAnICgnLCBCaW4ybmQuQXNEZWNpbWFsLCAnKScsICMxMCk7CgogICAgQmluMXN0LkFkZChCaW4ybmQpOwoKICAgIFdyaXRlTG4oJ0JpbjFzdCAtIDBiJywgQmluMXN0LkFzQmluYXJ5LCAnICgnLCBCaW4xc3QuQXNEZWNpbWFsLCAnKScpOwogICAgV3JpdGVMbignQmluMm5kIC0gMGInLCBCaW4ybmQuQXNCaW5hcnksICcgKCcsIEJpbjJuZC5Bc0RlY2ltYWwsICcpJywgIzEwKTsKCiAgICBCaW4ybmQuTXVsdGlwbHkoQmluMXN0KTsKCiAgICBXcml0ZUxuKCdCaW4xc3QgLSAwYicsIEJpbjFzdC5Bc0JpbmFyeSwgJyAoJywgQmluMXN0LkFzRGVjaW1hbCwgJyknKTsKICAgIFdyaXRlTG4oJ0JpbjJuZCAtIDBiJywgQmluMm5kLkFzQmluYXJ5LCAnICgnLCBCaW4ybmQuQXNEZWNpbWFsLCAnKScsICMxMCk7CiAgZmluYWxseQogICAgQmluMXN0LkZyZWUoKTsKICAgIEJpbjJuZC5GcmVlKCk7CiAgZW5kOwoKICBSZWFkTG4oKTsKZW5kLgo=