AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Sortieren mit direktem Auswahlort

Offene Frage von "Sir Rufo"
Ein Thema von rebellxsky · begonnen am 6. Dez 2014 · letzter Beitrag vom 7. Dez 2014
Antwort Antwort
Seite 2 von 4     12 34   
rebellxsky

Registriert seit: 6. Dez 2014
6 Beiträge
 
#11

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 14:15
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:
bis := High(sort);
 min := low (sort);
Frage: Funktioniert das so?

2. Um die Zahlen zu sortieren:
Delphi-Quellcode:
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;
bis dahin bin ich gekommen(vgl.http://www.delphipraxis.net/281-tuto...hmen-i-ii.html)
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.
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#12

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 14:35
Also:
Zitat:
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;
Leider ist nicht genau zu erkennen, wie die chronologische Abfolge deines Quellcodes ist.
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:
Dort steht nun aber die Werte i und min müssen getauscht werden (Dreieckstausch?). Aber wieso und wie sieht das dann aus?
Keine Ahnung... wie du das meinst?

Zitat:
Und wie kann man dann das sortierte Array auf ein Label ausgeben???
Du könntest dein Array mit einer For-Schleife durchlaufen und den jeweiligen Wert nach Umwandlung in ein String (IntToStr(STRING)) + einem Trenner wie einer Leerstelle, Bindestrich oder was weiß ich deinem Label anfügen:

Delphi-Quellcode:
Label1.Caption := '';
For I := 0 To Length(Array)-1 do
  begin
    Label1.Caption := Label1.Caption + IntToStr(Array[i]) + ' ';
  end;
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.

Geändert von humbuck ( 7. Dez 2014 um 14:37 Uhr) Grund: fehler
  Mit Zitat antworten Zitat
rebellxsky

Registriert seit: 6. Dez 2014
6 Beiträge
 
#13

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 14:49
Also das mit dem sortieren klappt erstmal soweit. Denke ich. Siehe hier:
Delphi-Quellcode:
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;
Aber das Einfügen geht wirklich nicht.
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:
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...
also das array hat nach dem sortieren die ersten beiden Werte = 0; Und die letzten (8) = so groß wie der zuletzt eingegebene Wert.

Ich weiß, das kann eigentlich nicht so schwer sein. Aber ich kenne mich damit nicht aus...
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#14

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 15:16
Zitat:
var sort : array[1..10]of integer;
Das sagt mir ja schon mal, es handelt sich bei dir um statisches Array mit 10 Werten... (Ein Array fängt übrigens bei 0 : Array[0..9])

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...
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#15

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 15:24
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...
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.

Geändert von humbuck ( 7. Dez 2014 um 15:27 Uhr) Grund: fehler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 15:25
Ein dynamisches Array var Foo : array of integer; fängt bei 0 an.
Ein statisches Array var Foo : array[42..45] of integer fängt bei der angegebenen unteren Grenze an (hier 42)!
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

Registriert seit: 26. Nov 2014
Ort: BW
65 Beiträge
 
Delphi XE4 Professional
 
#17

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 15:40
Zitat:
Ein statisches Array var Foo : array[42..45] of integer fängt bei der angegebenen unteren Grenze an (hier 42)!
Da hast du zweifellos Recht, fängt aber intern trotzdem bei 0 an. Erwähnt hatte ich das auch nur, viele Anfänger meinen, dass man mit 1 anfängt zu zählen, das in der Programmierung aber etwas anders ist.

Aber dein Einwand ist sinnvoll und berechtigt.
Jörch
Wissen ist Macht!
Wenn man nix weiß, muss man halt nur wissen, wo man nachschlagen muss.
Ergo: Ich weiß nix - macht nix.
  Mit Zitat antworten Zitat
rebellxsky

Registriert seit: 6. Dez 2014
6 Beiträge
 
#18

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 16:30
Zitat:
Das sagt mir ja schon mal, es handelt sich bei dir um statisches Array mit 10 Werten... (Ein Array fängt übrigens bei 0 : Array[0..9])
Das habe ich mal versucht anzupassen:
Delphi-Quellcode:
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;
Das scheint jetzt zu funktionieren. Ausprobiert habe ich das, indem ich die Werte des Arrays erstmal im Quellcode definiert habe.
Zitat:
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
Man könnte den Button doch nach zehnmaligen betätigen deaktiviern, oder?
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#19

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 16:52
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#20

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 16:58
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz