AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Quicksort eines Datensatzes nach alphabet
Thema durchsuchen
Ansicht
Themen-Optionen

Quicksort eines Datensatzes nach alphabet

Ein Thema von Sai · begonnen am 24. Jan 2008 · letzter Beitrag vom 26. Jan 2008
Antwort Antwort
Seite 2 von 2     12   
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#11

Re: Quicksort eines Datensatzes nach alphabet

  Alt 25. Jan 2008, 19:26
Hallo Sai!
Nun habe ich mal das alte Tp7 'rausgesucht. Beim Ausflug in die Vergangenheit habe ich mich dann ein wenig in alten Erinnerungen "festgelesen" - also hat es etwas länger gedauert. Dynamische Arrays hat es unter TP7 ja noch nicht gegeben, für die Speicherung der Datensätze hätte man damals also den Heap verwendet und eine verkettete Liste oder einen Baum angelegt. Das würde an dieser Stelle aber wohl zu weit gehen.

Wenn ich mich richtig erinnere, hast du unter TP7 nur 64 KBytes für alle Variablen zur Verfügung wenn du den Heap nicht benutzt. In Anbetracht der von dir genannten maximalen 100 Datensätze machen wir es am einfachsten so, wie man es eigentlich nicht machen sollte:

In der Unit deklarieren wir den DatenRecord, ein statisches Array um die Daten im RAM zu halten und einen Datensatz-Zähler...

Delphi-Quellcode:
type tDataRec = record of
                 Name : String[aa]; // Länge eintragen!!
                 Rasse : String[bb]; // Länge eintragen!!
                 end;

var DataArray : Array[0..99] of tDataRec;
     AnzData : Integer;
Dann brauchen wir eine Procedur, um die Daten in das Array einzulesen...

Delphi-Quellcode:
procedure ReadData;
var f : file of tDataRec;
    Idx : Integer;
begin
  Idx :=0;
  AnzData:=0;
  assign(f,FileName);
  {$I-} reset(f); {$I+}
  if IOresult=0 then begin
    while not(eof(f)) do begin
      read(f,DataArray[Idx]);
      inc(Idx);
      end;
    close(f);
    AnzData:=Idx;
    end;
end;
Anschließend wird das Array sortiert. Habe dafür einen uralten, nicht rekursiven Quicksort gefunden und an unsere Aufgabenstellung angepasst, der unter TP7 funktionieren müsste...

Delphi-Quellcode:
procedure SortData; { Aufsteigend sortieren }
var s : Array[1..20,1..2]of Integer; { Typ : Record          }
    i,j,l,r,sp : Integer;
    x : String[aa]; // Länge eintragen!!
    Hilf : tDataRec;
begin
  sp:=1;
  s[1,1]:=0;
  s[1,2]:=AnzData-1;
  while sp>0 do begin
    l:=s[sp,1];
    r:=s[sp,2];
    dec(sp);
    while r>l do begin
      i:=l;
      j:=r;
      x:=DataArray[(r+l)div 2].Name;
      while i<=j do begin
        while (DataArray[i].Name<x) and (i<r) do inc(i);
        while (DataArray[j].Name>x) and (j>l) do dec(j);
        if i<=j then begin
          Hilf:=DataArray[i];
          DataArray[i]:=DataArray[j];
          DataArray[j]:=Hilf;
          inc(i);
          dec(j)
          end;
        end;
      if (r-i) < (j-l) then
        if l<j then begin inc(sp);s[sp,1]:=l;s[sp,2]:=j;l:=i end
               else l:=i
                       else
        if i<r then begin inc(sp);s[sp,1]:=i;s[sp,2]:=r;r:=j end
               else r:=j
      end
    end
end;
Nach einlesen und sortieren der Daten kannst du nun das Array auf dem Bildschirm ausgeben (Array von 0 bis AnzData-1 durchlaufen). Wenn du nach dem Einfügen von Datensätzen den Sort erneut aufrufst und die Daten speicherst, ist natürlich auch die Datei nach dem Namen sortiert.

Ich habe das obenstehende NICHT mit TP7 getestet - das ist nun dein Part. Eine Frage zum Schluss muss ich dann aber doch loswerden: Wieso machst du das mit Turbo Pascal?

Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
Sai

Registriert seit: 24. Jan 2008
7 Beiträge
 
#12

Re: Quicksort eines Datensatzes nach alphabet

  Alt 25. Jan 2008, 19:43
so, besten dnak für die hilfe, ich teste das morgen früh mal weil ich nun erstmal weg muss
aber danke^^

TP7 verwende ich, weil wir das von der schule aus müssen
wir lernen das da in info, deswegen
aber frag mich nich wieso
ich frag unseren lehrer immer mal danach, er sagt immer nur weils einfach is

wenn ich dann sage es is sinnlos, verwendet heute keiner mehr
wird das konsequent überhört^^
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#13

Re: Quicksort eines Datensatzes nach alphabet

  Alt 25. Jan 2008, 19:59
Na, wenn es so ist, diskutieren kann man mit Lehreren ja nicht so wirklich.
Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
Sai

Registriert seit: 24. Jan 2008
7 Beiträge
 
#14

Re: Quicksort eines Datensatzes nach alphabet

  Alt 26. Jan 2008, 11:25
so, hab das nun probiert und es schient zumindest vom syntax her zu stimmen
allerdings konnt ichs noch nich so richtig testen weil die ausgabe nich so hinhauen will
welche array soll ich da denn nun schlussendlich ausgeben, ich denke doch mal den DataArray oder ?oô
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#15

Re: Quicksort eines Datensatzes nach alphabet

  Alt 26. Jan 2008, 14:47
Korrekt! DataArray soll das EINZIGE Array sein, das du verwendest! Wenn du nicht klar kommst, wäre es wohl das Beste den kompletten Code durchzusehen. Kannst du mir auch als PN schicken. Ich kann mir gut vorstellen, dass einiges überflüssig geworden ist und gelöscht werden sollte.
Gruß Ralph
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 20:39 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