Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array Sortieren (https://www.delphipraxis.net/14446-array-sortieren.html)

Plat 13. Jan 2004 13:20

Re: Array Sortieren
 
Zitat:

Zitat von Matze
Zitat:

Zitat von Plat
Hmmm das mit dem ListBox Sorted ist ja nur für die Oberfläche... das nützt mir ja nix, denn das Array bleibt ja so wie es ist.

Juhuu, ich hab Recht!

Jo, eine Seite weiter vorne steht ja, wie's geht. ;)

Wie was geht?

Meine E I G E N T L I C H E Frage wurde in diesem Thread noch nicht beantwortet :)

Denn ich hab nie was von Integer Werten gesprochen nur von Strings

Würde ich diese Sortier Algos umändern können, dass man mit denen Striungs sortieren kann, würde ich net seit Tagen versuchen es zu packen :/

Tpercon 13. Jan 2004 13:22

Re: Array Sortieren
 
Zitat:

Zitat von Plat
woe muss ich denn diese Prozedur umändern, damit ich sie auf String bzw. Buchstaben anwenden kann ?

Du mußt doch einfach überall wo integer auftauchen, dies in strings umbauen. Das sollte jeder können. Wie hast du das array eigentlich deklariert? fest, dynamisch?
Delphi-Quellcode:
procedure TForm1.Swap(var i,j: string);
var h: string;
begin
  h:=i;
  i:=j;
  j:=h;
end;

procedure TForm1.Sortiere;
var i,j: integer;
begin
  for i:= Low(tab) to High(tab) do    for j:= i + 1 to High(tab) do
    begin
      if tab[j]<tab[i] then Swap(tab[i],tab[j]);
    end;
end;

procedure TForm1.ArrayFuellen;
var i: integer;
begin
  ListBox1.Clear;

  for i:=0 to 200 do
  begin
    tab[i] := InttoStr(random(101)); //Zufallszahlen von 0-100
    ListBox1.Items.Add(tab[i]);
  end;
end;

procedure TForm1.SortClick(Sender: TObject);
var i: integer;
begin
  Sortiere;

  ListBox2.Clear;
  for i := Low(tab) to High(tab) do
  ListBox2.Items.Add(tab[i]);
end;
Ungetestet!!

Plat 13. Jan 2004 13:25

Re: Array Sortieren
 
Zitat:

Zitat von Tpercon
Zitat:

Zitat von Plat
woe muss ich denn diese Prozedur umändern, damit ich sie auf String bzw. Buchstaben anwenden kann ?

Delphi-Quellcode:
procedure TForm1.Swap(var i,j: string);
var h: string;
begin
  h:=i;
  i:=j;
  j:=h;
end;

procedure TForm1.Sortiere;
var i,j: integer;
begin
  for i:= Low(tab) to High(tab) do    for j:= i + 1 to High(tab) do
    begin
      if tab[j]<tab[i] then Swap(tab[i],tab[j]);
    end;
end;

procedure TForm1.ArrayFuellen;
var i: integer;
begin
  ListBox1.Clear;

  for i:=0 to 200 do
  begin
    tab[i] := InttoStr(random(101)); //Zufallszahlen von 0-100
    ListBox1.Items.Add(tab[i]);
  end;
end;

procedure TForm1.SortClick(Sender: TObject);
var i: integer;
begin
  Sortiere;

  ListBox2.Clear;
  for i := Low(tab) to High(tab) do
  ListBox2.Items.Add(tab[i]);
end;
Ungetestet!!


Erst einmal DANKE, aber warum dieses ListBox2 ? Kann man es denn nicht so umändern, dass alles gleich in der ListBox1 geschiet ? Muss doch klappen ?!!! Aber das ist erstmal unwichtig, schaff ich auch alleine :thuimb:

Tpercon 13. Jan 2004 13:26

Re: Array Sortieren
 
Da kannst du einfach 2 durch 1 ersetzen! Dies war wahrscheinlich nur da drin, damit man sieht wie es vorher aussah und nachher aussieht.

Plat 13. Jan 2004 13:35

Re: Array Sortieren
 
Zitat:

Zitat von Tpercon
Da kannst du einfach 2 durch 1 ersetzen! Dies war wahrscheinlich nur da drin, damit man sieht wie es vorher aussah und nachher aussieht.

Ok danke euch !!!! Werds gleich mal testen... wenss Komplikationen gibt, weiß ich ja wo mir geholfen wird :)

Jens Schumann 13. Jan 2004 13:44

Re: Array Sortieren
 
Hallo,
das einfachste ist: Speichere die Records nicht in einem Array, sondern in TList.
TList hat eine Sort Methode. Näheres siehe OH.

Plat 13. Jan 2004 13:47

Re: Array Sortieren
 
da gibt's nochn Paar fehler...

1. [Fehler] Unit1.pas(152): Deklaration von 'Swap' unterscheidet sich von vorheriger Deklaration
Delphi-Quellcode:
  procedure TForm1.Swap(var i,j: String);
2. [Fehler] Unit1.pas(166): Inkompatible Typen
Delphi-Quellcode:
  If TelefonBArr[j]<TelefonBArr[i] then Swap(TelefonBArr[i],TelefonBArr[j]);
3. [Fehler] Unit1.pas(166): Zu viele Parameter
Delphi-Quellcode:
  If TelefonBArr[j]<TelefonBArr[i] then Swap(TelefonBArr[i],TelefonBArr[j]);
4. [Fehler] Unit1.pas(176): Inkompatible Typen: 'String' und 'TTelefonB'
Delphi-Quellcode:
  ListBox1.Items.Add(TelefonBArr[i]);


Edit:

@Jens: Muss sie aber in einem Array speichern :)

Matze 13. Jan 2004 13:50

Re: Array Sortieren
 
zu 1.
Delphi-Quellcode:
procedure TForm1.Swap(var i,j: String);
muss unter public, private oder, wo du's hast, genau so deklariert sein.


Einen String kann man per ACSII-Code sortieren, das hab ich schon in meinem ersten Post geschrieben.

Delphi-Quellcode:
Ord['s']
gibt z.B den Integer für den Buchstaben S zurück

[Edit]FAlls du's so sortierst, dann kannst du meinen Code so lassen und musst nix in einen string umändern, da ja nur nach den Integer-Werten weiterhin sortiert wird.[/Edit]

Tpercon 13. Jan 2004 13:51

Re: Array Sortieren
 
Vielleicht hättest du mal von Anfang an gesagt, dass du mit einem record spielst.

Delphi-Quellcode:
private
  procedure Swap(var i,j: integer);
...

procedure TForm1.Swap(var i,j: integer);
var dummy: TelefonBArrrecord; // wie auch immer dein record heißt
begin
//kann auch sein, dass man records nicht so einfach "übertragen" kann
dummy := TelefonBArr[j];
TelefonBArr[i] := TelefonBArr[j];
TelefonBArr[j] := dummy;
end;

procedure TForm1.Sortiere;
var i,j: integer;
begin
  for i:= Low(tab) to High(tab) do
    for j:= i + 1 to High(tab) do begin
      if tab[j].Name< tab[i].Namethen Swap(i,j);
    end;
end;
Und in das ListBox kannst du natürlich auch nur einen Eintrag vom record immer hinzufügen. Also:
Delphi-Quellcode:
ListBox1.Items.Add(TelefonBArr[i].Name);
Wenn das jetzt nicht deinen Gewolltem entspricht, dann poste mal endlich genua was du willst, bzw. die relevanten Stellen deines bisherigen Codes.

Matze 13. Jan 2004 13:52

Re: Array Sortieren
 
Zitat:

Zitat von Tpercon
Vielleicht hättest du mal von Anfang an gesagt, dass du mit einem record spielst.

*zustimm* Alles umsonst :pale:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr.
Seite 3 von 5     123 45      

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