AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Code-Bibliothek Library: Algorithmen Delphi Von beliebigem Zahlensystem in ein anderes
Thema durchsuchen
Ansicht
Themen-Optionen

Von beliebigem Zahlensystem in ein anderes

Ein Thema von glkgereon · begonnen am 27. Dez 2004
Antwort Antwort
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Von beliebigem Zahlensystem in ein anderes

  Alt 27. Dez 2004, 22:10
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]
Angehängte Dateien
Dateityp: rar basetobase_117.rar (178,9 KB, 86x aufgerufen)
Dateityp: pas ubase2base_206.pas (1,5 KB, 52x aufgerufen)
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:48 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