StringGrid Sortieren

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
SIrRonBird
Beiträge: 24
Registriert: Mo 5. Nov 2012, 10:51

StringGrid Sortieren

Beitrag von SIrRonBird »

Hallo Leute,

ich soll eine Tabelle(nInhalt) in Lazarus der größe nach sortieren, wenn das nicht genug wäre muss ich das in 6 verschiedenen Methoden machen !

Kann mir jemand einen Pseudo Code oder gar ein komplettes Programm geben mit dem ich arbeiten kann ? Wäre echt super !

MFG SirRonBird



P.S. Bitte keine Wikipedia Links die Pseudo Codes sind nicht für Lazarus geschaffen ! :)

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2805
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: StringGrid Sortieren

Beitrag von m.fuchs »

  • Du hast diese Frage (in leicht abgewandelter Form) schon einmal gestellt. Es ist unhöflich im anderen Thema nicht zu reagieren und hier wieder neu zu fragen.
  • Du hast dort Antworten bekommen.
  • Pseudo-Codes sind (wie der Name schon sagt) kein fertiger Programmcode. Du musst also verstehen wie der dort beschriebene Algorithmus funktioniert und ihn in Pascal umsetzen.
  • Es wurden dir auch Tipps gegeben, wie du an Bespielpascalcode kommst.
  • Google ist nicht schwer zu bedienen.
  • Hier wird niemand deine Hausaufgaben machen. Du musst schon konkrete Fragen stellen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

SIrRonBird
Beiträge: 24
Registriert: Mo 5. Nov 2012, 10:51

Re: StringGrid Sortieren

Beitrag von SIrRonBird »

Ok sorry ich bin nur verzweifelt ! Unser Lehrer ist ein nicht gerade guter Erklährer :oops:

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: StringGrid Sortieren

Beitrag von Scotty »

SIrRonBird hat geschrieben:Kann mir jemand einen Pseudo Code oder gar ein komplettes Programm geben mit dem ich arbeiten kann ?
Pseudocode ohne Wikipedia: lmgtfy: http://www.codecodex.com/wiki/Bogosort
Komplettes Programm: schreibe ich dir gern. Mein heutiges Sonderangebot dafür liegt bei 195,90€.
Lies auch hier mal nach: http://de.wikipedia.org/wiki/Netiquette (Doppelposts werden nicht gern gesehen)
Und die letzte Bemerkung ist immer die wichtigste: Hausaufgaben schreibt man nicht ab!

SIrRonBird
Beiträge: 24
Registriert: Mo 5. Nov 2012, 10:51

Re: StringGrid Sortieren

Beitrag von SIrRonBird »

Ich entschuldige mich nochmal für mein Fehlverhalten !

Wie löscht man denn so ein Post ;(oder Thema )?

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: StringGrid Sortieren

Beitrag von Christian »

Warum sollte das gelöscht werden ?
Ist lehrreich, sollte bleiben.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

SIrRonBird
Beiträge: 24
Registriert: Mo 5. Nov 2012, 10:51

Re: StringGrid Sortieren

Beitrag von SIrRonBird »

Christian hat geschrieben:Warum sollte das gelöscht werden ?
Ist lehrreich, sollte bleiben.
Weil mich alle fertig machen ! :(

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: StringGrid Sortieren

Beitrag von hde »

soo schlimm ist ja nun auch nicht und fertig macht dich hier auch niemand.
hde

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: StringGrid Sortieren

Beitrag von mschnell »

SIrRonBird hat geschrieben:Weil mich alle fertig machen ! :(
Stelle eine konkrete Frage und alles wird gut !
(Pluto wird sicher helfen... )
-Michael

amrs
Beiträge: 9
Registriert: Fr 12. Okt 2012, 22:55
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: 32Bit

Re: StringGrid Sortieren

Beitrag von amrs »

Hi Du Verzweifelter,

wahrscheinlich kann ich Dir helfen.

Ich habe vor einem Jahr mal ein Buchhaltungsprogramm in Delphi programmiert. Dort sind mehrere StringGrids enthalten, die alle je nach Inhalt (Index, Nummer - Datum - Text) auf- bzw. absteigend sortiert werden können. Sobald ich Feierabend habe, kann ich Dir den Quellcode der Sortiererroutine schicken.

Andreas

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: StringGrid Sortieren

Beitrag von Heinrich Wolf »

SIrRonBird hat geschrieben:Bitte keine Wikipedia Links die Pseudo Codes sind nicht für Lazarus geschaffen ! :)
Der Sinn von Pseudo Code ist nicht, dass er für Lazarus oder sonst eine Sprache geschaffen wäre, sondern gerade eben unabhängig von einer Programmiersprache ist. Er soll für jeden lesbar und verständlich sein, so dass jemand ihn in die Programmiersprache seiner Wahl übersetzen kann.

Nicht dass ich Dir eine fertige Hausaufgabe abliefern möchte ... aber ich hab eine Klasse TSortGrid von TStringGrid abgeleitet, darin eine selbst gemachte Klasse TSort verwendet und das ganze in ein Demo Projekt verpackt. Ich möchte Dich ermutigen, das anzuschauen und zu verstehen. Wenn Du Teile davon in Deiner Hausaufgabe verwendest, bitte ich um eine saubere Dokumentation, wo Du das her hast. Es ist Code, der in Delphi ebenso wie in Lazarus funktioniert, in Linux ebenso wie in Windows. TSort enthält einen minimalistischen Code für QuickSort. Das ist sehr gebräuchlich und schnell. Aber damit enthält mein Projekt nur einen von Deinen 6 geforderten Algorithmen. Das ganze ist hier: http://www.Wolf-Fuerth.de/sortgrid.zip.

Ich kann auch das Buch Wirth, Niklaus; Algorithmen und Datenstrukturen; B.G. Teubner, Stuttgart; ISBN 3-519-02330-x empfehlen. Niklaus Wirth ist der Erfinder von Pascal. In dem Buch gibt es mehrere Sortieralgorithmen in Pascal aus der Zeit vor Turbo Pascal. Ich habe sie auf einem ganz alten Compiler für Commodore 4032 (Prozessor 6502 mit 8-Bit Registern und 16 Bit Adressbus) getestet. Den Quellcode lege ich hier als ZIP Archiv bei:
SORT.zip
(5.49 KiB) 121-mal heruntergeladen
Enthaltene Verfahren sind

Code: Alles auswählen

  sorttest(instsort);
  sorttest(bsort   );
  sorttest(selcsort);
  sorttest(shaksort);
  sorttest(heapsort);
  sorttest(qsort   );
  sorttest(shelsort);
  sorttest(binssort);
  sorttest(baumsort);
  sorttest(mlqsort );
  sorttest(bbmsort );
  sorttest(lqsort  );
  sorttest(mrgsort );
 
Das Testergebnis habe ich in simplen Graphiken mit einem selbst geschriebenen Graphikprozessor ausgegeben. Die Graphiken sind als *.gif in diesem ZIP Archiv:
SORTDAT.zip
(45.15 KiB) 107-mal heruntergeladen
Zur Anzeige als Bild in diesem Forum sind die Bilder zu hoch.
Zuletzt geändert von Heinrich Wolf am Di 6. Nov 2012, 17:42, insgesamt 1-mal geändert.

amrs
Beiträge: 9
Registriert: Fr 12. Okt 2012, 22:55
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: 32Bit

Re: StringGrid Sortieren

Beitrag von amrs »

Hi Du Verzweifelter,

hier ist der Ausschnitt aus einem Programm, das ich ketztes Jahr mal geschrieben habe:

Code: Alles auswählen

 
  for i := 1 to gridzeilen - 1 do
  begin
    for j := i + 1 to gridzeilen do
    begin
      tauschen := false;
      if ARow = 1 then
      begin
        case ACol of
          0:                 begin
                               if (StringGrid2.Cells[ACol, i] <> '') and (StringGrid2.Cells[ACol, j] <> '') then
                               begin
                                 if StringGrid2.Cells[ACol, i][1] > StringGrid2.Cells[ACol, j][1] then tauschen := true;
                                 if StringGrid2.Cells[ACol, i][1] = StringGrid2.Cells[ACol, j][1] then
                                 begin
                                   if StrToInt(Copy(StringGrid2.Cells[ACol, i], 2, Length(StringGrid2.Cells[ACol, i]) - 1)) > StrToInt(Copy(StringGrid2.Cells[ACol, j], 2, Length(StringGrid2.Cells[ACol, j]) - 1)) then tauschen := true;
                                 end;
                               end
                               else
                               begin
                                 if (StringGrid2.Cells[ACol, i] = '') and (StringGrid2.Cells[ACol, j] <> '') then tauschen := true;
                                 //if (StringGrid2.Cells[ACol, i] <> '') and (StringGrid2.Cells[ACol, j] = '') then tauschen := true;
                               end;
                             end;
          5, 9, 10, 11, 12:  if StringGrid2.Cells[ACol, i] > StringGrid2.Cells[ACol, j] then tauschen := true;
          1:                 if StrToDate(StringGrid2.Cells[ACol, i]) > StrToDate(StringGrid2.Cells[ACol, j]) then tauschen := true;
          2:                 begin
                               if (StringGrid2.Cells[ACol, i] <> '') and (StringGrid2.Cells[ACol, j] <> '')then
                               begin
                                 if StrToDate(StringGrid2.Cells[ACol, i]) > StrToDate(StringGrid2.Cells[ACol, j]) then tauschen := true;
                               end
                               else
                               begin
                                 if (StringGrid2.Cells[ACol, i] = '') and (StringGrid2.Cells[ACol, j] <> '') then tauschen := true;
                               end;
                             end;
          3,4,6:             if StrToInt(StringGrid2.Cells[ACol, i]) > StrToInt(StringGrid2.Cells[ACol, j]) then tauschen := true;
          7, 8:              if StrToFloat(StringGrid2.Cells[ACol, i]) > StrToFloat(StringGrid2.Cells[ACol, j]) then tauschen := true;
        end;
      end
      else
      begin
        case ACol of
          0:                 begin
                               if (StringGrid2.Cells[ACol, i] <> '') and (StringGrid2.Cells[ACol, j] <> '') then
                               begin
                                 if StringGrid2.Cells[ACol, i][1] < StringGrid2.Cells[ACol, j][1] then tauschen := true;
                                 if StringGrid2.Cells[ACol, i][1] = StringGrid2.Cells[ACol, j][1] then
                                 begin
                                   if StrToInt(Copy(StringGrid2.Cells[ACol, i], 2, Length(StringGrid2.Cells[ACol, i]) - 1)) < StrToInt(Copy(StringGrid2.Cells[ACol, j], 2, Length(StringGrid2.Cells[ACol, j]) - 1)) then tauschen := true;
                                 end;
                               end
                               else
                               begin
                                 if (StringGrid2.Cells[ACol, i] = '') and (StringGrid2.Cells[ACol, j] <> '') then tauschen := true;
                                 //if (StringGrid2.Cells[ACol, i] <> '') and (StringGrid2.Cells[ACol, j] = '') then tauschen := true;
                               end;
                             end;
          5, 9, 10, 11, 12:  if StringGrid2.Cells[ACol, i] < StringGrid2.Cells[ACol, j] then tauschen := true;
          1:                 if StrToDate(StringGrid2.Cells[ACol, i]) < StrToDate(StringGrid2.Cells[ACol, j]) then tauschen := true;
          2:                 begin
                               if (StringGrid2.Cells[ACol, i] <> '') and (StringGrid2.Cells[ACol, j] <> '')then
                               begin
                                 if StrToDate(StringGrid2.Cells[ACol, i]) < StrToDate(StringGrid2.Cells[ACol, j]) then tauschen := true;
                               end
                               else
                               begin
                                 if (StringGrid2.Cells[ACol, i] = '') and (StringGrid2.Cells[ACol, j] <> '') then tauschen := true;
                               end;
                             end;
          3, 4, 6:           if StrToInt(StringGrid2.Cells[ACol, i]) < StrToInt(StringGrid2.Cells[ACol, j]) then tauschen := true;
          7, 8:              if StrToFloat(StringGrid2.Cells[ACol, i]) < StrToFloat(StringGrid2.Cells[ACol, j]) then tauschen := true;
        end;
 
      end;
      if tauschen then
      begin                                             //ShowMessage('Austausch Zeilen ' + IntToStr(i) + ' <-> ' + IntToStr(j));
        for spalte := 0 to 12 do
        begin
          dummy := StringGrid2.Cells[spalte, i];
          StringGrid2.Cells[spalte, i] := StringGrid2.Cells[spalte, j];
          //Sleep(1000);
          StringGrid2.Cells[spalte, j] := dummy;
          //Sleep(1000);
        end;
      end;
    end;
  end;
In den Spalten 0 bis 12 befinden sich Daten unterschiedlicher Datentypen. Datum, Zahlen, Texte, Beträge, oder auch leere Felder.

Der Algrithmus sortiert den StringGrid auf- bzw. absteigend. Beim Algorithmus handelt es sich um "Linear-Sort", also das langsamste Verfahren, das es gibt. Bei den heutigen Prozessoren und den Datenmengen meines Programms reicht mir dieses.

Viel Spaß beim Umsetzen

Andreas

SIrRonBird
Beiträge: 24
Registriert: Mo 5. Nov 2012, 10:51

Re: StringGrid Sortieren

Beitrag von SIrRonBird »

Vielen vielen Dank euch ! Ich werde damit viel anfangen werden ! Danke

MFG SirRonBirdv :D

Antworten