![]() |
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 |
Re: Zahl in Array
Wandel doch die Zahl einfach in einen String um.
Delphi-Quellcode:
Ich gehe jetzt einfach mal davon aus dass du selber sortieren kannst ^^
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; Flare |
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:
genommen, denn ich gebe die zahl ja ein...oder war das falsch ?
textzahl := edit1.text;
|
Re: Zahl in Array
Nee, war nicht falsch, mein einer Befehl war falsch! :oops:
Wegen sortieren kannst du mal ![]() und hier noch mal die Korrigierung meinen Codes
Delphi-Quellcode:
Ist zwar immer noch ungetestet, aber jetzt müsste es klappen.
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; Flare //Edit: Ich haue gerade eindeutig zu viel PHP und Delphi durcheinander, tut mir leid :oops: |
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 |
Re: Zahl in Array
Der Code ist jetzt getestet und in meinem 2. Beitrag korrigiert reingestellt.
Flare |
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 |
Re: Zahl in Array
Delphi-Quellcode:
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.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; 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 |
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 ? |
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 |
Re: Zahl in Array
Schau mal bei
![]() |
Re: Zahl in Array
irgendwei funktionier das von Flare nicht :-\
und von Hagen schon aber da weiß ich noch nicht wie ich das da nach größe sortiere... |
Re: Zahl in Array
Sorry mann, aber ES IST schon sortiert. Defakto musst du garnichts sortieren in diesem Fall, und brauchst keinen Bubblesort oder ähnliches.
Schau die Sache ist doch ganz einfach: deine Zahl 123456441 besteht aus 8 Ziffern -> 1,2,3,4,5,6,4,4,1 richtig ? Nun zählen wir einfach alle diese Ziffern, wir berechnen deren Anzahl. Das machen wir indem wir einfach die Ziffern als Index in ein Array[0..9] benutzen. Count[0] = 0; Count[1] = 2; weil zwei Einsen vorkommen Count[2] = 1; weil eine Zwei vorkommt Count[3] = 1; weil eine Drei vorkommt Count[4] = 3; weil drei Vieren vorkommmen Count[5] = 1; weil eine Fünf vorkommt Count[6] = 1; weil eine Sechs vorkommt Count[7] = 0; Count[8] = 0; Count[9] = 0; weil keine 7,8,9 vorkommen. Nun gehen wir einfach das Array Count[] von unten nach oben durch, also von 0 bis 9 und bauen den String zusammen '11' + '2' + '3' + '444' + '5' + '6' -> '112344456' weil 2* die '1' 1* die '2' 1* die '3' 3* die '4' 1* die '5' 1* die '6' kommen im array Count[] vor. Willst du das andersrum sortiert haben -> '65444321' dann gehst du das Array Count eben einfach von Oben nach Unten in der Schleife durch:
Delphi-Quellcode:
fertig. Du musst also im Grunde garnichts sortieren, noch brauchst du viel an Speicher, das Einzigste was du ge-brauchen musst ist dein Hirn, und das Wissen das man manche Dinge auch ohne Bubblesort oder andere komplizierte Techniken lösen kann ;)
for I := High(Count) downto Low(Count) do
... Gruß Hagen |
Re: Zahl in Array
Und wenn du das wieder in ein Zahl Umwandeln möchtest, statt einen String dann geht dies so
Delphi-Quellcode:
Du hast dann keinen String sondern wieder einen Integer als Resulat.
Result := 0;
for I := Low(Count) to High(Count) do while Count[I] > 0 do begin Result := Result * 10 + I; Dec(Count[I]); end; Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr. |
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