Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Die höchsten Array-Werte anzeigen (https://www.delphipraxis.net/56489-die-hoechsten-array-werte-anzeigen.html)

dnk05 6. Nov 2005 17:46


Die höchsten Array-Werte anzeigen
 
Hallo!
Ich habe ein Array, sagen wir " g[1..200] of Integer; "
Den Variablen des Arrays sind jeweils unterschiedliche Zahlen zugeordnet.
Nun möchte ich in einem weiteren Array " p[1..10] of Integer " die zehn höchsten Zahlen von Array g haben.
Das heißt:
p[1] , p[2] sollen die zwei höchsten Zahlen sein aus dem Array g. (Also deren Inhalt haben).
Ich hoffe ihr versteht mein Problem und könnt mir möglichst schnell helfen!
Gruß, dnk05


Edit: sry.So solls also aussehn.

Zwei Arrays. g[1..200] of Integer | p[1..10] of Integer

g ist gefüllt mit Zahlen, p ist noch leer.

Angenommen der Inhalt von g[35] ist der größte Inhalt von g, soll p[1]:=35 sein.
Dabei ist der genaue Wert von g egal.

Jetzt klarer?
Sorry für eben, da wusst ichs selber noch net so genau



Danke.

alzaimar 6. Nov 2005 17:53

Re: Die höchsten Array-Werte anzeigen
 
Stichwort: Sortieren. Sortiere das Array g absteigend, sodass das größte Element an vorderster Stelle steht. Dann kopierst du einfach die ersten 10 Elemente in g.

Zum Sortieren gibts hier massig Hilfe.
Stichwort: Suchen.

dnk05 6. Nov 2005 18:03

Re: Die höchsten Array-Werte anzeigen
 
Edit: Siehe oben!

glkgereon 6. Nov 2005 18:43

Re: Die höchsten Array-Werte anzeigen
 
Delphi-Quellcode:
for i:=1 to 10 do
  begin
  p[i]:=1; //Init aufs erste
  for j:=2 to 200 do //wenn das g[p[i]] kleiner als g[j] dann neu setzen
    if g[p[i]]<g[j] then p[i]:=j;
  g[p[i]]:=0; //aus wertung raus
  end;
so ganz spontan...

wenn g unberührt bleiben soll musstes vorher nochmal kopieren...

marabu 6. Nov 2005 18:57

Re: Die höchsten Array-Werte anzeigen
 
Gab es in D3 schon dynamische Arrays?

Delphi-Quellcode:
function GetTopTenByIndex(values: array of integer): TIntegerDynArray;
var
  i: integer;
  list: TList;

  function ListSortCompare(index1, index2: integer): integer;
  begin
    // die Werte vergleichen, aber die Index-Werte sortieren
    if values[index1] < values[index2] then Result := -1
    else if values[index1] > values[index2] then Result := 1
    else Result := 0;
  end;

begin
  // weil TList einen QuickSort mit bringt...
  list := TList.Create;
  // Alle Indexwerte in die Liste
  for i := Low(values) to High(values) do
    list.Add(Pointer(i));
  // Sortieren
  list.Sort(@ListSortCompare);
  // Platz für Result-Vektor anfordern
  SetLength(Result, 10);
  // die Index-Werte der top ten übertragen
  for i := Low(Result) to High(Result) do
    Result[i] := Integer(list[High(values) - High(Result) + i]);
  // die Liste hat ihre Schuldigkeit getan - die Liste kann gehen...
  list.Free;
end;
Grüße vom marabu

Neutral General 6. Nov 2005 18:59

Re: Die höchsten Array-Werte anzeigen
 
Zitat:

Gab es in D3 schon dynamische Arrays?
Nein gab es nicht :mrgreen:

Jens Schumann 6. Nov 2005 20:33

Re: Die höchsten Array-Werte anzeigen
 
Hallo,
wie wäre es denn damit:
Delphi-Quellcode:
private
    { Private-Deklarationen }
    Far200 : Array[0..199] of Integer;
    Far10  : Array[0..9] of Integer;
...
procedure TForm1.Button2Click(Sender: TObject);
var
  iCnt : Integer;
  jCnt : Integer;
  kCnt : Integer;
begin
  Far10[0]:=Far200[0];
  For jCnt:=Low(Far200)+1 to High(Far200) do
    begin
    For iCnt:=Low(Far10) To High(Far10)do
      If Far10[iCnt]<Far200[jCnt] then
        begin
        For kCnt:=High(Far10) DownTo iCnt+1 do
          Far10[kCnt]:=Far10[kCnt-1];
        Far10[iCnt]:=Far200[jCnt];
        Break;
        end;
    end;
  ShowMessage('Fertig');
end;


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