![]() |
Wörter zufällig wiederzusammensetzen
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:
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.
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; 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 |
AW: Wörter zufällig wiederzusammensetzen
|
AW: Wörter zufällig wiederzusammensetzen
Danke für die Verlinkung...aber geht das nicht so wie ichs gemacht habe...weil ich glaub nicht, dass ich meinem Professor so etwas kKompliziertes wie Fisher-Yates präsentieren kann.
|
AW: Wörter zufällig wiederzusammensetzen
Zitat:
Delphi-Quellcode:
Weiters, zum eigentlichen Problem:
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}
Delphi-Quellcode:
Mein Ansatz (hab deinen in geistiger Abwesendheit überflogen):
Zufall := trunc(random(length(Eingabe)))+1; // WAS WENN Array[ZUFALL] WIEDER = ''?
AusgabeDurcheinanderBuchstabe := AusgabeDurcheinanderArray[Zufall]; - 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 |
AW: Wörter zufällig wiederzusammensetzen
Ich bin noch nicht so lange am Programmieren, was ist ein Resultstring, Indexvariable...irgenwie bin ich gerade ausgestiegen...
|
AW: Wörter zufällig wiederzusammensetzen
Das sind Wörter, mit denen ich diese Variablen beschrieben habe!
Ein Result ist der Rückgabewert bei einer Funktion! Ein Index gibt eine Stelle an! |
AW: Wörter zufällig wiederzusammensetzen
Zitat:
Ein Algorithmus mit einer Handvoll Zeilen ist zu kompliziert? Wobei effektiv nur Random benutzt wird? Ich brech zusammen ... Bevor noch einer denkt ich Spinne rum, das ist dieser hochkomplizierte Fisher-Yates, den der Prof. angeblich nicht verstehen soll
Delphi-Quellcode:
procedure FisherYatesShuffle(x:TStrings);
var i : Integer; begin for i := x.Count-1 downto 1 do x.Exchange(i, random(i+1)); end; |
AW: Wörter zufällig wiederzusammensetzen
Es klingt komplizierst, ist es aber tatsächlich nicht.
Jenes gilt für alles! Dh. es ist relativ zu sehen. Was für dich einfach ist, kann für einen anderen schwer sein und vice versa! @ThreadStarter Fisher-Yates's Verfahren ist am angebrachtesten aber wenn du es selbst machen willst und noch nicht so bewandert bist, dann gehe so vor, wie ich es beschrieben habe! Besser wärs natürlich wenn du dich mit den Funktionen (random, exchange) in dem oben genannten Verfahren auseinandersetzt und es so verstehst! |
AW: Wörter zufällig wiederzusammensetzen
Sache hat sich so eben erledigt...habs geschafft...danke für eure Ratschläge...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 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-2025 by Thomas Breitkreuz