AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Probleme bei der Implementierung von Radixsort
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme bei der Implementierung von Radixsort

Ein Thema von Isildur · begonnen am 7. Nov 2007 · letzter Beitrag vom 9. Nov 2007
 
Isildur

Registriert seit: 7. Nov 2007
2 Beiträge
 
#5

Re: Probleme bei der Implementierung von Radixsort

  Alt 8. Nov 2007, 12:01
Hier zur Klärung von Anzahl und Feld(vorgegeben, nicht von mir geschrieben)
Delphi-Quellcode:
const max = 2000;
type TSortieren = class
    private
      Feld : array [0..max] of String;
      Anzahl : Integer;
[...]
procedure TSortieren.DatenLaden(Dateiname : String);
 var i : Integer;
 begin
   kAnzeigefenster.DateiInMemo(Dateiname);
   Anzahl := kAnzeigefenster.getAnzahl;
   if Anzahl > max then anzahl := max;
   for i := 1 to Anzahl do
       Feld[i] := kAnzeigefenster.getZeile(i-1);
end;
Delphi-Quellcode:
function TfrmAnzeigen.getAnzahl: Integer;
begin
  getAnzahl := memAnzeige.Lines.Count;
end;
Feld ist von 0 an deklariert wird aber erst ab 1 benutzt(siehe for-Schleife), m.E. müsste es for i := o to Anzahl-1 heißen. Dass hier ein statischer Array mit jeder Menge leeren Elementen verwendet wird - nya ist halt so..

Edit:Problem scheint gelöst zu sein. Es gab mehrere Fehler, einer der wichtigsten und verstecktesten war der, dass temp[j] nicht auf die Länge 0 zurück gesetz wurde und setlength in der Partionierung daher mist gebaut hat. So scheint es augenblicklich zu klappen(ich glaube es noch nicht ganz aber bisher keine Fehler)
Delphi-Quellcode:
procedure TSortieren.RadixSort;
var sorttil, i, j, k, l: integer;
var temp : array[0..255] of array of string; //array für alle ansichars
var pos : integer;
var ansi : integer;
begin
for sorttil := 4 downto 1 do begin
  //Partionierungsphase
  for i:=0 to Anzahl-1 do begin
    if length(Feld[i]) >= sorttil then begin
      ansi := ord(Feld[i,sorttil]);
      pos := length(temp[ansi]);
      if length(temp[ansi])-1 < 0 then pos := 0;
      setlength(temp[ansi],length(temp[ansi])+1);
      temp[ansi,pos] := Feld[i];
      Feld[i]:=''
    end;
  end;
  //Sammelphase
  l := 0;
  j := 0;
  repeat
    for k := 0 to length(temp[j])-1 do begin
      if length(temp[j])>=k+1 then begin
        Feld[l] := temp[j,k];
        temp[j,k] := '';
        l := l+1;
      end;
    end;
    setlength(temp[j],0);
    j := j+1;
  until j >= 255;
end;

end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz