Thema: Delphi Fehler beim Felderzeugen

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.120 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Fehler beim Felderzeugen

  Alt 27. Sep 2003, 18:01
Moin Brutus,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Zitat von Brutus:
Ihr könnt mir ruhig sagen wenn das zu dumm ist was ich frage - man lernt aus fehlern
Es gibt keine dummen Fragen, nur dumme Antworten.
Wenn man irgendetwas nicht weiss, oder sieht, dann ist das nun einmal so.
Das passiert ja nun wirklich jedem.

So, ich hab' mir mal Deine Sourcen angesehen, und ausprobiert. (ich hab' mir die Daten nur mal senkrecht ausgeben lassen)
Was mir dabei als erstes augefallen ist:
Beim Minsort bekam ich als Ergebnis u.a. eine -1 angezeigt, was ja nun wirklich nicht sein kann.
Der Bubblesort sortierte zwar auf den ersten Blick richtig, aber enthielt auch einen Wert, der in den Ursprungsdaten gar nicht enthalten war.

Der Minsort enthält auf jeden Fall schon einmal bei der Ausgabe der Daten einen Fehler:
Die Schleife muss von 0 bis 9 und nicht von 1 bis 10 laufen, da ja f von 0 bis 9 deklariert ist, Du aber die Indizes von 1 bis 10 ansprichst, und somit bei f[10] den Wert ausgegeben bekommst, der zufällig gerade an der Speicherstelle steht.
Gemeinerweise führt das nicht zwangsläufig zu einem Fehler, wenn die Bereichsprüfung (Compiler Direktive $R) nicht aktiviert ist.

Anschliessend erhielt ich aber immer noch einen negativen Wert in der Liste, was darauf hinwies, dass irgendwo immer noch ein Index verwendet wird, der ausserhalb des zulässigen Bereiches liegt.
Beim Minsort solltest Du, als erster Ansatz, mal die Schleifen korrigieren
FOR a:= 0 TO 8 DO und
FOR i:= a+1 TO 9 DO dann wäre zumindest schon einmal das Problem mit den falschen Indizes vom Tisch.

Den Minsort Algorithmus kenne ich jetzt leider nicht. Könntest Du den mal beschreiben?
Vielleicht hätte ich dann auch eine Chance, festzustellen, was bei der Umsetzung schiefgegangen ist.
Auffällig ist nur, dass mehrmaliges Ausführen des Minsort irgendwann zu einer korrekten Sortierung führt.

Beim Bubblesort hab' ich den Fehler gefunden:
Statt
FOR i:= 0 TO e-1 DO muss es
FOR i:= 0 TO e-2 DO heissen, da Du ansonsten bei
IF f[i]>f[i+1] THEN für i = 9 wieder einen Index ausserhalb des gültigen Bereiches erhältst.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat