![]() |
AW: Sortieren mit direktem Auswahlort
Erstmal möchte ich mich für die Antworten bedanken.
Trotzdem habe ich noch ein paar Fragen: 1. Um die Zahlen in das Array (sort) einzufügen habe ich das so gemacht:
Delphi-Quellcode:
zahl:= strtoint(edteingabe.caption);
for a:= min + 1 to bis do begin sort[a]:= zahl; end;
Delphi-Quellcode:
Frage: Funktioniert das so?
bis := High(sort);
min := low (sort); 2. Um die Zahlen zu sortieren:
Delphi-Quellcode:
bis dahin bin ich gekommen(vgl.
For i:= 1 to N-1 Do
Begin min:= i; For j:= i+1 To N Do If (sort[j] < sort[min]) Then min:= j; ![]() Dort steht nun aber die Werte i und min müssen getauscht werden (Dreieckstausch?). Aber wieso und wie sieht das dann aus? Und wie kann man dann das sortierte Array auf ein Label ausgeben??? Ich bedanke mich schonmal für alle Antworten. |
AW: Sortieren mit direktem Auswahlort
Also:
Zitat:
Sei mal so nett und poste ihn mal vollständiger... Im ersten Moment sieht es nämlich so aus, als würde dein Array nach dem Buttonclick immer mit dem jeweiligen Caption Wert gefüllt werden können: d.H. die Felder des Arrays hätten dann alle den selben Wert, wie er nach dem letzten Buttonclick übergeben würde... Zitat:
Zitat:
Delphi-Quellcode:
Label1.Caption := '';
For I := 0 To Length(Array)-1 do begin Label1.Caption := Label1.Caption + IntToStr(Array[i]) + ' '; end; |
AW: Sortieren mit direktem Auswahlort
Also das mit dem sortieren klappt erstmal soweit. Denke ich. Siehe hier:
Delphi-Quellcode:
Aber das Einfügen geht wirklich nicht.
procedure TForm1.btnsortClick(Sender: TObject);
begin For i:= 1 to 10-1 Do Begin min:= i; For j:= i+1 To 10 Do If (sort[j] < sort[min]) Then begin h :=sort[j] ; sort[j] :=sort[min]; sort[min]:=h ; end; end; lblsort.caption := ''; For i := 0 To Length(sort) do begin lblsort.caption := lblsort.caption + IntToStr(sort[i]) + ' '; end; end; Hier mal alles von Implementation an:
Delphi-Quellcode:
implementation
{$R *.lfm} { TForm1 } var sort : array[1..10]of integer; zahl, bis, i, a, j, h, min : integer ; procedure TForm1.FormCreate(Sender: TObject); begin bis := High(sort); min := low (sort); end; procedure TForm1.btnhinzuClick(Sender: TObject); begin zahl:= strtoint(edteingabe.caption); for a:= min + 1 to bis do begin sort[a]:= zahl; end; lblunsort.caption := inttostr(sort[1]) + ' hinzugefügt'; end; Zitat:
Ich weiß, das kann eigentlich nicht so schwer sein. Aber ich kenne mich damit nicht aus... |
AW: Sortieren mit direktem Auswahlort
Zitat:
Auf jeden Fall macht es das schon insgesamt einfacher. Du musst jetzt nur systematisch vorgehen: 1) Der erste Wert soll nach dem Button-Click an deine Array übergeben werden, natürlich dann auch gleich einsortiert werden. Das Problem ist, dass, wenn du z.B. drei Mal per Button-Click jeweils unterschiedliche Werte an deine Array übergibst, bekommst du folgendes Ergebnis (Allerdings nicht mit deiner Routine...): 0 0 0 0 0 0 0 14 47 81 Liegt da dran, dass du ja immer noch 7 unbelegte Werte im Array hast. 2) Voraussetzung dafür, dass du überhaupt einen Wert per Button-Click an dein Array gesichert übergeben kannst ist: a) verhindern, dass du über 10 Werte hinausschießt b) dass du mithilfe eines für a) notwendigen Zählers ERST alle Werte mit jedem Button-Click an dein Array übergibst und danach oder zwischendurch per zweiten Schalter dein Array sortierst und dann zur Ausgabe an ein Label übergibst. Sollten dich dann möglicherweise die '0'-Werte bei der Ausgabe stören, kannst du diese ja herausfiltern (alles außer 0 darf dem Label angefügt werden)... 3) Vielleicht solltest du bei der Eingabemöglichkeit für einzelne Werte noch verhindern, dass im TEdit was anderes, außer Ganzahlen eingegeben werden kann, da dein Array ja OF INTEGER ist... |
AW: Sortieren mit direktem Auswahlort
Noch ein Nachtrag:
Wenn du z.B. drei Werte übergeben hast, dann mal 'kurz' sortierst fehlt dir plötzlich die Position, wo du weitere in dein Array füllen kannst, da dann deine Zählerposition hinfällig ist. Daher wäre es das Einfachste, erst alle Werte zu übergeben und danach zu sortieren. Alles Andere macht dein Projekt deutlich komplexer... außer du arbeitest tatsächlich mit einem ZWEITEN Array, dass dann nur ein sortiertes Ergebnis enthält... |
AW: Sortieren mit direktem Auswahlort
Ein dynamisches Array
Delphi-Quellcode:
fängt bei 0 an.
var Foo : array of integer;
Ein statisches Array
Delphi-Quellcode:
fängt bei der angegebenen unteren Grenze an (hier 42)!
var Foo : array[42..45] of integer
|
AW: Sortieren mit direktem Auswahlort
Zitat:
Aber dein Einwand ist sinnvoll und berechtigt. |
AW: Sortieren mit direktem Auswahlort
Zitat:
Delphi-Quellcode:
Das scheint jetzt zu funktionieren. Ausprobiert habe ich das, indem ich die Werte des Arrays erstmal im Quellcode definiert habe.
var sort : array[0..9]of integer;
procedure TForm1.btnsortClick(Sender: TObject); begin For i:= 0 to 9-1 Do Begin min:= i; For j:= i+1 To 9 Do If (sort[j] < sort[min]) Then begin h :=sort[j] ; sort[j] :=sort[min]; sort[min]:=h ; end; end; lblsort.caption := ''; For i := 0 To Length(sort) -1 do begin lblsort.caption := lblsort.caption + IntToStr(sort[i]) + ' '; end; end; Zitat:
Wenn man anstatt integer --> real nimmt ginge es ja auch mit dezimalzahlen? Trotzdem weiß ich nicht wie man die Werte übergibt. Nach jedem betätigen des Buttons würde dieser doch das gesammte Array überlaufen? |
AW: Sortieren mit direktem Auswahlort
Dann musst du dir halt merken wieweit das Array gefüllt ist. Dafür gibt es Variablen.
Daran kannst du auch festmachen, ob das Array komplett gefüllt ist (keine weitere Eingabe möglich, aber Sortieren jetzt möglich). Mit einem Reset-Button kannst du dann die Variable wieder zurücksetzen. |
AW: Sortieren mit direktem Auswahlort
Es macht überigens Sinn, für einzelne Teile separate Methoden zu erstellen:
Delphi-Quellcode:
procedure TForm1.SortArray;
begin // hier der Code zum Sortieren end; function TForm1.ArrayToString : string; begin // hier der Code um aus dem Array einen String zu machen Result := ... end; procedure TForm1.Button1Click( Sender : TObject ); begin SortArray; lblsort.Caption := ArrayToString; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz