Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Hilfe bei Selection Sort
ron007 - Do 25.10.07 19:11
Titel: Hilfe bei Selection Sort
Hy,
ich soll ein Programm erstellen, das mit einen Button zufällige Zahlen erstellen und keine doppelten erscheinen lässt (mit array gemacht und funktioniert) und mit einem Button sollen diese Zahlen mit Selection Sort sortiert werden. Nur leider erscheinen bei mir in allen Feldern nur Nullen und ich finde den Fehler nicht. Hoffe mit kann einer helfen dabei, das das Programm endlich funktioniert.
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: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
var Form1: TForm1; a: Array[1..6] of integer; zahl : Array [1..6] of integer; i,j : integer; d:integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); var neu : boolean; begin randomize; for i:=1 to 6 do begin repeat neu:=true; a [i]:=random(60)+1; for j:=1 to i-1 do if a[j]=a[i] then neu:=false; until neu=true;
edit1.text:=inttostr(a[1]); edit2.text:=inttostr(a[2]); edit3.text:=inttostr(a[3]); edit4.text:=inttostr(a[4]); edit5.text:=inttostr(a[5]); edit6.text:=inttostr(a[6]); end;
end;
procedure TForm1.Button2Click(Sender: TObject); var iMax, Max : Integer; begin
for i := 6 downto 2 do begin iMax := i; Max := zahl [i]; for j := 1 to (i-1) do if zahl [j] > Max then begin iMax := j; Max := zahl [j]; end; zahl [iMax] := zahl [i]; zahl [i] := Max;
end; edit1.text := IntToStr (zahl[1]); edit2.text := IntToStr (zahl[2]); edit3.text := IntToStr (zahl[3]); edit4.text := IntToStr (zahl[4]); edit5.text := IntToStr (zahl[5]); edit6.text := IntToStr (zahl[6]); end;
end. |
Gruß
ron
Dunkel - Do 25.10.07 21:08
Hallo!
In der Methode Button2Click greifst Du auf das Array Zahl zu ohne vorher die zufälligen 6 Nummern aus den TEdits ins Array zu kopieren. Und da Zahl ein globales Array of integer ist wird der Inhalt genullt.
Watt kann man machen? In der Methode Button1Click die Zufallszahlen nicht nur in die TEdits schreiben sondern gleichzeitig auch ins Array Zahl. Alternativ in der Sortier-Methode die Inhalte der TEdits ins zu sortierende Array kopieren.
ron007 - Fr 26.10.07 14:27
danke für die antwort.
vom dem was du gesagt hast verstehe ich es auch, aber habe leider keine Ahnung wie man so was macht. kannst du mir das bitte mal erklären wie man die Zufallszahlen gleichzeitig in array zahl schreibt?
gruß
ron
Narses - Fr 26.10.07 14:43
Moin und :welcome: im Forum!
Einfachste Lösung: lass das Array a[]weg und nimm nur zahl[], dann sollte es auch klappen. ;)
cu
Narses
ron007 - Sa 27.10.07 10:18
hy,
habe so gemacht wie Narses, es gesagt hat aba es funktioniert immer noch nicht werden imma noch nur nullen angezeigt. habe noch den quelltext rein gemacht, vll habe ich ja was falsch verstanden.
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: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private public end;
var Form1: TForm1; zahl : Array [1..6] of integer; i,j : integer; d:integer;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); var neu : boolean; begin randomize; for i:=1 to 6 do begin repeat neu:=true; zahl [i]:=random(60)+1; for j:=1 to i-1 do if zahl[j]=zahl[i] then neu:=false; until neu=true;
edit1.text:=inttostr(zahl[1]); edit2.text:=inttostr(zahl[2]); edit3.text:=inttostr(zahl[3]); edit4.text:=inttostr(zahl[4]); edit5.text:=inttostr(zahl[5]); edit6.text:=inttostr(zahl[6]); end;
end;
procedure TForm1.Button2Click(Sender: TObject); var iMax, Max : Integer; begin
for i := 6 downto 2 do begin iMax := i; Max := zahl [i]; for j := 1 to (i-1) do if zahl [j] > Max then begin iMax := j; Max := zahl [j]; end; zahl [iMax] := zahl [i]; zahl [i] := Max;
end; edit1.text := IntToStr (zahl[1]); edit2.text := IntToStr (zahl[2]); edit3.text := IntToStr (zahl[3]); edit4.text := IntToStr (zahl[4]); edit5.text := IntToStr (zahl[5]); edit6.text := IntToStr (zahl[6]); end;
end. |
Gruß
ron
Dunkel - Sa 27.10.07 14:10
Ich habe es mal eben nachgebaut, mit Deinem Code, und bei mir funktioniert's.
Drückst Du auch zuerst den Button1 und danch den Button2?
Edit: formatierten und aufgeräumten Code angehängt
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: 82: 83: 84: 85: 86: 87:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private zahl : Array [1..6] of integer; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var neu : boolean; i,j : integer; begin randomize; for i:=1 to 6 do repeat neu:=true; zahl [i]:=random(60)+1; for j:=1 to i-1 do if zahl[j]=zahl[i] then neu:=false; until neu; edit1.text:=inttostr(zahl[1]); edit2.text:=inttostr(zahl[2]); edit3.text:=inttostr(zahl[3]); edit4.text:=inttostr(zahl[4]); edit5.text:=inttostr(zahl[5]); edit6.text:=inttostr(zahl[6]); end;
procedure TForm1.Button2Click(Sender: TObject); var iMax, Max : Integer; i,j : integer; begin for i := 6 downto 2 do begin iMax := i; Max := zahl [i]; for j := 1 to (i-1) do if zahl [j] > Max then begin iMax := j; Max := zahl [j]; end; zahl [iMax] := zahl [i]; zahl [i] := Max; end;
edit1.text := IntToStr (zahl[1]); edit2.text := IntToStr (zahl[2]); edit3.text := IntToStr (zahl[3]); edit4.text := IntToStr (zahl[4]); edit5.text := IntToStr (zahl[5]); edit6.text := IntToStr (zahl[6]); end;
end. |
Delete - Sa 27.10.07 14:15
nur mal einen hinweis, wenn du deinen code, ordentlich formatieren würdest, so kannst du auch viel schneller fehler finden....
PS: IMHO ist dein code eine zumutung, also mal vernünftig formatieren!
ron007 - Sa 27.10.07 14:42
Dunkel hat folgendes geschrieben: |
Ich habe es mal eben nachgebaut, mit Deinem Code, und bei mir funktioniert's.
Drückst Du auch zuerst den Button1 und danch den Button2? |
ja, ich drücke erst Button 1, damir man die Zahlen sieht und dann drück ich Button 2, aber es kommen halt die Nullen.
Gruß
ron
Dunkel - Sa 27.10.07 14:46
ron007 hat folgendes geschrieben: |
ja, ich drücke erst Button 1, damir man die Zahlen sieht und dann drück ich Button 2, aber es kommen halt die Nullen.
Gruß
ron |
Tja, dann weiß ich auch nicht weiter. Wie schon geschrieben, bei mir funktioniert's.
Probier es vielleicht mal mit dem Code aus meinem letzten Beitrag-Edit.
ron007 - Sa 27.10.07 16:02
hy,
so habe es hin bekommen und weiß erst wo mein Fehler war. Bis jetzt ging ich immer davon aus die Projekt.exe immer auf die Unit1.pas zugreift, wemm man sie startet. Denn ich habe die *.pas Datei immer mit dem Editor geändert, da wir in der Schule ein älteres Delphi haben, welches nicht mit den Neuerungen der 7er Version, die ich zu Hause habe, klar kommt.
Gruß
ron
Moderiert von
Narses: 2. Frage entfernt.
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!