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 2     12
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: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
Amateurprofi

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

AW: Sortieren mit direktem Auswahlort

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

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 18: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 18:33 Uhr)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 20:55
rebellxsky, lade Dir mein Sortierkino herunter (auch in diesem Forum zu finden), das enthält auch Select(ion)sort. Es funktioniert auch "in place / in situ", man benötigt demnach keine zusätzliche Datenstruktur, um die sortierte Menge zu erzeugen.
  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
 
#5

AW: Sortieren mit direktem Auswahlort

  Alt 7. Dez 2014, 21:17
@humbuck

Aus dem Grund habe ich den Quellcode auch hier veröffentlicht, weil man ihm das nicht glauben würde. Also habe ich auch nicht seine Hausaufgaben gemacht.

Aber an dem konkreten Beispiel kann man eben die oft abstrakt ans Herz gelegte Trennung zwischen Logik und Ansicht zeigen. Nur darum geht es mir dabei
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
Antwort Antwort
Seite 2 von 2     12

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 02:29 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 by Thomas Breitkreuz