![]() |
Sortieren nach Liste
Hallo zusammen,
ich wollte mir ein Programm basteln, das beim Stimmenauszählen hilft. Leider funktioniert das ganze nicht... Neben dem Fehler will ich aber auch wissen, wie ich die Namen in der oberen Zeile gleich den sortierten Zahlen entsprechend einordne.
Delphi-Quellcode:
Danke für die Antworten!
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls; type TForm1 = class(TForm) StringGrid1: TStringGrid; StringGrid2: TStringGrid; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure StringGrid1Click(Sender: TObject); procedure StringGrid2Click(Sender: TObject); procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure StringGrid2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Liste: array[1..100000] of integer; ListeMisch: array[1..100000] of integer; ListeQuick: array[1..100000] of integer; l: integer; vertausche,vergleiche,Mischtausch,Mischvergleich: integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i,k: integer; begin For k:= 1 to 64 do begin For i:= 1 to 35 do begin stringgrid1.Cells[i,k]:=inttostr(0); end; end; For k:= 1 to 64 do begin For i:= 1 to 35 do begin stringgrid2.Cells[i,k]:=inttostr(0); end; end; stringgrid1.cells[0,1]:='Abschreiber/in'; stringgrid1.cells[0,2]:='Angeber/in'; stringgrid1.cells[0,3]:='Antisportler/in'; stringgrid1.cells[0,4]:='Arroganteste/r'; stringgrid1.cells[0,5]:='Besserwisser/in'; stringgrid1.cells[0,6]:='beste Frisur'; stringgrid1.cells[0,7]:='beste/r Schauspieler/in'; stringgrid1.cells[0,8]:='dümmste Fragen'; stringgrid1.cells[0,9]:='Bestgelaunteste/r'; stringgrid1.cells[0,10]:='Clown'; stringgrid1.cells[0,11]:='Rätsel'; stringgrid1.cells[0,12]:='Eitelste/r'; stringgrid1.cells[0,13]:='Millionär/in'; stringgrid1.cells[0,14]:='Vater/Mutter'; stringgrid1.cells[0,15]:='Extrovertierteste/r'; stringgrid1.cells[0,16]:='Faulste/r'; stringgrid1.cells[0,17]:='Freak'; stringgrid1.cells[0,18]:='Geizigste/r'; stringgrid1.cells[0,19]:='Höflichste/r'; stringgrid1.cells[0,20]:='Infantilste/r'; stringgrid1.cells[0,21]:='Intelligenzbestie'; stringgrid1.cells[0,22]:='Interessanteste/r'; stringgrid1.cells[0,23]:='Lache'; stringgrid1.cells[0,24]:='Kreativste/r'; stringgrid1.cells[0,25]:='Lehrerliebling'; stringgrid1.cells[0,26]:='Lustigste/r'; stringgrid1.cells[0,27]:='Macho/Tussi'; stringgrid1.cells[0,28]:='Mr/Ms Fashion'; stringgrid1.cells[0,29]:='Mr/Ms Max Planck'; stringgrid1.cells[0,30]:='Mitläufer/in'; stringgrid1.cells[0,31]:='möchtegern-witzig'; stringgrid1.cells[0,32]:='Morgenmuffel'; stringgrid1.cells[0,33]:='nervigste Stimme'; stringgrid1.cells[0,34]:='Netteste/r'; stringgrid1.cells[0,35]:='Nikotinopfer'; stringgrid1.cells[0,36]:='Öko'; stringgrid1.cells[0,37]:='One-Night'; stringgrid1.cells[0,38]:='Partyking'; stringgrid1.cells[0,39]:='Partykotzer/in'; stringgrid1.cells[0,40]:='politische Ansicht'; stringgrid1.cells[0,41]:='Schleimer/in'; stringgrid1.cells[0,42]:='Schnacker/in'; stringgrid1.cells[0,43]:='Schnapsdrossel'; stringgrid1.cells[0,44]:='Schnorrer/in'; stringgrid1.cells[0,45]:='Schönheit'; stringgrid1.cells[0,46]:='schönstes Lächeln'; stringgrid1.cells[0,47]:='Schwänzer/in'; stringgrid1.cells[0,48]:='Sozialste/r'; stringgrid1.cells[0,49]:='Sportlichste/r'; stringgrid1.cells[0,50]:='Stimmungskanone'; stringgrid1.cells[0,51]:='Tollpatsch'; stringgrid1.cells[0,52]:='Body'; stringgrid1.cells[0,53]:='Schwiegertraum'; stringgrid1.cells[0,54]:='Unauffälligste/r'; stringgrid1.cells[0,55]:='Unselbsständigste/r'; stringgrid1.cells[0,56]:='Verkehrsrowdy'; stringgrid1.cells[0,57]:='Verplanteste/r'; stringgrid1.cells[0,58]:='Verwöhnteste/r'; stringgrid1.cells[0,59]:='Weichei'; stringgrid1.cells[0,60]:='Wichtigtuer'; stringgrid1.cells[0,61]:='Wichtigtuer/in'; stringgrid1.cells[0,62]:='Zicke'; stringgrid1.cells[0,63]:='Zuspätkommer/in'; stringgrid1.cells[0,64]:='Zuverlässigste/r'; stringgrid1.cells[1,0]:='Anneke'; stringgrid1.cells[2,0]:='Anh'; stringgrid1.cells[3,0]:='Annika'; stringgrid1.cells[4,0]:='Ann-Cathrin'; stringgrid1.cells[5,0]:='Felicitas'; stringgrid1.cells[6,0]:='Finja'; stringgrid1.cells[7,0]:='Hanna'; stringgrid1.cells[8,0]:='Joana'; stringgrid1.cells[9,0]:='Johanna'; stringgrid1.cells[10,0]:='Josephine'; stringgrid1.cells[11,0]:='Julia E.'; stringgrid1.cells[12,0]:='Julia M.'; stringgrid1.cells[13,0]:='Kerrin'; stringgrid1.cells[14,0]:='Kim'; stringgrid1.cells[15,0]:='Kira B.'; stringgrid1.cells[16,0]:='Kira K.'; stringgrid1.cells[17,0]:='Kristina'; stringgrid1.cells[18,0]:='Liv'; stringgrid1.cells[19,0]:='Luise'; stringgrid1.cells[20,0]:='Marie'; stringgrid1.cells[21,0]:='Miriam'; stringgrid1.cells[22,0]:='Mona'; stringgrid1.cells[23,0]:='Natascha'; stringgrid1.cells[24,0]:='Pia'; stringgrid1.cells[25,0]:='Sarah E.'; stringgrid1.cells[26,0]:='Sarah H.'; stringgrid1.cells[27,0]:='Sarah T.'; stringgrid1.cells[28,0]:='Sina G.'; stringgrid1.cells[29,0]:='Sina N.'; stringgrid1.cells[30,0]:='Stefanie'; stringgrid1.cells[31,0]:='Svea'; stringgrid1.cells[32,0]:='Svenja'; stringgrid1.cells[33,0]:='Tjorven'; stringgrid1.cells[34,0]:='Vanessa'; stringgrid1.cells[35,0]:='Yasmin'; stringgrid2.cells[0,1]:='Abschreiber/in'; stringgrid2.cells[0,2]:='Angeber/in'; stringgrid2.cells[0,3]:='Antisportler/in'; stringgrid2.cells[0,4]:='Arroganteste/r'; stringgrid2.cells[0,5]:='Besserwisser/in'; stringgrid2.cells[0,6]:='beste Frisur'; stringgrid2.cells[0,7]:='beste/r Schauspieler/in'; stringgrid2.cells[0,8]:='dümmste Fragen'; stringgrid2.cells[0,9]:='Bestgelaunteste/r'; stringgrid2.cells[0,10]:='Clown'; stringgrid2.cells[0,11]:='Rätsel'; stringgrid2.cells[0,12]:='Eitelste/r'; stringgrid2.cells[0,13]:='Millionär/in'; stringgrid2.cells[0,14]:='Vater/Mutter'; stringgrid2.cells[0,15]:='Extrovertierteste/r'; stringgrid2.cells[0,16]:='Faulste/r'; stringgrid2.cells[0,17]:='Freak'; stringgrid2.cells[0,18]:='Geizigste/r'; stringgrid2.cells[0,19]:='Höflichste/r'; stringgrid2.cells[0,20]:='Infantilste/r'; stringgrid2.cells[0,21]:='Intelligenzbestie'; stringgrid2.cells[0,22]:='Interessanteste/r'; stringgrid2.cells[0,23]:='Lache'; stringgrid2.cells[0,24]:='Kreativste/r'; stringgrid2.cells[0,25]:='Lehrerliebling'; stringgrid2.cells[0,26]:='Lustigste/r'; stringgrid2.cells[0,27]:='Macho/Tussi'; stringgrid2.cells[0,28]:='Mr/Ms Fashion'; stringgrid2.cells[0,29]:='Mr/Ms Max Planck'; stringgrid2.cells[0,30]:='Mitläufer/in'; stringgrid2.cells[0,31]:='möchtegern-witzig'; stringgrid2.cells[0,32]:='Morgenmuffel'; stringgrid2.cells[0,33]:='nervigste Stimme'; stringgrid2.cells[0,34]:='Netteste/r'; stringgrid2.cells[0,35]:='Nikotinopfer'; stringgrid2.cells[0,36]:='Öko'; stringgrid2.cells[0,37]:='One-Night'; stringgrid2.cells[0,38]:='Partyking'; stringgrid2.cells[0,39]:='Partykotzer/in'; stringgrid2.cells[0,40]:='politische Ansicht'; stringgrid2.cells[0,41]:='Schleimer/in'; stringgrid2.cells[0,42]:='Schnacker/in'; stringgrid2.cells[0,43]:='Schnapsdrossel'; stringgrid2.cells[0,44]:='Schnorrer/in'; stringgrid2.cells[0,45]:='Schönheit'; stringgrid2.cells[0,46]:='schönstes Lächeln'; stringgrid2.cells[0,47]:='Schwänzer/in'; stringgrid2.cells[0,48]:='Sozialste/r'; stringgrid2.cells[0,49]:='Sportlichste/r'; stringgrid2.cells[0,50]:='Stimmungskanone'; stringgrid2.cells[0,51]:='Tollpatsch'; stringgrid2.cells[0,52]:='Body'; stringgrid2.cells[0,53]:='Schwiegertraum'; stringgrid2.cells[0,54]:='Unauffälligste/r'; stringgrid2.cells[0,55]:='Unselbsständigste/r'; stringgrid2.cells[0,56]:='Verkehrsrowdy'; stringgrid2.cells[0,57]:='Verplanteste/r'; stringgrid2.cells[0,58]:='Verwöhnteste/r'; stringgrid2.cells[0,59]:='Weichei'; stringgrid2.cells[0,60]:='Wichtigtuer'; stringgrid2.cells[0,61]:='Wichtigtuer/in'; stringgrid2.cells[0,62]:='Zicke'; stringgrid2.cells[0,63]:='Zuspätkommer/in'; stringgrid2.cells[0,64]:='Zuverlässigste/r'; stringgrid2.cells[1,0]:='Alexander'; stringgrid2.cells[2,0]:='Anil'; stringgrid2.cells[3,0]:='Arved'; stringgrid2.cells[4,0]:='Bennet'; stringgrid2.cells[5,0]:='Daniel W.'; stringgrid2.cells[6,0]:='Eike'; stringgrid2.cells[7,0]:='Felix J.'; stringgrid2.cells[8,0]:='Felix S.'; stringgrid2.cells[9,0]:='Ferdinand'; stringgrid2.cells[10,0]:='Florian'; stringgrid2.cells[11,0]:='Ha'; stringgrid2.cells[12,0]:='Jan'; stringgrid2.cells[13,0]:='Jannik F.'; stringgrid2.cells[14,0]:='Jaseper'; stringgrid2.cells[15,0]:='Jendrik'; stringgrid2.cells[16,0]:='Jonas'; stringgrid2.cells[17,0]:='Konrad'; stringgrid2.cells[18,0]:='Leewe'; stringgrid2.cells[19,0]:='Leif'; stringgrid2.cells[20,0]:='Lorenz'; stringgrid2.cells[21,0]:='Max K.'; stringgrid2.cells[22,0]:='Max S.'; stringgrid2.cells[23,0]:='Michel'; stringgrid2.cells[24,0]:='Nico'; stringgrid2.cells[25,0]:='Niklas F.'; stringgrid2.cells[26,0]:='Niklas H.'; stringgrid2.cells[27,0]:='Phil'; stringgrid2.cells[28,0]:='Philip R.'; stringgrid2.cells[29,0]:='Philip S.'; stringgrid2.cells[30,0]:='Sergej'; stringgrid2.cells[31,0]:='Simon'; stringgrid2.cells[32,0]:='Sören'; stringgrid2.cells[33,0]:='Steffen'; stringgrid2.cells[34,0]:='Stephan'; stringgrid2.cells[35,0]:='Till'; stringgrid2.cells[36,0]:='Tilmann'; stringgrid2.cells[37,0]:='Torben'; stringgrid2.cells[38,0]:='Yannik M.'; stringgrid2.cells[39,0]:='Yannick Z.'; end; procedure TForm1.StringGrid1Click(Sender: TObject); var xzelle, yzelle :integer; begin xzelle:=StringGrid1.Col; yzelle:=StringGrid1.Row; stringgrid1.cells[xzelle,yzelle]:=inttostr(strtoint(stringgrid1.cells[xzelle,yzelle])+1); end; procedure TForm1.StringGrid2Click(Sender: TObject); var xzelle, yzelle :integer; begin xzelle:=StringGrid2.Col; yzelle:=StringGrid2.Row; stringgrid2.cells[xzelle,yzelle]:=inttostr(strtoint(stringgrid2.cells[xzelle,yzelle])+1); end; procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var xzelle, yzelle :integer; begin if Shift = [ssRight] then // nur rechte maustaste begin xzelle:=StringGrid1.Col; yzelle:=StringGrid1.Row; stringgrid1.cells[xzelle,yzelle]:=inttostr(strtoint(stringgrid1.cells[xzelle,yzelle])-1); end; // if Shift in [ssRight] end; procedure TForm1.StringGrid2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var xzelle, yzelle :integer; begin if Shift = [ssRight] then // nur rechte maustaste begin xzelle:=StringGrid2.Col; yzelle:=StringGrid2.Row; stringgrid2.cells[xzelle,yzelle]:=inttostr(strtoint(stringgrid2.cells[xzelle,yzelle])-1); end; // if Shift in [ssRight] end; Procedure Mischsortieren1 (links,rechts: Integer); var Endelinks, Anfangrechts:Integer; Procedure Mischen1(I, J: integer); var Z, K: integer; begin if I < J then begin Mischvergleich:=Mischvergleich+1; if Liste[I] <= Liste[J] then begin Mischvergleich:=Mischvergleich+1; Mischen1(I + 1, J) end else begin Z := Liste[J]; For K := J - 1 downto I do begin Liste[K + 1] := Liste[K]; mischtausch:=mischtausch+1; end; Liste[I] := Z; mischtausch:=mischtausch+1; if J < rechts then begin Mischvergleich:=Mischvergleich+1; Mischen1(I + 1, J + 1); end; end; end; end; begin Endelinks:=trunc((links+rechts)/2); Anfangrechts:=Endelinks+1; if links<Endelinks then begin Mischvergleich:=Mischvergleich+1; Mischsortieren1(links,Endelinks); end; if Anfangrechts<rechts then begin Mischvergleich:=Mischvergleich+1; Mischsortieren1(Anfangrechts,rechts); end; Mischen1(links,Anfangrechts); end; procedure quicksort(erstes, letztes: integer); {Sortieren mittels Quicksort} var linker_merker, rechter_merker : integer; procedure zerlege (var links, rechts: integer); var pivot: integer; procedure tausche (var x, y: integer); var hilf: integer; begin hilf := x; x := y; y := hilf; vertausche := vertausche + 1; end; {of vertausche} begin {zerlege} pivot := ListeQuick[(links + rechts) DIV 2]; repeat while ListeQuick[links] < pivot do begin links := links + 1; vergleiche := vergleiche + 1; end; while ListeQuick[rechts] > pivot do begin rechts := rechts - 1; vergleiche := vergleiche + 1; end; if links <= rechts then begin tausche (ListeQuick[links], ListeQuick[rechts]); links := links + 1; rechts := rechts - 1; vergleiche := vergleiche + 1; end; until links > rechts; end;{of zerlege} begin {quicksort} linker_merker := erstes; rechter_merker := letztes; zerlege (linker_merker, rechter_merker); if erstes < rechter_merker then quicksort (erstes, rechter_merker); {Rekursiver Selbstaufruf!} if linker_merker < letztes then quicksort (linker_merker, letztes); {Rekursiver Selbstaufruf!} end; {of quicksort} procedure TForm1.Button1Click(Sender: TObject); var q: integer; begin For q:= 1 to 35 do begin For l:= 1 to 64 do begin Liste[l]:=strtoint(stringgrid1.cells[q+1,l]); end; Mischsortieren1(1,64); end; end; procedure TForm1.Button2Click(Sender: TObject); var q: integer; begin For q:= 1 to 35 do begin For l:= 1 to 64 do begin Liste[l]:=strtoint(stringgrid2.cells[q+1,l]); end; Mischsortieren1(1,64); end; end; end. |
AW: Sortieren nach Liste
Zitat:
|
AW: Sortieren nach Liste
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, hab's jetzt nicht für so schwer gehalten... einfach zwei StrinGrids erstellen und zwei Button und der Großteil des Textes besteht aus dem Inhalt des StrinGrids bzw. einem Mischsortierquelltext, aber du bist wohl der Boss, daher im Anhang das Programm.
|
AW: Sortieren nach Liste
Das nichts damit zu tun, wer hier der Boss ist.
Stell einfach deine Frage. Sie darf nicht lauten 'Macht mir einer das mal richtig?' oder 'Es geht nicht'. Das eine ist eine Zumutung und das andere keine Frage. |
AW: Sortieren nach Liste
Zitat:
|
AW: Sortieren nach Liste
Liste der Anhänge anzeigen (Anzahl: 1)
Mit dem schwer meinte ich das Verständnis des Programmes, denn so was haben wir seiner Zeit in der Schulinformatik gemacht und ja, ich gebe zu, dass ich nicht verstehe, warum Mischsortieren an der Stelle nicht einfach sortiert... vielleicht bin ich ja dumm oder so etwas in der Richtung
Ich kann mich da eigentlich nur wiederholen: Programm soll Stringgridinhalte sortieren, es sortiert jedoch nicht, ich finde meinen Fehler jedoch nicht, obwohl das ganze eigentlich ziemlich simpel nach Mischsortieren funktionieren sollte... Ich weiß nicht, wie ich das jetzt noch weiter in eine primitivere Sprache übersetzen sollte. Eine aktuelle Fassung (die davor war die nicht funktionierende Erstfassung, sorry) ist im Anhang. |
AW: Sortieren nach Liste
Ich habe mir Dein Programm nur oberflächlich angeschaut, vielleicht irre ich mich, aber ich habe den Eindruck, dass Du zwar die Liste sortierst (ob das funktioniert, haber ich nicht nachgeprüft), aber dann mit der sortierten Liste nichts mehr machst. Speziell das Stringgrid wird nach dem Sortieren der Liste nicht mit den sortierten Daten befüllt.
Nebenbei: 1. Das Füllen des Stringgrids mit Konstanten würde ich als denkbar schlechte Programmierpraxis bezeichnen, diese Daten gehören z.B. in ein Ini-File, wo man sie bequem bearbeiten kann, ohne bei jeder Änderung das Programm neu zu kompilieren. 2. Wenn genau das gleiche mehrmals passiert, dann sollte das in einer Prozedur nur einmal geschrieben werden. So sollten beispielsweise die Prozeduren Button1Click und Button2Click eine Prozedur
Delphi-Quellcode:
mit dem Parameter Stringgrid1 bzw. Stringgrid2 aufrufen, schliesslich passiert in beiden Fällen exakt das gleiche.
SortiereStringGrid (Sg: TStringgrid)
3. Was soll in der letzten Version das Quicksort - wird nirgends aufgerufen 4. Wozu sind die riesigen Integer-Arrays? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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