Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zahl in Array (https://www.delphipraxis.net/66759-zahl-array.html)

bonanza 3. Apr 2006 20:34


Zahl in Array
 
Hi,
ich muss eine Zahl in ein Array kriegen...z.b: 2015 wie kriege ich das in ein Array, so das dann da steht:
zahl[1] = 2
zahl[2] = 0
zahl[3] = 1
zahl[4] = 5

und dann muss ich diese Zahlen sortieren, also von klein nach groß also dann: 0125 (er soll dann ausgeben: 125) und von groß nach klein: 5210

oder gibt es noch eine andere möglichkeit die Ziffern einer Zahl zu sortieren ?

danke für eure Hilfe schonmal im voraus !

mfg
bonanza

Flare 3. Apr 2006 20:39

Re: Zahl in Array
 
Wandel doch die Zahl einfach in einen String um.
Delphi-Quellcode:
var textzahl: string;
    zahl,i: integer;
    zahlenarray: array of integer;
begin
  textzahl := inttostr(zahl);
  for i:=1 to strlen(textzahl) do zahlenarray[i-1] := textzahl[i];
end;
Ich gehe jetzt einfach mal davon aus dass du selber sortieren kannst ^^


Flare

bonanza 3. Apr 2006 20:40

Re: Zahl in Array
 
da kommt bei mir ein fehler:

[Error] Unit1.pas(33): Incompatible types: 'String' and 'PAnsiChar'


Ich hab dann einfach :

Delphi-Quellcode:
  textzahl := edit1.text;
genommen, denn ich gebe die zahl ja ein...oder war das falsch ?

Flare 3. Apr 2006 20:45

Re: Zahl in Array
 
Nee, war nicht falsch, mein einer Befehl war falsch! :oops:

Wegen sortieren kannst du mal hier gucken.

und hier noch mal die Korrigierung meinen Codes
Delphi-Quellcode:
var textzahl: string;
    zahl,i: integer;
    zahlenarray: array of integer;
begin
  textzahl := inttostr(zahl);
  for i:=1 to length(textzahl) do zahlenarray[i-1] := strtoint(Copy(textzahl, i, 1));
end;
Ist zwar immer noch ungetestet, aber jetzt müsste es klappen.


Flare

//Edit: Ich haue gerade eindeutig zu viel PHP und Delphi durcheinander, tut mir leid :oops:

bonanza 3. Apr 2006 20:46

Re: Zahl in Array
 
es kommt noch immer der selbe fehler und er bezieht sich auf "strlen(textzahl)"...


also eher auf die komplette zeile denn "Copy((textzahl), i, 1)"
gibt er den fehler aus:

[Error] Unit1.pas(33): Incompatible types: 'Integer' and 'String'


und wenn ich dan ein strtoint vor setze kommt folgendes:
[Error] Unit1.pas(33): Incompatible types

Flare 3. Apr 2006 20:50

Re: Zahl in Array
 
Der Code ist jetzt getestet und in meinem 2. Beitrag korrigiert reingestellt.


Flare

bonanza 3. Apr 2006 20:54

Re: Zahl in Array
 
ok danke...
aber wenn ich jetzt zum beispiel erstmal das array angucken will...
dazu wollte ich folgendes verwenden:

for i:= 1 to 4 do
edit2.text := edit2.text + inttostr(zahlenarray[i])+ ',';

(ich gebe maximal 4 stellige zahlen ein)

dann kommt ein Access violiation fehler

negaH 3. Apr 2006 20:59

Re: Zahl in Array
 
Delphi-Quellcode:

var
  Zahl,I: Integer;
  Count: array[0..9] of Integer;
  Result: String;
begin
  FillChar(Count, SizeOf(Count), 0);

  Zahl := 1234562345;

  while Zahl <> 0 do
  begin
    Inc(Count[Zahl mod 10]);
    Zahl := Zahl div 10;
  end;

  for I := Low(Count) to High(Count) do
    Result := Result + StringOfChar(Char(I + Ord('0')), Count[I]);
end;
Die einfachste und schnellste Sortierung ist ein indiziertes Array. Im Obigen Beispiel zerlegen wir die Zahl in ihre Ziffern 1,2,3,4,5,6,2,3,4,5 und benutzen diese als Index in Count[]. Darin zählen wir einfach das Auftreten jeder Ziffer. Wir haben also im Count[] array schon von Hause aus nach Ziffern 0 bis 9 sortiert und deren Anzahl ihres Auftretens.

In der Ausgabe als sortierter String gehen wir nun einfach dieses Count[] Array von unten nach oben -> von 0 bis 9, durch und bauen den String zusammen.

Gruß Hagen

bonanza 3. Apr 2006 21:06

Re: Zahl in Array
 
das ist super !
aber wie krieg ich die zahlen denn in diesem stil nach größe sortiert also von groß nach klein ?

Flare 3. Apr 2006 21:07

Re: Zahl in Array
 
Das Array wird immer von 0 an gezählt, also musst du deine Anzeige von 0 bis 3 eingrenzen, oder du änderst meinen Programmiertext oben ein bisschen, indem du bei der Zuweisung des Zeichens zahlenarray[i] := strtoint(Copy(textzahl, i, 1)); eingibst


Flare


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:37 Uhr.
Seite 1 von 2  1 2      

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