Also um einen Wert gleich an die richtige Position im Feld zu speichern geht folgendes
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function TForm1.SortInsert(Neu: Real): Integer; {Fügt neuen Wert sortiert in Array of Real ein} var i1, i2 : Integer; begin {Einfügeposition suchen} For i1 := Low(Feld) to High(Feld) do begin IF Neu < Feld[i1] then break; end; {Falls Neu größer ist als letzter Feldwert} IF i1 = High(Feld)+1 then DEC(i1); {Alle nachfolgenden 1 Platz nach hinten setzen (Platz schaffen)} For i2 := High(Feld)-1 downto i1 do begin Feld[i2+1] := Feld[i2]; end; {Neuen Wert speichern} Feld[i1] := Neu; SortInsert := i1; end; |
Diese Funktion gibt Dir auch gleich die Einfügeposition aus.
Das Feld muß vorher aber mit Maximalwerten initialisiert werden.
Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.FormCreate(Sender: TObject); var i : Integer; begin For i := Low(Feld) to High(Feld) do Feld[i] := 1.7E+308; end; |
Genau darin liegt aber ein kleines Problem: In zukünftigen Delphi-Versionen könnte sich dieser Maximalwert ändern! zB in Extended
Ein anderes Problem stellt sich, wenn der neue Wert größer als der letzte Wert in der Liste ist. Soll man nun einfügen, und den niedrigeren Wert raushauen, oder soll man sagen, daß der Wert eben oberhalb liegt....
Mit Zeigern kenn ich mich selber nicht besonders aus, und ich sehe auch grad keinen Sinn sie hier einzusetzen.
Ach ja: Die Feldgröße ist innerhalb des Integerbereiches frei.
Ist also egal ob Du ein 0..9 Feld hast oder ein 0..2147483647
(Und sag mir mal die Note, die Du (ich) dafür jetzt bekomme)

"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."