Entwickler-Ecke
Algorithmen, Optimierung und Assembler - StringGrid mit Bubblesort sortieren
FlyMan - Mo 08.05.06 13:33
Titel: StringGrid mit Bubblesort sortieren
Hallo!
Wir sollen im Informatikunterrricht ein Programm erstellen das folgendermaßen aufgebaut ist:
Eine StringGrid Tabelle mit 100 Spalten soll durch eine Random Funktion über einen Button mit Zufallszahlen gefüllt werden. Über einen weiteren Button sollen die Zahlen mit Bubblesort sortiert werden (1-99) und über einen anderen Button invertiert (99-1) werden. Schließlich soll noch ein Button zum löschen des Inhaltes vorhanden sein.
Wer kann mir da weiterhelfen?
Vielen Dank im Vorraus.
Gruß
FlyMan
azubi_20 - Mo 08.05.06 13:37
Was hast du denn bis jetzt gemacht, bzw. wo hast du Probleme ?
FlyMan - Mo 08.05.06 13:49
Ich habe das Layout fertig. Weiterhin bekomm ich es hin, das in eine Spalte des StringGrids eine Zufallszahl geschrieben wird, die dann über den anderen Button gelöscht wird.
Über eine Schleife wäre es sicherlich am einfachsten, aber irgendwie bekomme ich das nur für einzelne Spalten hin...
azubi_20 - Mo 08.05.06 13:52
Poste doch mal deinen Quellcode, womit du eine Spalte füllst.
FlyMan - Mo 08.05.06 13:57
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type TForm1 = class(TForm) StringGrid1: TStringGrid; b_ende: TButton; b_sortieren: TButton; b_erzeugen: TButton; b_invertieren: TButton; b_loeschen: TButton; procedure b_endeClick(Sender: TObject); procedure b_erzeugenClick(Sender: TObject); procedure b_loeschenClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.b_endeClick(Sender: TObject); begin close; end;
procedure TForm1.b_erzeugenClick(Sender: TObject); begin StringGrid1.Cells[1,1]:=random(99)+1; Also so oder ähnlich, da ist irgendwo der Wurm drin.
end;
procedure TForm1.b_loeschenClick(Sender: TObject); begin StringGrid1.cells[1,0]:=' '; end;
end. |
Moderiert von
Gausi: Delphi-Tags hinzugefügt
azubi_20 - Mo 08.05.06 14:03
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.b_erzeugenClick(Sender: TObject); begin for Spalte := 0 to 99 do begin StringGrid1.Cells[Spalte,0]:=inttostr(random(99)+1); end; end; |
azubi_20 - Mo 08.05.06 14:25
Also, da du noch Sortierung reinbringen musst, sollte man die Daten und die Darstellung trennen.
Mein Vorschlag ist, folgende Prozeduren zu schreiben:
ErzeugeArray(anzahlElem:Integer);
SortiereArray(Richtung:Boolean);
FülleGrid;
LeereGrid;
Da den entsprechenden Code rein und an der richtigen Stelle aufrufen.
FlyMan - Mo 08.05.06 16:08
Ich hab das Programm jetzt soweit, dass ich die Spalten mit Zufallszahlen füllen kann.
Wir sollen das mit bubblesort sortieren und invertieren. Dazu haben wir zwar auch Unterlagen bekommen,
die allerdings schwer verständlich sind.
azubi_20 - Mo 08.05.06 16:30
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.sort(Richtung : Boolean); var Index: Integer; Lauf: Integer; x: Byte; begin for Lauf := 1 to 98 do for Index := 99 downto Lauf do if Richtung then begin if aZahlen[Index] < aZahlen[Index - 1] then begin x := aZahlen[Index]; aZahlen[Index] := aZahlen[Index - 1]; aZahlen[Index - 1] := x; end; end else begin if aZahlen[Index] > aZahlen[Index - 1] then begin x := aZahlen[Index]; aZahlen[Index] := aZahlen[Index - 1]; aZahlen[Index - 1] := x; end; end; end; |
Aufruf mit
sort(true)
oder
sort(false)
statt
aZahlen schreibst du den Namen deines Arrays
Edit :
Bubblesort : Es werden zwei Elemente verglichen und wenn nötig ausgetauscht.
mit dem Parameter
"Richtung" wird entschieden, ob auf- oder abwärts sortiert werden soll
FlyMan - Mo 08.05.06 19:48
Moin,
könntest du bitte mal deinen kompletten Quelltext des Programms posten. Bei einem kompletten Quelltext kann ich die Thematik besser verstehen.
azubi_20 - Di 09.05.06 09:36
Ich glaub eher du kannst dann besser copy and paste machen... :roll:
Also du deklarierst ein Array, das 100 Integer-Werte aufnehmen kann.
In einer Schleife kannst du jedem Element eine Zufallszahl zuordnen.
In einer weiteren Schleife kannst du das Grid mit den Werten des Arrays füllen.
Sortieren : s.o.
Nach dem Sortieren musst du natürlich dein Grid neu befüllen, damit man das Ergebnis auch sieht.
Wenn du was nicht verstehst, kann ich gerne versuchen, es dir zu erklären, aber komplett fertigen Code gibts nicht. 8)
FlyMan - Mi 10.05.06 14:31
So ich hab das versucht mit Copy und Paste. Aber was ein Array ist habe ich nicht rausgefunden, beschäftige mich auch noch nicht so lange mit Delphi.
Mein aktueller Quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type TForm1 = class(TForm) StringGrid1: TStringGrid; b_erzeugen: TButton; b_sortieren: TButton; b_invertieren: TButton; b_loeschen: TButton; b_close: TButton; procedure b_closeClick(Sender: TObject); procedure b_erzeugenClick(Sender: TObject); procedure b_loeschenClick(Sender: TObject); procedure b_sortierenClick(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.b_closeClick(Sender: TObject); begin close; end;
procedure TForm1.b_erzeugenClick(Sender: TObject); var i:integer; begin for i := 0 to 99 do StringGrid1.Cells[i,0]:=inttostr(random(99)+1);
end;
procedure TForm1.b_loeschenClick(Sender: TObject); begin StringGrid1.cells[0,0]:=' '; end;
procedure TForm1.b_sortierenClick(Sender: TObject); var Index: Integer; Lauf: Integer; x: Byte; begin for Lauf := 1 to 98 do for Index := 99 downto Lauf do if Richtung then begin if aZahlen[Index] < aZahlen[Index - 1] then begin x := aZahlen[Index]; aZahlen[Index] := aZahlen[Index - 1]; aZahlen[Index - 1] := x; end; end else begin if aZahlen[Index] > aZahlen[Index - 1] then begin x := aZahlen[Index]; aZahlen[Index] := aZahlen[Index - 1]; aZahlen[Index - 1] := x; end; end;
end;
end. |
Moderiert von
Gausi: Delphi-Tags hinzugefügt
azubi_20 - Mi 10.05.06 14:50
OK, das mit dem Copy'n'Paste war eher ein ironischer Hinweis, das ich dir nichts fertiges gebe, weil du dann nichts lernst. :roll:
Also zum Thema :
Ein
Array [
http://www.dsdt.info/tutorials/crashkurs/?page=6] ist sowas wie eine Tabelle.
Bisher erzeugst du die Zahlen direkt ins Grid, sie werden nicht gespeichert, du kannst also nicht darauf zugreifen und auch nicht sortieren.
Du musst trennen zwischen den Daten (gespeichert im Array) und der Darstellung (im Stringgrid).
Das sieht dann so aus : Du erzeugst eine Tabelle mit 100 Zahlen (=Array). Dann stellst du diese Zahlen in dein Grid.
Dein Array kannst du dann sortieren und anschliessend wieder im Stringgrid darstellen.
FlyMan - Mi 10.05.06 14:58
Heißt das, dass das Array im Hintergrund arbeitet und nicht in Form1 erzeugt werden muss?
azubi_20 - Mi 10.05.06 15:16
Naja, so ähnlich...
ein Array ist keine sichtbare Komponente (wie ein stringgrid) sonder eher ein Datentyp wie z.B. Integer. In einer Variable vom Typ Integer kannst du aber nur einen Wert speichern - in einem Array kannst du mehrere Werte des gleichen Datentyps speichern.
Beispiel für Integer:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var i : integer; begin i := 12; end; /.. |
Beispiel für Array of Integer :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| var a : Array[0..99] Of Integer; begin a[0]:= 15; a[1]:= 23; a[2]:= 63; end; |
DaKirsche - Mi 10.05.06 15:38
Etwas ähnliches mussten wir auch mal schreiben während meiner Schulzeit...
Die Zahlen werden ebenfalls in einem Stringgrid ausgegeben und dann Sortiert...
Musst mal schauen, ob du was mit dem Quellcode anfangen kannst...
Mfg
Tino - Mi 10.05.06 17:21
Hallo,
bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den
Richtlinien [
http://www.entwickler-ecke.de/richtlinien.html]:
1.2 Beiträge: |
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf

klicken und den Titel ändern. Dank Dir!
Viele Grüße,
Tino
FlyMan - Do 11.05.06 15:34
Ja hab ich geändert....
Ich werd mir die Posts mal anschauen uns sehen was sich draus machen lässt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!