AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

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
Benutzerbild von humbuck
humbuck

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

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 14: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
 
#2

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 15: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
 
#3

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 15: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
 
#4

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 15: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
rebellxsky

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

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 17:36
Ok ich hab es jetzt geschnallt. Dankeschön.

Aber zwei Fragen zur Verbesserung noch.
Delphi-Quellcode:
var sort : array[0..9]of integer;
    max, min, s : integer ;
procedure TForm1.FormCreate(Sender: TObject);
begin
 max := High(sort);
 min := low (sort);
 s := 0 ;
      btnsort.enabled :=false;
      btnhinzu.enabled :=true;
end;

procedure TForm1.btnhinzuClick(Sender: TObject);
begin
 sort[s]:= strtoint(edteingabe.caption);

 if s = 0 then
 lblunsort.caption:=lblunsort.caption + inttostr(sort[s])
              else
                  if sort[s]<>0 then
                  lblunsort.caption:=lblunsort.caption + '; ' + inttostr(sort[s]);
 if s >= max then
    begin
         btnsort.enabled:=true ;
        btnhinzu.enabled:=false;
    end;
 s:=s + 1;
end;

procedure TForm1.btnsortClick(Sender: TObject);
var b, h : integer ;
begin
   For min:= 0 to max-1 Do
       Begin
            For b:= min+1 To max Do
                If (sort[b] < sort[min]) Then
                   begin
                        h :=sort[b] ;
                        sort[b] :=sort[min];
                        sort[min]:=h ;
                   end;
       end;
   For min := 0 To max do
     begin
       lblsort.caption := lblsort.caption + IntToStr(sort[min]) + '; ';

     end;

end;
end.
Wie die Kenner unter euch wohl feststellen können, erscheint durch die letzte Zeile auch am Ende der Sortierten Variablen ein --> ; _ Wie kann man dieses nun weglassen?

Und noch eine Frage zum Array:

Kann man es nicht definieren, mit einer Variablen --> sort : array[0..n] of integer.?
Dann könnte man die Variable im Program eingeben lassen. Dadurch wäre es ein wenig flexibler.

Die letzten Antworten habe ich erst eben gelesen, deswegen hat das nichts mehr damit zu tun...
  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
 
#6

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 17:40
Entweder du nimmst ein statisches Array oder ein dynamisches. Ein paar Beiträge zurück findest du die Dejlarationen.
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
 
#7

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 17:48
Und das Problem mit der letzten 'Zeile':

Delphi-Quellcode:
For min := 0 To max do
      begin
        lblsort.caption := lblsort.caption + IntToStr(sort[min]) + '; ';

      end;
kannste z.B. so lösen:

Delphi-Quellcode:
For min := 0 To max do
      begin
        IF Min < max then
          lblsort.caption := lblsort.caption + IntToStr(sort[min]) + '; ';
        else
          lblsort.caption := lblsort.caption + IntToStr(sort[min]);

      end;
Könnte man aber auch eleganter lösen... wenn's gewollt 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
Antwort Antwort


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 14:43 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