Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Wörter zufällig wiederzusammensetzen

  Alt 31. Jan 2011, 18:56
Hallo Leute!

Ich habe ein Programm, in dem man in ein Editfeld ein Wort eingeben kann. Es soll zufällig wiederzusammengesetzt werden. Ich hab das ganze so gemacht:

Delphi-Quellcode:
   for I := 1 to length(Eingabe) do begin
       AusgabeDurcheinanderArray[I] := copy(Eingabe,I,I);
   end;

   for I := 1 to length(Eingabe) do begin
       Zufall := trunc(random(length(Eingabe)))+1;
       if AusgabeDurcheinanderArray[Zufall] = 'then begin
          Zufall := trunc(random(length(Eingabe)))+1;
          AusgabeDurcheinanderBuchstabe := AusgabeDurcheinanderArray[Zufall];
          AusgabeDurcheinanderFertig := AusgabeDurcheinanderFertig+AusgabeDurcheinanderBuchstabe;
          AusgabeDurcheinanderArray[Zufall] := '';
       end else begin
          AusgabeDurcheinanderBuchstabe := AusgabeDurcheinanderArray[Zufall];
          AusgabeDurcheinanderFertig := AusgabeDurcheinanderFertig+AusgabeDurcheinanderBuchstabe;
          AusgabeDurcheinanderArray[Zufall] := '';
       end;
   end;
Zuerst lege ich jeden Buchstaben in ein Array. Dann bilde ich eine Zufallszahl, schau ob das Array leer ist (das Array des Buchstaben, denn ich bereits entnommen habe wird geleert) wenn es leer ist soll eine neue Zufallszahl gebildet werden und sonst soll einfach der Buchstabe des Arrays zu den anderen die bereits entnommen worden sind hinzufügen.

Mein Problem: es werden manche buchstaben doppelt und manche gar nicht herausgenommen, dann wird aus einem wort wie hallo gleich mal llloh

Was mach ich falsch?

Mit freundlichen Grüßen

ProgrammiererMike
Erstens einmal, ist diese Zeile hier unfug:
Delphi-Quellcode:
  for I := 1 to length(Eingabe) do
  begin
    AusgabeDurcheinanderArray[I] := copy(Eingabe,I,I);
  end;

// Besser
  Move( Eingabe[1], AusgabeDurcheinanderArray[1], Length( Eingabe ) ); {ich nehme an, Ausgabe...Arr = [1..<x>] of Char}
Weiters, zum eigentlichen Problem:
Delphi-Quellcode:
          Zufall := trunc(random(length(Eingabe)))+1; // WAS WENN Array[ZUFALL] WIEDER = ''?
          AusgabeDurcheinanderBuchstabe := AusgabeDurcheinanderArray[Zufall];
Mein Ansatz (hab deinen in geistiger Abwesendheit überflogen):
- erstelle ein Resultstring mit gleicher Länge (wie Eingabe)
- erstelle ein Array[0..Länge-1] mit den Werten {1,2,...,Länge) // zufArr
- initialisiere eine Index Variable mit 0 (zb. i)
- solange das Array Elemente besitzt, mache folgendes...
-- inkrementiere die Index Variable
-- wähle eine Zufallszahl im Bereich von 0..High(Array) und speichere in Variable (x) // Random(Length(zufArr))
-- weise dem Resultstring an der Stelle i den Wert Eingabe[zufArr[x]] zu
-- lösche den Wert aus dem Array
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (31. Jan 2011 um 19:03 Uhr)
  Mit Zitat antworten Zitat