Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zahlen teilen (https://www.delphipraxis.net/31105-zahlen-teilen.html)

Luzifer666 4. Okt 2004 14:55


Zahlen teilen
 
Kurz und knackig:

Wie teile ich eine Zahl in die Zahlen aus der sie besteht?
(z.B. 12 in die Variablen a(=1) und b(=2) verteilen)

Danke!

jfheins 4. Okt 2004 14:58

Re: Zahlen teilen
 
Stichworte:
Delphi-Referenz durchsuchenCopy
Delphi-Referenz durchsuchenLength

alcaeus 4. Okt 2004 14:59

Re: Zahlen teilen
 
Hi Luzifer,

ich würde es über einen String machen:
Delphi-Quellcode:
procedure TeileZahl(Zahl: Integer; var Ziffern: array of Integer);
var
  sTemp: String;
  i: Integer;
begin
  sTemp := IntTOStr(Zahl);
  for i := 1 to Length(Zahl) do
    Ziffern[i] := StrToInt(Zahl[i]);
end;
Im Ziffern-Array sind dann die einzelnen Ziffern drin.

Shaman 4. Okt 2004 15:31

Re: Zahlen teilen
 
Hoi

Machs doch grad richtig mathematisch :wink:

Delphi-Quellcode:
type
  TDigit = 0..9;
  TDigits = array of TDigit;

procedure NumToDigits(Number: Integer; var Digits: TDigits);
var
  I: Integer;
begin
  if Number = 0 then
  begin
    SetLength(Digits, 1);
    Digits[0]:= 0;
  end else
  begin
    Number:= Abs(Number);
    SetLength(Digits, Trunc(Ln(Number) / Ln(10)) + 1);
    I:= 0;
    repeat
      Digits[I]:= Number mod 10;
      Number:= Number div 10;
      Inc(I);
    until Number = 0;
  end;
end;
Edit: Man könnte auch noch DivMod nehmen, dann gehts noch mehr ab :zwinker:

Gruss
Shaman

JasonDX 4. Okt 2004 15:35

Re: Zahlen teilen
 
Zitat:

Zitat von Shaman
Hoi

Machs doch grad richtig mathematisch :wink:

Delphi-Quellcode:
type
  TDigit = 0..9;
  TDigits = array of TDigit;

procedure NumToDigits(Number: Integer; var Digits: TDigits);
var
  I: Integer;
begin
  if Number = 0 then
  begin
    SetLength(Digits, 1);
    Digits[0]:= 0;
  end else
  begin
    Number:= Abs(Number);
    SetLength(Digits, Trunc(Ln(Number) / Ln(10)) + 1);
    I:= 0;
    repeat
      Digits[I]:= Number mod 10;
      Number:= Number div 10;
      Inc(I);
    until Number = 0;
  end;
end;
Gruss
Shaman

und noch etwas kürzer (und nicht in umgekehrter reihenfolge ;) )... :mrgreen:
Delphi-Quellcode:
procedure NumToDigits(Number: Integer; var Digits: TDigits);
var
  i: integer;
begin
  setLength(Digits, length(IntToStr(Number)));
  for i := 0 to high(Digits) do begin
    Digits[high(Digits) - i] := Number mod 10;
    Number := Number div 10;
  end;
end;

Shaman 4. Okt 2004 15:40

Re: Zahlen teilen
 
Ist doch ein schönes Beispiel, wo man den Logarithmus brauchen kann :)

Wieso umgekehrte Reihenfolge? Stimmt doch:
Number = Digits[0] + Digits[1]*10 + Digits[2]*10^2 + ...

JasonDX 4. Okt 2004 16:01

Re: Zahlen teilen
 
Zitat:

Zitat von Shaman
Ist doch ein schönes Beispiel, wo man den Logarithmus brauchen kann :)

Wieso umgekehrte Reihenfolge? Stimmt doch:
Number = Digits[0] + Digits[1]*10 + Digits[2]*10^2 + ...

warum umgekehrte reihenfolge? ok, kommt drauf an, wie mans sieht. :mrgreen:
das array bei der zahl 12345 schaut bei dir jedenfalls so aus: 5, 4, 3, 2, 1...
*noch nie logarithmus leiden konnt* :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:09 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