Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
26. Jan 2012
Ok, dank an alle. Ich habe jetzt eine funktionierende Lösung.
@himi
Wenn alle Einträge den gleichen Rang haben (Result = 0 ist), dann war in meinem Versuch der erste und letzte Eintrag (sowie ein weiteres Item) immer an der gleichen Stelle. Die anderen Positionen wechselten.
Das reichte mir nicht zum Verwürfeln der Reihenfolge, da ich das zum Losen von Spielern brauche.
Ich hatte...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
26. Jan 2012
Den TypeCast hatte ich schon mit TComponent(Item1) versucht, was auch schon zu einem Fehler führte.
Offenbar toleriert die SortRoutine wirklich nicht die Zufallswert-Zuweisung und "dreht durch" bzw. schmeißt irgendwelche temporäre Adressen durcheinander (oder was auch immer). Auf jeden Fall ist vor Sort noch alles i.O. und während der Sortierung kracht es dann.
Ob man das als Bug bezeichnen...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
26. Jan 2012
Ok, gelöst: In der Sortfunktion mit Random zu arbeiten, ist offenbar keine gute Idee. Scheinbar haut das u.U. die Items etwas durcheinander.
Ich habe einfach mal dem Tag der Einträge einen Zufallswert zugewiesen und so funktioniert das sofort perfekt.
if CL.Count > 1 then
begin
for I := 0 to CL.Count - 1 do
CL.Competitor(I).Tag := Random($FFFF);
...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
26. Jan 2012
Das dachte ich auch schon, aber eine Sortierfunktion nur mit Result := Random(3) - 1; macht keine Probleme.
Ich dachte dann, dass u.U. vielleicht durch die Zufallswerte ein paar "unnötige Vergleiche" durchgeführt werden, was aber letztlich kein wirkliches Problem wäre.
Wenn ich die Pointer vergleiche, hätte ich ja eine feste Reihenfolge, was ich gerade vermeiden will.
Ich kann ja mal...
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by stahli,
26. Jan 2012
Hi,
ich nutze einige Objekte zur Datenverwaltung und lasse die in ggf. Listen sortieren.
Gestern bekam ich ein Problem, das ich mir nicht erklären kann. Eine Sortierfunktion knallt mir gelegentlich um die Ohren.
Nach einiger Suche fand ich heraus, dass die Pointer i.d.R. so um die $0800.0000 liegen. Gelegentlich ist dann einer über $1000.0000 dabei, was zu einer Zugriffsverletzung führt....