Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem bei Sortieralgorithmus (https://www.delphipraxis.net/24906-problem-bei-sortieralgorithmus.html)

Master_BB 28. Jun 2004 14:58


Problem bei Sortieralgorithmus
 
Hya,
ich hab derzeit ein Problem mit dem bubblesort algorithmus.
ich hatte ihn bisher in schon vielen Programmen in delphi umgesetzt aber gerade will er einfach nicht.
Das programm stürtzt ab wenn der algorithmus durchläuft. und ich finde den fehler einfach nicht.
hier der code:

Delphi-Quellcode:

Procedure TForm1.Tausch(a,b:KontaktType);
var c:kontakttype;
Begin
 c := a;
 a := b;
 b := c;
end;

Procedure TForm1.sortieren;
var i,dfs:integer;
    fertig:boolean;
    filename:string;
begin
 filename := ExtractFilePath(application.exename)+datafile;
 assignfile(df,filename);
 if fileexists(filename) then reset(df) else rewrite(df);
 for i := 1 to filesize(df) do
  begin
   read(df,kontakte[i]);
  end;
 dfs := filesize(df);
 
 repeat
  fertig := True;
  for i := 1 to dfs-1 do
   begin
    if kontakte[i].Name > kontakte[i+1].Name then
     begin
      tausch(kontakte[i],kontakte[i+1]);
      fertig := false;
     end;
   end;
 until fertig = true;

 seek(df,0);
 for i := 1 to dfs do
  begin
   write(df,kontakte[i]);
  end;
 closefile(df);
end;
ist zum sortieren von datensätzen aus einer typisierten datei.

Wäre echt cool wenn von euch einer den fehler entdecken würde muß weiter kommen.

Greetz
Master_BB

TypusMensch 28. Jun 2004 15:29

Re: Problem bei Sortieralgorithmus
 
Block ich net.

Was is KontaktType für eine Art Variable???

Und was is das:
filename := ExtractFilePath(application.exename)+datafile;

Wo wird datafile deklariert & definiert???

Das fehlt doch die Hälfte. Damit werden wohl wenig klarkommen...

Fragen wir mal so:
Du hast eine Datei in der folgende Zeilen stehen:

1
56
78
13443
2324
etc.

und die soll einfach sortiert werden? Sind da nur numerische oder auch alphanumerische Daten enthalten???

Master_BB 28. Jun 2004 18:35

Re: Problem bei Sortieralgorithmus
 
hm ich bin davon ausgegangen das das nicht benötigt wird da es an sich eindeutig ist das es funktioniert da speichern und laden läuft.
aber hier die deklarationen - kontakttype ist ein record

und das hier
filename := ExtractFilePath(application.exename)+datafile;
datafile ist die konstante und das davor gibt den pfad zurück wo sich die anwendung befindet.
das haut aber alles hin.

und da wir kontakte[i].name mit einander vergleichen werden strings sortiert nach a-z

Delphi-Quellcode:

type kontaktType = packed record
      Name :string[50];
      tele :string[20];
      handy:string[20];
      fax :string[20];
      adr :string[255];
end;

const ver = 'v0.5Beta';
      maxD = 1000;
      datafile = 'adressen.dat';

var df:file of kontakttype;
    kontakte:array[1..maxd]of kontakttype;

Nikolas 28. Jun 2004 19:10

Re: Problem bei Sortieralgorithmus
 
Dein Sort-Algorhytmus ist falsch aufgebaut.
Delphi-Quellcode:
repeat
  fertig := True;
  for i := 1 to dfs-1 do // bei einer Schleife ist nur sicher, dass das
   begin                // größte Element ganz hinten steht
    if kontakte[i].Name > kontakte[i+1].Name then
     begin
      tausch(kontakte[i],kontakte[i+1]);
      fertig := false;
     end;
   end;
until fertig = true;
Schau mal hier. Da steht alles wichtige drin.

Master_BB 29. Jun 2004 21:00

Re: Problem bei Sortieralgorithmus
 
hab den dummen fehler endlich gefunden.
der war soo dumm.

kukt mal in meine tausch procedure. dort wurde ein werteparameter verwendet
anstatt eines variablenparameters das ist der einzigste fehler.

so siehts richtig aus
Delphi-Quellcode:
Procedure TForm1.Tausch(VAR a,b:KontaktType);
var c:kontakttype;
Begin
c := a;
a := b;
b := c;
end;
komisch das das von euch keiner gesehen hat


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz