Autor Beitrag
ggehrma
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

WinXP
D2005 Pers.
BeitragVerfasst: Sa 17.09.05 19:37 
Hallo,

Ich möchte aus einer Liste mit Zahlen die 10 höchsten Zahlen ermitteln. Bisher mache ich das so:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
var
   Top10: Array [0..9OF Integer;

PROCEDURE FindTop10;
VAR x,y: Integer;
    Shuffle: PShuffle;
BEGIN
  FOR x := 0 TO ZahlenListe.Count-1 DO BEGIN
    Shuffle := PShuffle(ZahlenListe.Objects[x]);
    IF Shuffle.PlayCount > Top10[0THEN BEGIN
      FOR y := 0 TO 8 DO
        Top10[y+1] := Top10[y];
      Top10[0] := Shuffle.PlayCount;
    END
    ELSE IF (Shuffle.PlayCount > Top10[1]) AND (Shuffle.PlayCount <= Top10[0]) THEN BEGIN
      FOR y := 1 TO 8 DO
        Top10[y+1] := Top10[y];
      Top10[1] := Shuffle.PlayCount;
    END
    ELSE IF (Shuffle.PlayCount > Top10[2]) AND (Shuffle.PlayCount <= Top10[1]) THEN BEGIN
      FOR y := 2 TO 8 DO
        Top10[y+1] := Top10[y];
      Top10[2] := Shuffle.PlayCount;
    END
    ELSE IF (Shuffle.PlayCount > Top10[3]) AND (Shuffle.PlayCount <= Top10[2]) THEN BEGIN
      FOR y := 3 TO 8 DO
        Top10[y+1] := Top10[y];
      Top10[3] := Shuffle.PlayCount;
    END
    .
    .
    .
    ELSE IF (Shuffle.PlayCount > Top10[9]) AND (Shuffle.PlayCount <= Top10[8]) THEN BEGIN
      Top10[9] := Shuffle.PlayCount;
    END;
  END;
END;

Ich hoffe der Code ist einigermaßen verständlich, da er etwas aus dem Zusammenhang gerissen ist.
Meine Frage ist jetzt, ob man meinen Code noch irgendwie verkürzen kann. Hab da an eine FOR-Schleife gedacht, weiß aber grade nicht, wie ich die da rein bringen soll. Ist wahrscheinlich ganz einfach, aber mir fehlt eben der "aso-Einfall".

mfg, ggehrma.

_________________
"...To boldly go where no one has gone before."
worm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 135


D6 Prof
BeitragVerfasst: Sa 17.09.05 19:49 
Du hast Recht, mit einer weiteren Schleife wäre der Code um einiges kürzer. Ich will Dir jetzt keinen Code vorkauen, aber im Prinzip holst Du Dir wie bisher einen Wert in Shuffle, und gehst dann in den Top10 von oben (1. Platz) nach unten, bis Du einen Wert findest, der kleiner als Dein Shuffle.PlayCount ist oder bis Du über Platz 10 hinaus bist (-> Abbruch). Dort verschiebst Du dann alle folgenden Werte und fügst Deinen Wert ein. Ganz am Anfang solltest Du deine Top10 natürlich mit Nullen füllen.

_________________
In the beginning, the universe was created. This has made a lot of people very angry, and is generally considered to have been a bad move.
ggehrma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

WinXP
D2005 Pers.
BeitragVerfasst: So 18.09.05 15:24 
Hallo,
ich habe das ganze jetzt mal so versucht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var
  Top10: Array [1..10OF Integer; 

PROCEDURE FindTop10;
VAR x,y,z: Integer;
    Shuffle: PShuffle;
BEGIN
  FOR x := 0 TO ZahlenListe.Count-1 DO BEGIN
    Shuffle := PShuffle(ZahlenListe.Objects[x]);
    FOR y := 1 TO 10 DO BEGIN
      IF Top10[y] < Shuffle.PlayCount THEN BEGIN
        FOR z := 10 DOWNTO y+1 DO
          Top10[z] := Top10[z-1];
        Top10[y] := Shuffle.PlayCount;
        break;
      END;
    END;
  END;
END;

Aber leider klappt das ganze nicht so wie es soll. Wo liegt mein Fehler?

_________________
"...To boldly go where no one has gone before."


Zuletzt bearbeitet von ggehrma am So 18.09.05 15:33, insgesamt 1-mal bearbeitet
ggehrma Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111

WinXP
D2005 Pers.
BeitragVerfasst: So 18.09.05 15:32 
Ups, funktioniert doch. Hab's nur falsch ausgegeben. Sorry.

_________________
"...To boldly go where no one has gone before."