AGB  ·  Datenschutz  ·  Impressum  







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

Buchstaben sortieren mit Bubble-Sort

Ein Thema von whiteshark · begonnen am 14. Feb 2005 · letzter Beitrag vom 14. Feb 2005
Antwort Antwort
Benutzerbild von whiteshark
whiteshark

Registriert seit: 4. Dez 2003
Ort: Cottbus
222 Beiträge
 
Delphi 2005 Personal
 
#1

Buchstaben sortieren mit Bubble-Sort

  Alt 14. Feb 2005, 19:47
Moin Leute,

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

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:
Men are born ignorant, not stupid; they are made stupid by education. - Bertrand Russell

I cannot teach anybody anything, i can only make them think. - Socrates
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Buchstaben sortieren mit Bubble-Sort

  Alt 14. Feb 2005, 20:02
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
if (buchstabe[k-1]>buchstabe[k]) then vertausche(k-1, k); müsste doch if (buchstabe[k-1]>buchstabe[k]) then vertausche(buchstabe[k-1], buchstabe[k]); heißen, oder nicht?
[/Edit]


MfG
Binärbaum
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Benutzerbild von whiteshark
whiteshark

Registriert seit: 4. Dez 2003
Ort: Cottbus
222 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Buchstaben sortieren mit Bubble-Sort

  Alt 14. Feb 2005, 20:08
Danke, die Fehler sind mir jetzt erst bewusst geworden!
Men are born ignorant, not stupid; they are made stupid by education. - Bertrand Russell

I cannot teach anybody anything, i can only make them think. - Socrates
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Buchstaben sortieren mit Bubble-Sort

  Alt 14. Feb 2005, 22:17
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
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  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 12:12 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