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
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.111 Beiträge
 
Delphi XE2 Professional
 
#1

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 16:58
Delphi-Quellcode:
var
  myArray : Array of Integer;

begin
  myList := TList<integer>.Create;
  setLength(myArray,0);

// Anfügen eines Wertes
// 2. An ein Array
  SetLength(myArray, Length(myArray) + 1);
  myArray [Length(myArray)] := Value;
@Dejan Vu:
Besser so, sonst schepperts.
Delphi-Quellcode:
SetLength(myArray, Length(myArray) + 1);
myArray [High(myArray)] := Value;
@rebellxsky:
Ein kleines Beispiel Projekt:
Ins Edit gibst du eine Zahl ein, mit Return wird die Zahl in die Liste übernommen.
Mit Escape wird die Liste gelöscht (Das Edit muß hierbei den Fokus haben).
Die Eingabe und Ausgabe wird im ebNumberKeyPress gesteuert.
Ich vermute, mit "Sortieren mit direktem Auswahlort" ist ein sog. SelectionSort gemeint.
Eine Übersicht mit diversen Sortierverfahren findest du hier http://www.delphipraxis.net/72182-sortieren.html



Delphi-Quellcode:
unit AS_Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls;

type
  TNumbers=Array of Integer;

  TMain = class(TForm)
    ebNumber: TEdit;
    lbUnsorted: TListBox;
    lbSorted: TListBox;
    lblUnsorted: TLabel;
    lblSorted: TLabel;
    procedure ebNumberKeyPress(Sender: TObject; var Key: Char);
  private
     fInput:TNumbers;
     fOutput:TNumbers;
     PROCEDURE Sort(List:TNumbers);
     PROCEDURE TransferToListBox(LB:TListBox; List:TNumbers);
  public
    { Public-Deklarationen }
  end;

var
  Main: TMain;

implementation

{$R *.dfm}

procedure TMain.ebNumberKeyPress(Sender: TObject; var Key: Char);
begin
   case Ord(Key) of
      VK_Escape:
         begin
            fInput:=Nil;
            fOutput:=Nil;
            lbUnsorted.Clear;
            lbSorted.Clear;
            ebNumber.Text:='';
         end;
      VK_Return:
         if ebNumber.Text<>'then begin
            SetLength(fInput,Length(fInput)+1);
            fInput[High(fInput)]:=StrToInt(ebNumber.Text);
            fOutput:=Copy(fInput);
            Sort(fOutput);
            TransferToListBox(lbUnsorted,fInput);
            TransferToListBox(lbSorted,fOutput);
            ebNumber.Text:='';
         end;
      VK_Back,Ord('0')..Ord('9'):
         Exit;
      else
         Key:=#0;
   end;
end;

PROCEDURE TMain.Sort(List:TNumbers);
var I,J,K,H:Integer;
begin
   for I:=0 to High(List)-1 do begin
      K:=I;
      for J:=I+1 to High(List) do
         if List[J]<List[K] then K:=J;
      H:=List[I];
      List[I]:=List[K];
      List[K]:=H;
   end;
end;

PROCEDURE TMain.TransferToListBox(LB:TListBox; List:TNumbers);
var I:Integer;
begin
   LB.Clear;
   LB.Items.BeginUpdate;
   for I:=0 to High(List) do
      LB.Items.Add(IntToStr(List[I]));
   LB.Items.EndUpdate;
end;

end.
Angehängte Dateien
Dateityp: zip Auswahlsort.zip (81,0 KB, 0x aufgerufen)
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von humbuck
humbuck

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

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 17:30
Na hoffentlich versteht er das alles...

Er war gerade auf dem richtigen Weg...

Zitat:
Wenn man anstatt integer --> real nimmt ginge es ja auch mit dezimalzahlen?
Ja...

Dein Button zum hinzufügen eines Wertes sollte ungefähr so ausehen:
Delphi-Quellcode:
procedure Form1.Button....;
begin
  CASE Zaehler < 10 OF
    true : begin
             DEIN_ARRAY[Zaehler] := StrToInt(Edit1.Text); //Die Variable ZAEHLER global deklarieren
             INC(Zaehler); //Funktion zählt Integerwert um 1 auf
           end;
    false: begin
             Showmessage('Array voll.');
           end;
  end;
end;
Ein Reset-Button (übrigens gute Idee):
Delphi-Quellcode:
procedure Form1.ResetButton...;
Var I : Integer;
begin
  Zaehler := 0;
  For I := 0 to Length(DEIN_ARRAY)-1 do
    begin
      DEIN_ARRAY[I] := 0;
    end;
  Edit1.Text := '';
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 17:33 Uhr)
  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 21:19 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