Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Erklärungsbedarf bei Sortierprogramm....
Luemmel - Di 12.05.09 18:29
Titel: Erklärungsbedarf bei Sortierprogramm....
Hey Leute,
ich bin grade dabei mich ein wenig in die OOP einzuarbeiten, habe aber bei folgendem Programm ein verständnisproblem und hoffe ihr könnt mir helfen ;) :
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:
| unit sortieren;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) ListBox1: TListBox; BtnFuellen: TButton; BtnSortieren: TButton; procedure BtnSortierenClick(Sender: TObject); procedure BtnFuellenClick(Sender: TObject); private public end;
var Form1: TForm1; IntegerArray: array [0..9] of integer; implementation
{$R *.dfm}
procedure TForm1.BtnFuellenClick(Sender: TObject); var z:integer; begin Listbox1.Items.clear; randomize; For z:= 0 to 9 do begin IntegerArray[z] := Random(100)+1; ListBox1.Items.Add(IntToStr(IntegerArray[z])); end; end;
procedure TForm1.BtnSortierenClick(Sender: TObject); var a,b,x : Integer; Begin For b:= length(IntegerArray)-2 downto 0 do begin for a:= 0 to b do begin if IntegerArray[a] > IntegerArray[a+1] then begin x:=IntegerArray[a]; IntegerArray[a]:=IntegerArray[a+1]; IntegerArray[a+1]:= x; end; end; end; Listbox1.Items.Clear; for a := 0 to 9 do ListBox1.Items.Add(IntToStr(IntegerArray[a]));
end;
end. |
Also Button Füllen verstehe ich ansatzweise , beim Button sortieren blicke ich absolut nicht durch??
mfg
Moderiert von
Gausi: Delphi-Tags hinzugefügt
ffgorcky - Di 12.05.09 18:45
Also: Dein BtnFuellenClick baut ja in Dein Array zufällige Zahlen zwischen 1 und 100,
während BtnSortierenClick in der äußeren Schleife von dem vorletzten (=legth-2) ArrayIndex zum ersten (=0) runterzählt.
In der Schleife darunter wird dann immer vom ersten (=0) bis zum momentanen Wert der äußeren Schleife hochzählt.
Und in der inneren Schleife vergleicht die Prozedur dann immer zwei aufeinander folgende Werte, und wenn der Wert iM Feld des höheren Indexes niedriger ist, dann wird der sogenannte "Dreiecks-Tausch" gemacht.
Ich hoffe, das hilft Dir dann jetzt schon weiter.
Bin aber gerne auch noch für weitere Fragen offen.
Delete - Di 12.05.09 18:47
Schau mal bei Wikipedia nach Bubblesort, dann wird es vielleicht klarer.
Luemmel - Di 12.05.09 18:55
Warum denn length -2 ?
Delete - Di 12.05.09 19:19
Das Array ist von 0 bis 9 definiert, d.h. die Länge ist 10. Es gibt aber kein Element mit dem Index 10, das letzte Element hat den Index 9. Da in der Schleife auf Element mit Index a+1 zugegriffen wird, muss man also noch einen abziehen, das ergibt dann Length - 2, oder anders ausgedrückt High(Array) - 1.
ffgorcky - Di 12.05.09 21:00
Weil die Variable a dann ja maximal b+1 (somit also a-1, siehe Zeile 55) sein kann, was genau der höchste ansprechbare Index ist.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!