Delphi-PRAXiS
Seite 3 von 8     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Sortieralgorithmen (https://www.delphipraxis.net/162274-sortieralgorithmen.html)

DeddyH 16. Aug 2011 16:38

AW: funktion erstellen... weiß nicht weiter
 
Wieso Bücher? Ich habe lediglich versucht, Hilfe zur Selbsthilfe zu geben, dabei lernt man nämlich noch mehr. Aber wenn der Compiler etwas moniert, ist es wenig hilfreich zu sagen "der meckert", ohne den Code dann zu zeigen.

biby90 16. Aug 2011 16:40

AW: funktion erstellen... weiß nicht weiter
 
naja ich brauche ja auch eigentlich keine Sort funktion... naja ich sollte die halt machen und jetzt eine, um das Memo1.lines > Memo1.lines blablabla zu ersetzen...
reiner lerneffekt.


nicht streiten.... :-(

DeddyH 16. Aug 2011 16:46

AW: funktion erstellen... weiß nicht weiter
 
Da nun bereits 2 mögliche Lösungen gepostet wurden, hier meine Umsetzung (die vielen Hilfsvariablen sollen dem Verständnis dienen):
Delphi-Quellcode:
function Min(Wert1, Wert2: integer): integer;
begin
  if Wert1 < Wert2 then
    Result := Wert1
  else
    Result := Wert2;
end;

function MyStrCompare(const Str1, Str2: string): integer;
var
  i, MaxLen, Laenge1, Laenge2, Wert1, Wert2: integer;
begin
  Result := 0;
  i := 1;
  Laenge1 := Length(Str1);
  Laenge2 := Length(Str2);
  MaxLen := Min(Laenge1, Laenge2);
  while (i <= MaxLen) and (Result = 0) do
    begin
      Wert1 := CharToInt(Str1[i]);
      Wert2 := CharToInt(Str2[i]);
      Result := Wert1 - Wert2;
      i := i + 1;
    end;
  if Result = 0 then
    Result := Laenge1 - Laenge2;
end;
Im ButtonClick dann
Delphi-Quellcode:
  for j:=0 to Memo1.Lines.count -2 do
  begin
    for i:=j +1 to Memo1.Lines.Count -1 do
    begin
      if MyStrCompare(Memo1.Lines[j], Memo1.Lines[i]) > 0 then
        //tauschen

biby90 16. Aug 2011 16:52

AW: funktion erstellen... weiß nicht weiter
 
na das sieht doch schon eher nach dem aus was ich brauche. danke ich versuchs mal

biby90 17. Aug 2011 11:13

AW: funktion erstellen... weiß nicht weiter
 
hier das endprodukt... danke nochmal ihr seid die besten :thumb:
Delphi-Quellcode:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    function Sort(ASrcA, ASrcD: String): Integer;
    function CharToInt(AValue: String): Integer;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  CharTable: array[0..51] of String =
    ('A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H',
      'h','I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'M', 'm', 'N', 'n', 'O', 'o',
      'P', 'p', 'Q', 'q', 'R', 'r', 'S', 's', 'T', 't', 'U', 'u', 'V', 'v',
      'W', 'w', 'X', 'x', 'Y', 'y', 'Z', 'z');



implementation


{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
var
  i, j : Integer; //Position
  Buffer: String;
begin
  for j:=0 to Memo1.Lines.count -2 do
  begin
    for i:=j +1 to Memo1.Lines.Count -1 do
    begin
      if Sort(Memo1.Lines[j], Memo1.Lines[i]) > 0 then
      begin
        Buffer:= Memo1.Lines[j];
        Memo1.Lines[j]:= Memo1.Lines[i];
        Memo1.Lines[i]:= Buffer;
      end;
    end;
  end;
end;

function TForm1.CharToInt(AValue: String): Integer;
var
  i: Integer;
begin
  Result := -1;

  for i := 1 to Length(CharTable) do
  begin
    if AValue = Chartable[i] then
    begin
      Result := i;
      Break;
    end;
  end;
end;

function TForm1.Sort(ASrcA, ASrcD: String): Integer;
var
  i, j: Integer;
  lResult: Integer;
begin
  Result := 0;

  for i:=1 to Length(ASrcD) do
  begin
    if CharToInt(ASrcA[i]) = CharToInt(ASrcD[i]) then
    begin
      Result := 0;
    end else
    begin
      if CharToInt(ASrcA[i]) < CharToInt(ASrcD[i]) then
      begin
        Result:= -1;
        Break;
      end else
      begin
        Result := +1;
        Break;
      end;
    end;
  end;
end;

end.

DeddyH 17. Aug 2011 12:13

AW: funktion erstellen... weiß nicht weiter
 
Und wenn ASrcA kürzer als ASrcD ist, kracht es u.U. in Deiner Sort-Methode, da Du aus dem Nirvana liest.

biby90 17. Aug 2011 12:23

AW: funktion erstellen... weiß nicht weiter
 
hö? verstehe gerade nur bahnhof.... es funktioniert auf jeden fall und das ist die hauptsache.
mein ausbilder findet es auch in ordnung

DeddyH 17. Aug 2011 12:36

AW: funktion erstellen... weiß nicht weiter
 
Dann ruf doch einmal
Delphi-Quellcode:
Sort('123', '12345')
auf.

biby90 17. Aug 2011 13:20

AW: funktion erstellen... weiß nicht weiter
 
hmm.... vorhin hatte es geklappt dass Baumhaus unter Baum stand und beim sortieren es eben getauscht hat

er machts immer noch genau so... nur nicht zahlen

DeddyH 17. Aug 2011 13:22

AW: funktion erstellen... weiß nicht weiter
 
Dann sortier nochmal oder ruf wie gezeigt die Funktion direkt auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr.
Seite 3 von 8     123 45     Letzte »    

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