Autor Beitrag
Luemmel
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 12.05.09 17:29 
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 ;) :

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Di 12.05.09 17: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.


Zuletzt bearbeitet von ffgorcky am Di 12.05.09 17:52, insgesamt 1-mal bearbeitet
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 12.05.09 17:47 
Schau mal bei Wikipedia nach Bubblesort, dann wird es vielleicht klarer.
Luemmel Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 12.05.09 17:55 
Warum denn length -2 ?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 12.05.09 18: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 573

WIN XP/2000 & 7Prof (Familie:Win95,Win98)

BeitragVerfasst: Di 12.05.09 20: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.