Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zeichenkette per zufall ändern (https://www.delphipraxis.net/22594-zeichenkette-per-zufall-aendern.html)

horst 19. Mai 2004 18:28


Zeichenkette per zufall ändern
 
hallo...
ich will von einer zeichenfolge die nur aus einsen und zweien besteht z.b. '111,111,111,111,111,111' (beispiel 6 dreier gruppen können ach 4 0der 9 dreiergruppen sein) irgend eine zweite stelle einer dreiergruppe von einer 1 in eine 2 wandeln oder umgekehrt wenn schon eine 2 drin steht, das ganze natürlich nach zufallsprinzip. wie mache ich das am dümmsten.
zeichenkette könnte auch so aussehen '121,211,111,112,211,121'
es sind immer zwischen 4 und 9 dreiergruppen pro zeichenkette
weis jemand rat? bin für jede hilfe dankbar

das habe ich bisher:

Delphi-Quellcode:
     while zeile = nfolge[jetztzeil] do
      begin
       randomize;
       tonfehler := Random((anzton*3)+(anzton-1))+1;
       if copy(zeile,tonfehler,1) = '1' then
        begin
         zeile := copy(zeile,1,tonfehler-1)+'2'+copy(Zeile,tonfehler+1,length(zeile));
         ok := True;
        end
       else
        if copy(zeile,tonfehler,1) = '2' then
         begin
          zeile := copy(zeile,1,tonfehler-1)+'1'+copy(Zeile,tonfehler+1,length(zeile));
          ok := True;
         end;
      end;
diese routine eine erste oder eine zweite oder eine dritte stelle ich brauche aber nur eine zweite stelle
es darf aber nur die 2te oder 6te oder 10te oder 14te oder 18te oder 22te stelle verändert werden bei eine zeichenkette mit 6 dreierblöcken

Tryer 19. Mai 2004 18:44

Re: Zeichenkette per zufall ändern
 
Meinst Du sowas ?
Delphi-Quellcode:
var
  s: string = '111,111,111,111,111,111,111';
  AnzDreierGruppen: Integer = 7;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Index: Integer;
begin
    Index := Random(AnzDreierGruppen) * 4 + 2;
    if S[Index] = '1' then
      s[Index] := '2'
    else
      s[Index] := '1';
   Caption := s;
end;
MfG,
Tryer

horst 19. Mai 2004 18:58

Re: Zeichenkette per zufall ändern
 
die routine ist super, damit kann ich je nach angabe in der zeile
Index := Random(AnzDreierGruppen) * 4 + 2;
die erste oder die zweite oder die dritte stelle einer dreiergruppe ändern das erschlägt die hälfte mienes problems. super.
das zweite problem.
jetzt muss ich noch die erste oder die zweite stelle einer dreiergruppe ändern, oder die erste oder die dritte stelle einer dreiergruppe;
kann du hier auch noch weiterhelfen?

Tryer 19. Mai 2004 19:05

Re: Zeichenkette per zufall ändern
 
Delphi-Quellcode:
Random(AnzDreierGruppen) * 4
gibt Dir eine beliebige (zufällige) Dreiergruppe

Delphi-Quellcode:
+ 2
gibt Dir das 2. Element der gewählten Gruppe

Mir ist nicht ganz klar was Du jetzt noch suchst.

MfG,
Tryer

horst 19. Mai 2004 19:10

Re: Zeichenkette per zufall ändern
 
ich habe es gerade ausprobiert funzt mit der zweiten stelle super,
Index := Random(AnzDreierGruppen) * 4 + 2
ist auch für die erste
Index := Random(AnzDreierGruppen) * 4 + 1
oder dritte stelle
Index := Random(AnzDreierGruppen) * 4 + 3
anwendbar.
super jetzt nur noch die kombi erste oder zweite stelle einer dreiergruppe der zeichenkette
z.b. zeichenkette '111,111,111,111,111`kann geändert werden z.b in
1. 111,211,111,111,111'
oder
2. 111,121,111,111,111'
oder
3. 111,111,111,211,111'
oder
4. 111,111,111,111,121'
usw.

Tryer 19. Mai 2004 19:17

Re: Zeichenkette per zufall ändern
 
Du must doch nur die Stelle auch noch per Zufall bestimmen:
Delphi-Quellcode:
Index := Random(AnzDreierGruppen) * 4 + (Random(2){->0..1} + 1);
MfG,
Tryer

horst 19. Mai 2004 23:01

Re: Zeichenkette per zufall ändern
 
DANKE.... :hi:


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