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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  IntegerArray: array [0..9of 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+1then
        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 user profile iconGausi: 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.