Göreceğiniz üzere basit matematik içerir. Çözümü uzaklarda aramayın.
Fonksiyonlar
function DecToBin(iDec: LongInt): string;
begin
Result:='';
while iDec > 0 do
begin
Result := IntToStr(iDec and 1) + Result;
iDec := iDec shr 1;
end;
end;
function BinToDec(Value: String): LongInt;
var
i, iValueSize: Integer;
begin
Result := 0;
iValueSize := Length(Value);
for i := iValueSize downto 1 do
if Value[i] = '1' then
Result := Result + (1 shl (iValueSize - i));
end;
function ModelToDec( aText: string; aTrue:Char = '1'; aFalse:Char = '0' ): LongInt;
begin
aText := StringReplace( aText, aTrue, '1', [rfReplaceAll] );
aText := StringReplace( aText, aFalse, '0', [rfReplaceAll] );
result := BinToDec(aText);
end;
function DecToModel( aVal: LongInt; aTrue:Char = '1'; aFalse:Char = '0' ): String;
begin
Result := DecToBin(aVal);
Result := StringReplace( Result, '1', aTrue, [rfReplaceAll] );
Result := StringReplace( Result, '0', aFalse, [rfReplaceAll] );
end;
Kullanımı :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
LValStr : String;
LVal : LongInt;
LModel : String;
begin
LValStr := 'TFTFTTFTTTFTTFTFFFTFTFTTFTFTTF';
LVal := ModelToDec( LValStr, 'T', 'F');
Memo1.Lines.Add( Format('%s = %d', [ LValStr, LVal ]) );
LModel := DecToModel( LVal, '1', '0' );
Memo1.Lines.Add( Format('%s', [ LModel ]) );
LModel := DecToModel( LVal, 'A', 'B' );
Memo1.Lines.Add( Format('%s', [ LModel ]) );
LModel := DecToModel( LVal, 'T', 'F' );
Memo1.Lines.Add( Format('%s', [ LModel ]) );
LModel := DecToModel( LVal, 'X', 'Y' );
Memo1.Lines.Add( Format('%s', [ LModel ]) );
end;
Sonuç :
Kod:
TFTFTTFTTTFTTFTFFFTFTFTTFTFTTF = 729189078
101011011101101000101011010110
ABABAABAAABAABABBBABABAABABAAB
TFTFTTFTTTFTTFTFFFTFTFTTFTFTTF
XYXYXXYXXXYXXYXYYYXYXYXXYXYXXY
Unutmuşum
Model olarak A, B hallerini veya 'X', 'Y' verince de yine 729189078 rakamına ulaşırsınız. Karşılaştırma için bu decimal sayı kafi
Örneğin :
procedure TForm1.BitBtn1Click(Sender: TObject);
var
LValStr : String;
LVal : LongInt;
LModel : String;
begin
LValStr := 'TFTFTTFTFTFTFTTFTFTFTFTFTFTTTTT';
LVal := ModelToDec( LValStr, 'T', 'F');
Memo1.Lines.Add( Format('%s = %d', [ LValStr, LVal ]) );
LModel := DecToModel( LVal, '1', '0' );
LVal := ModelToDec( LModel, '1', '0');
Memo1.Lines.Add( Format('%s = %d', [ LModel, LVal ]) );
LModel := DecToModel( LVal, 'A', 'B' );
LVal := ModelToDec( LModel, 'A', 'B');
Memo1.Lines.Add( Format('%s = %d', [ LModel, LVal ]) );
LModel := DecToModel( LVal, 'T', 'F' );
LVal := ModelToDec( LModel, 'T', 'F');
Memo1.Lines.Add( Format('%s = %d', [ LModel, LVal ]) );
LModel := DecToModel( LVal, 'X', 'Y' );
LVal := ModelToDec( LModel, 'X', 'Y');
Memo1.Lines.Add( Format('%s = %d', [ LModel, LVal ]) );
end;
Kod:
TFTFTTFTFTFTFTTFTFTFTFTFTFTTTTT = 1454069087
1010110101010110101010101011111 = 1454069087
ABABAABABABABAABABABABABABAAAAA = 1454069087
TFTFTTFTFTFTFTTFTFTFTFTFTFTTTTT = 1454069087
XYXYXXYXYXYXYXXYXYXYXYXYXYXXXXX = 1454069087