Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Buchstaben sortieren mit Bubble-Sort (https://www.delphipraxis.net/40362-buchstaben-sortieren-mit-bubble-sort.html)

whiteshark 14. Feb 2005 19:47


Buchstaben sortieren mit Bubble-Sort
 
Moin Leute,

ich stehe mal wieder vor einem Problem und ich komme nicht weiter! :wall:

Delphi-Quellcode:
function vertausche(a,b:integer):integer;
var hilf:integer;
begin
hilf:=a;
a:=b;
b:=hilf;
end;

procedure TForm1.Button1Click(Sender: TObject);
var word1, word2 : string;
var buchstabe:array [1..100] of integer;
var anzahl,i,j,k,w:integer;
begin
word1:=edit1.text;
word2:=edit1.text;
anzahl:=length(word1);

 for i:=1 to anzahl do
        begin
        buchstabe[i]:=ord(word1[i]);
        end; // end of for-schleife

 for j:=anzahl downto 1 do
        begin
        for k:=1 to j do
                begin
                if (buchstabe[k-1]>buchstabe[k]) then vertausche(k-1, k);
                end; // end of for(k)-schleife
        end; // end of for(j)-schleife

for w:=1 to anzahl do
      begin
      word2[w]:=chr(buchstabe[w]);
      end;

edit2.text:=word2;


end;
Das sit der Quelltext. Unsere Aufgabe war es, Buchstaben alphabetisch zu sortieren. Nun eine kleine Erklärung zum Quelltext. Ich lese aus dem Edit1-Feld ein string ein. jeden einzelnen Buchstaben wandle ich in den Ascii-Code um, um ihn dann später mit Bubble-Sort zu sortieren. und aus dem Ascii-Code mache ich in der dritten Schleife wieder ein Wort! Aber wo ist bei mir der Fehler? Er macht alles ohne Probleme, bloß das sich Edit2 aus Edit1 am Ende ergibt:

Binärbaum 14. Feb 2005 20:02

Re: Buchstaben sortieren mit Bubble-Sort
 
Das liegt wohl an der Funktion vertauschen.
So sollte es gehen:
Delphi-Quellcode:
procedure vertauschen(var a, b: Integer);//a,b müssen var-Parameter sein
var h: Integer;
begin
 h:= a;
 a:= b;
 b:= h;
end;
Solange a und b keine Referenzparameter sind, sondern nur Wertparameter, nutzen sie dir gar nichts, da nach dem Ende der Prozedur a und b aus dem Speicher entfernt werden. Mit Referenzparameter kann man aber Werte an Variablen übergeben.

[Edit]
Die Zeile
Delphi-Quellcode:
if (buchstabe[k-1]>buchstabe[k]) then vertausche(k-1, k);
müsste doch
Delphi-Quellcode:
if (buchstabe[k-1]>buchstabe[k]) then vertausche(buchstabe[k-1], buchstabe[k]);
heißen, oder nicht?
[/Edit]


MfG
Binärbaum

whiteshark 14. Feb 2005 20:08

Re: Buchstaben sortieren mit Bubble-Sort
 
Danke, die Fehler sind mir jetzt erst bewusst geworden! :thumb:

Binärbaum 14. Feb 2005 22:17

Re: Buchstaben sortieren mit Bubble-Sort
 
Noch ein Tip: man könnte statt die Buchstaben in Integer-Werte umzuwandeln doch gleich die einzelnen Zeichen nehmen. Damit wird das Programm viel kürzer (und schneller):
Delphi-Quellcode:
procedure vertauschen(var a, b: Char);//a,b müssen var-Parameter sein
var h: Char;
begin
h:= a;
a:= b;
b:= h;
end;

procedure TForm1.Button1Click(Sender: TObject);
var word1, word2 : string;
    anzahl,j,k,w:integer;
begin
word1:=edit1.text;
word2:=edit1.text;
anzahl:=length(word1);

for j:=anzahl downto 1 do
        begin
        for k:=1 to j do
                begin
                if (word2[k-1]>word2[k]) then vertausche(word2[k-1], word2[k]);
                end; // end of for(k)-schleife
        end; // end of for(j)-schleife

edit2.text:=word2;
end;
(Ist wie immer ungetestet, aber sollte funktionieren.)

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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