Autor Beitrag
Maximal
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mo 19.04.10 20:17 
Hay

Ich hab ein Programm geschrieben, dass in Listbox 1 100 Variablen zufällig erzeugen soll und in Listbox 2 sollen diese dann sortiert erscheinen.
Dafür wollte ich eigentlich den BubbleSort benutzen. Leider bin ich nicht so der Delphi Meister und habe daher einfach den BubbleSort Code kopiert und dann versucht in mein Programm einzufügen.
Leider funktioniert das nich.

Kann sich vielleicht bitte mal jemand meinen Quelltext ansehen?
ausblenden 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:
procedure TForm1.Panel1Click(Sender: TObject);
var merke,N,k,j,m,i:integer;
data:array[1..100of integer;

begin
for N:=1 to 100 do
     begin
       data[N]:=random(1000);
       listbox1.items.add(inttostr(data[N]));
     end;

  For i:= N downto 1 Do
    For j:= 1 To i Do
      If (Data[j-1] > Data[j]) Then
      merke := data[j];
data[j] := data[j-1];
data[j-1] := merke;

         for m := 1 to 100 do
         begin
listbox2.items.add(inttostr(data[m]));
                                    end;
end;

end.

schon mal danke für das lesen meines Thread ind ich hoffe ich nerv euch nicht mit dieser noob frage...
mfg Max

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 19.04.10 20:33 
Hey,

da fehlt ein Begin und ein End und das N im Schleifenkopf war falsch:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Panel1Click(Sender: TObject);
var
  merke,N,k,j,m,i:integer;
  data:array[1..100of integer;
begin
  for N:=1 to 100 do begin
    data[N]:=random(1000);
    Listbox1.Items.add(IntToStr(data[N]));
  end;

  for i:= High(data) downto 1 do
    for j:= 1 to i do
      if (Data[j-1] > Data[j]) then begin
        merke     := data[j];
        data[j]   := data[j-1];
        data[j-1] := merke;
      end;

  for m := 1 to 100 do begin
    listbox2.items.add(IntToStr(data[m]));
  end;
end;


Und wenn du das nächste mal Quelltext postest, schreib den bitte in Delphi-Tags, dann sieht das so aus wie bei mir oben, da kammer das besser lesen: <span class="inlineSyntax"><span class="codecomment">{PROTECTTAGa3bdd7c58add8a2f8110891a84fc177e}</span></span> ;)

Das n un das m in der ersten bzw. letzten Schleife könnte man auch durch ein i ersetzen, das spart speicherplatz :D aber ich glaub das is erstma nich so wichtig^^

€: du solltest den Quelltext aber nicht nur kopieren, sondern auch versuchen ihn zu verstehen, denn nur so kommst du dahinter wie man das dann mal selbst machen kann :mahn:

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
delphi10
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 447
Erhaltene Danke: 2

W2K, XP, Vista64, Win7 64
RAD-Studio 2010
BeitragVerfasst: Di 20.04.10 00:00 
Zwischen
ausblenden Delphi-Quelltext
1:
2:
begin 
for N:=1 to 100 do begin

wäre ein
ausblenden Delphi-Quelltext
1:
Randomize;					

zwecks Initialisierung ganz nützlich.

_________________
Salus populi suprema lex esto
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 20.04.10 09:23 
eigentlich wirde ein randomize; eher ins FormCreate gehören weil man randomize nur ein mal aufrufen sollte.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Maximal Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 22.04.10 21:56 
FormCreate?
Also in der Schule im Infounterricht haben wir das so gelernt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
 for N:=1 to 100 do
     begin
       data[N]:=random(1000);
       end;


Darf ich mal fragen was eine Initialisierung bringen würde bzw. warum man randomize nur ein mal aufrufen sollte?

Vielen Dank für die Antworten
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Do 22.04.10 22:04 
Randomize generiert einmal den sogenannten RandSeed, also die Daten die dann Random ausspucken. Ohne Initialisierung glaub ich kommen eher schlechte Zufallszahlen raus. Warum man das jetzt nur einmal aufrufen soll, weiß ich selbst nicht, aber in der Delphi-Hilfe wird ebenfalls klar empfohlen Randomize nur einmal aufzurufen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.