Online
Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
Delphi 12 Athens
|
Re: Mathe mit Strings (die deutsche StringMatheLib ._. )
18. Jul 2009, 08:04
Delphi-Quellcode:
Const BStellen = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-';
Function TMathe.vonBasisN(ZahlN, BasisN: String; Stellen: String = BStellen): String;
Var i, i2: Integer;
Begin
Result := '0';
For i := 1 to Length(ZahlN) do Begin
i2 := Pos(ZahlN[i], BStellen) - 1;
If i2 < 0 Then
System.{$IFDEF PROCEDURE_ERROR}Error(reRangeError){$ELSE}RunError(201){$ENDIF};
Result := Summe(Produkt(Result, BasisN), vonInteger64(i2));
End;
End;
Function TMathe.zuBasisN(Zahl10, BasisN: String; Stellen: String = BStellen): String;
Var i: Integer;
Rest: String;
Begin
Result := '';
Repeat
QuotientModulo(Zahl10, BasisN, Zahl10, Rest);
i := zuInteger(Rest);
If i >= Length(BStellen) Then
System.{$IFDEF PROCEDURE_ERROR}Error(reRangeError){$ELSE}RunError(201){$ENDIF};
Insert(BStellen[i + 1], Result, 1);
Until Zahl10 = '0';
End;
Function TMathe.BasisNzuM(ZahlN, BasisN, BasisM: String; Stellen: String = BStellen): String;
Begin
Result := zuBasisN(vonBasisN(ZahlN, BasisN), BasisM);
End;
der Defaultstring reicht bis Basis 64
Delphi-Quellcode:
s := '123456789';
s := zuBasisN(s, '2');
WriteLn(s); // s = '111010110111100110100010101';
s := vonBasisN(s, '2');
WriteLn(s); // s = '123456789'
s := zuBasisN(s, '16');
WriteLn(s); // s = '75BCD15';
s := vonBasisN(s, '16');
WriteLn(s); // s = '123456789'
s := zuBasisN(s, '64');
WriteLn(s); // s = '7MyqL';
s := vonBasisN(s, '64');
WriteLn(s); // s = '123456789'
falls Keiner was einzuwenden hat, bau ich's bei Gelegenheit mit ein
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
|
|
Zitat
|