Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Algorithmen (https://www.delphipraxis.net/28-library-algorithmen/)
-   -   Delphi Von beliebigem Zahlensystem in ein anderes (https://www.delphipraxis.net/36897-von-beliebigem-zahlensystem-ein-anderes.html)

glkgereon 27. Dez 2004 21:10


Von beliebigem Zahlensystem in ein anderes
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich werde nun einen Code vorstellen, mit dem man jede beliebige Zahl eines beliebigen Zahlensystem in jedes andere verwandeln kann.

dabei muss natürlich die Zahl in einen Int64 passen und das Zahlensystem muss <37 sein, da man sonst Sonderzeichen nehmen müsste...aber wers braucht kanns einfach anpassen.
Die hierfür entscheidende Stelle ist in GetChar bzw GetInt.

Hier erstmal etwas Code, den ich nachher brauche

Delphi-Quellcode:
function GetChar(Number: Integer):Char;
//Integer in Char umwandeln (z.B. 10 zu A)
begin
  if Number<10 then
    Result:=Chr(Number+48)
  else
    if Number<91 then
      Result:=Chr(Number+55)
  else
    Result:=' ';
end;

function GetInt(Value: Char):Integer;
//Char in Integer umwandeln (z.B. A zu 10)
begin
  Result:=Ord(Value);
  if Result<58 then
    Result:=Result-48
  else
    if Result<91 then
      Result:=Result-55
  else
    Result:=0;
end;

function Potenz (Base, Exp : Integer): Int64;
//berechnet eine Potenz...wahlweise auch IntPower in der Unit Math
var
  i: Integer;
begin
  Result:=1;
  for i:=1 to Exp do
    Result:=Result * Base;
end;
Nun der Code, mit dem Ich eine Dezimalzahl in eine Zahl der Basis Base umwandle.

Delphi-Quellcode:
function DecToBase(Value:Int64; Base:Integer):String;
var Rest:Integer;
begin
  repeat
    Rest:=Value Mod Base;
    Value:=Value Div Base;
    Result:=GetChar(Rest) + Result;
  until Value=0;
end;
Der Code um eine Zahl der Basis Base in eine Dezimalzahl umzuwandeln

Delphi-Quellcode:
function BaseToDec(Value:String; Base:Integer):Int64;
var
  i, j:Integer;
begin
  j:=0;
  Result:=0;
  for i:=Length(Value) downto 1 do
  begin
    Result:=Result + GetInt(Value[i]) * Potenz(Base,j);
    inc(j);
  end;
end;
So, und nun das ganze in eine Function verpackt:

Delphi-Quellcode:
function BaseToBase(StartBase: Integer; Value: String; EndBase: Integer):String;
begin
  Result:=DecToBase(BaseToDec(Value, StartBase), EndBase);
end;
[edit=Matze]Code formatiert. Mfg, Matze[/edit]
[edit=Chakotay1308]Anhänge geupdatet. Mfg, Chakotay1308[/edit]
[edit=Chakotay1308]Fehler im Source korrigiert. Mfg, Chakotay1308[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz