Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#90

Re: Mathe mit Strings (die deutsche StringMatheLib ._. )

  Alt 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.
  Mit Zitat antworten Zitat