AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Wörter zufällig wiederzusammensetzen
Thema durchsuchen
Ansicht
Themen-Optionen

Wörter zufällig wiederzusammensetzen

Ein Thema von ProgrammiererMike · begonnen am 31. Jan 2011 · letzter Beitrag vom 1. Feb 2011
Antwort Antwort
ProgrammiererMike
(Gast)

n/a Beiträge
 
#1

Wörter zufällig wiederzusammensetzen

  Alt 31. Jan 2011, 18:14
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

Geändert von ProgrammiererMike ( 1. Feb 2011 um 15:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Wörter zufällig wiederzusammensetzen

  Alt 31. Jan 2011, 18:22
http://www.delphipraxis.net/157708-t...her-yates.html
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
ProgrammiererMike
(Gast)

n/a Beiträge
 
#3

AW: Wörter zufällig wiederzusammensetzen

  Alt 31. Jan 2011, 18:44
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.
  Mit Zitat antworten Zitat
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
ProgrammiererMike
(Gast)

n/a Beiträge
 
#5

AW: Wörter zufällig wiederzusammensetzen

  Alt 31. Jan 2011, 19:06
Ich bin noch nicht so lange am Programmieren, was ist ein Resultstring, Indexvariable...irgenwie bin ich gerade ausgestiegen...

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

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

AW: Wörter zufällig wiederzusammensetzen

  Alt 31. Jan 2011, 19:27
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!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Wörter zufällig wiederzusammensetzen

  Alt 31. Jan 2011, 20:01
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.
für was ist der Prof.? Baumschule?
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (31. Jan 2011 um 20:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

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

AW: Wörter zufällig wiederzusammensetzen

  Alt 31. Jan 2011, 21:32
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!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
ProgrammiererMike
(Gast)

n/a Beiträge
 
#9

AW: Wörter zufällig wiederzusammensetzen

  Alt 1. Feb 2011, 14:17
Sache hat sich so eben erledigt...habs geschafft...danke für eure Ratschläge...

Geändert von ProgrammiererMike ( 1. Feb 2011 um 14:22 Uhr)
  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 07:31 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