Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Eingabe mischen (https://www.delphipraxis.net/122439-eingabe-mischen.html)

STS301 16. Okt 2008 07:19


Eingabe mischen
 
hi

ich will in einem Editfeld zb: 'ABCDE' eingeben und dass zufällig zb. zu 'DBACE' machen.

Wie soll ich da am besten anfangen?

Mit zb.
Delphi-Quellcode:
var
//hier einen Char Array erstellen
begin
Char.max:= edit1.length;
...??

gsh 16. Okt 2008 07:26

Re: Eingabe verdrehen
 
hmm du könntest mit random() einen zufälligen buchstaben auswählen. Ungefähr so:
Delphi-Quellcode:
augabe := ausgabe+string[random(Length(string))+1];
dann musst du nur noch diesen buchstaben löschen (damit er nicht nochmal vorkommt)
//edit: das ganze muss natürlich noch in eine schleife while Length(ausgabe) < Length(eingabe) do

Viel Glück ;)

DeddyH 16. Okt 2008 07:28

Re: Eingabe verdrehen
 
AFAIK gibt es in StrUtils die Funktion ReverseString.

gsh 16. Okt 2008 07:28

Re: Eingabe verdrehen
 
Zitat:

Zitat von DeddyH
AFAIK gibt es in StrUtils die Funktion ReverseString.

also wenn ich ihn richtig verstanden habe dann will er den string nicht umdrehen sondern zufällig zusammen mischen

STS301 16. Okt 2008 07:29

Re: Eingabe verdrehen
 
@gsh: genau, sry wenn ich mich nicht klar ausgedrückt habe

DeddyH 16. Okt 2008 07:30

Re: Eingabe verdrehen
 
So früh am Morgen kann ich noch nicht richtig lesen :mrgreen:

DeddyH 16. Okt 2008 07:35

Re: Eingabe verdrehen
 
Willst Du denn nun "mischen" oder "umdrehen"?

STS301 16. Okt 2008 07:39

Re: Eingabe verdrehen
 
mischen, ich ändere den Titel gleich

Klaus01 16. Okt 2008 08:04

Re: Eingabe mischen
 
Guten Morgen,

schau Dir doch mal die Routine am Ende dieses Beitrags an.

.. und wenn Du magst, lese auch den ganzen Thread, liest sich sehr interessant.

Grüße
Klaus

STS301 16. Okt 2008 08:30

Re: Eingabe mischen
 
etwas verwirrend, nur wie mache ich das mit Buchstaben, ich würde mir einmal die Länge des Textes auslesen, und dann (irgendwie durchmischen) hänge ich..

Klaus01 16. Okt 2008 08:34

Re: Eingabe mischen
 
Sollte in etwas so gehen:

Delphi-Quellcode:
procedure Shuffle(var s: String);
var
  i, j: integer;
  temp : Char;
begin
  for i := length(s)-1 downto 1 do
  begin
    j := Random(i);
    temp := s[i];
    s[i] := s[j];
    s[j] := temp;
  end;
end;
Grüße
Klaus

DeddyH 16. Okt 2008 08:35

Re: Eingabe mischen
 
Nicht die eleganteste Methode, aber versuch es mal so:
Delphi-Quellcode:
function StrMerge(src: string): string;
var i,j: integer;
begin
  SetLength(Result,Length(src));
  j := 1;
  while Length(src) > 0 do
    begin
      i := Random(Length(src)) + 1;
      Result[j] := src[i];
      Delete(src,i,1);
      inc(j);
    end;
end;

STS301 16. Okt 2008 08:56

Re: Eingabe mischen
 
es funktioniert beides unter Lazarus nicht

Klaus01 16. Okt 2008 08:58

Re: Eingabe mischen
 
Zitat:

Zitat von STS301
es funktioniert beides unter Lazarus nicht

Wo mosert denn der Lazarus?

Grüße
Klaus

STS301 16. Okt 2008 09:00

Re: Eingabe mischen
 
gar nichts es macht einfach nichts
hier der Code
Delphi-Quellcode:
unit tausch;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    function StrMerge(src: string):String;
    procedure Shuffle ( s:String);
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
begin
  Shuffle(Edit1.Text); //bei StrMerge(Edit1.text) funtkioniert es auch nicht
end;

function TForm1.StrMerge(src: string): string;
var i,j: integer;
begin
  SetLength(Result,Length(src));
  j := 1;
  while Length(src) > 0 do
    begin
      i := Random(Length(src)) + 1;
      Result[j] := src[i];
      Delete(src,i,1);
      inc(j);
    end;
end;

procedure TForm1.Shuffle( s:String);
var
  i, j: integer;
  temp : Char;
begin
  for i := length(s)-1 downto 1 do
  begin
    j := Random(i);
    temp := s[i];
    s[i] := s[j];
    s[j] := temp;
  end;

 end;
initialization
  {$I tausch.lrs}

end.

DeddyH 16. Okt 2008 09:01

Re: Eingabe mischen
 
Bei Klaus' Code muss das ein Var-Parameter sein und meins ist eine Funktion.

STS301 16. Okt 2008 09:37

Re: Eingabe mischen
 
dann steicht er mir Shuffle(edit1.text) an und sagt
Error: Argument can't be assigned to

wenn ich
Delphi-Quellcode:
var
f: String;
begin
edit1.text:= f;
Shuffle(f);
end;
schreibe, dann löscht er den den Eintrag und macht nichts

DeddyH 16. Okt 2008 09:52

Re: Eingabe mischen
 
Vielleicht solltest Du mal ein Grundlagentutorial lesen.
Delphi-Quellcode:
var
f: String;
begin
  f := edit1.text;
  Shuffle(f);
  edit1.text:= f;
end;

STS301 16. Okt 2008 09:57

Re: Eingabe mischen
 
wird nur gelsöscht, aber nicht ausgegeben

Klaus01 16. Okt 2008 09:57

Re: Eingabe mischen
 
Hallo,

ich musste die shuffle Routine noch etwas anpassen:


Delphi-Quellcode:
procedure Shuffle(var s: String);
var
  i, j: integer;
  temp : Char;
begin
  for i := length(s) downto 1 do
  begin
    j := Random(i)+1;
    temp := s[i];
    s[i] := s[j];
    s[j] := temp;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s:= Edit1.Text;
  shuffle(s);
  Edit1.Text:=s;
end;
Grüße
Klaus

STS301 16. Okt 2008 10:00

Re: Eingabe mischen
 
Danke! es funktioniert!!!!

STS301 16. Okt 2008 12:03

Re: Eingabe mischen
 
hi nochmal, wenn die Eingabe leer ist, soll irgendein Text(Buchstaben(groß und klein), Zahlen, Sonderzeichen) erstellt werden. Wie mache ich das?

Medium 16. Okt 2008 13:35

Re: Eingabe mischen
 
Delphi-Referenz durchsuchenRandom() + Delphi-Referenz durchsuchenChr() + Bei Google suchenASCII Tabelle

STS301 16. Okt 2008 19:13

Re: Eingabe mischen
 
danke, werde ich mir morgen ansehen, ich habe ein Problem, wenn ich in das Eingabefeld ein Sonderzeichen (zb. $) eingebe, dann löscht er den eintrag und macht nichts.

AlexII 17. Feb 2014 11:29

AW: Re: Eingabe mischen
 
Zitat:

Zitat von Klaus01 (Beitrag 836437)
Hallo,

ich musste die shuffle Routine noch etwas anpassen:


Delphi-Quellcode:
procedure Shuffle(var s: String);
var
  i, j: integer;
  temp : Char;
begin
  for i := length(s) downto 1 do
  begin
    j := Random(i)+1;
    temp := s[i];
    s[i] := s[j];
    s[j] := temp;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s:= Edit1.Text;
  shuffle(s);
  Edit1.Text:=s;
end;
Grüße
Klaus

Ich verstehe nicht, wieso das funktioniert wenn die Shuffle-Procedure kein Rückgabewert hat?

Sir Rufo 17. Feb 2014 11:33

AW: Eingabe mischen
 
Wegen dem
Delphi-Quellcode:
var
Delphi-Quellcode:
procedure Shuffle(var s: String);
begin
  ...
end;

AlexII 17. Feb 2014 11:36

AW: Eingabe mischen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1248181)
Wegen dem
Delphi-Quellcode:
var
Delphi-Quellcode:
procedure Shuffle(var s: String);
begin
  ...
end;

Ok, und sonst könnte es auch so gehen, oder?

Delphi-Quellcode:
function Shuffle(s: String): String;
var
  i, j: integer;
  temp : Char;
begin
  for i := length(s) downto 1 do
  begin
    j := Random(i)+1;
    temp := s[i];
    s[i] := s[j];
    s[j] := temp;
  end;

  Result := s;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s:= Edit1.Text;
  shuffle(s);
  Edit1.Text:=s;
end;

Headbucket 17. Feb 2014 12:00

AW: Eingabe mischen
 
Zitat:

Zitat von AlexII (Beitrag 1248182)
Ok, und sonst könnte es auch so gehen, oder?

Nicht ganz.
Delphi-Quellcode:
//Falsch:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s:= Edit1.Text;
  shuffle(s); // der Rückgabewert wird hier nirgends übergeben
  Edit1.Text:=s;
end;

//Richtig:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s:= Edit1.Text;
  s:= shuffle(s);
  Edit1.Text:= s;
end;

//Optimiert:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:= shuffle(Edit1.Text);
end;
Grüße

AlexII 17. Feb 2014 12:08

AW: Eingabe mischen
 
Thx :thumb:

Sir Rufo 17. Feb 2014 15:32

AW: Eingabe mischen
 
Wenn kein
Delphi-Quellcode:
var
dann sollten die Parameter nicht beschrieben werden. Und bei einem
Delphi-Quellcode:
string
-Parameter dann ein
Delphi-Quellcode:
const
verwenden (Performance).
Delphi-Quellcode:
function Shuffle(const AStr : String ): String;
var
  i, j: integer;
  temp : Char;
begin
  Result := AStr;
  for i := length(Result) downto 1 do
  begin
    j := Random(i)+1;
    temp := Result[i];
    Result[i] := Result[j];
    Result[j] := temp;
  end;
end;

AlexII 17. Feb 2014 15:42

AW: Eingabe mischen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1248221)
Wenn kein
Delphi-Quellcode:
var
dann sollten die Parameter nicht beschrieben werden. Und bei einem
Delphi-Quellcode:
string
-Parameter dann ein
Delphi-Quellcode:
const
verwenden (Performance).
Delphi-Quellcode:
function Shuffle(const AStr : String ): String;
var
  i, j: integer;
  temp : Char;
begin
  Result := AStr;
  for i := length(Result) downto 1 do
  begin
    j := Random(i)+1;
    temp := Result[i];
    Result[i] := Result[j];
    Result[j] := temp;
  end;
end;

Wieso darf man sie nicht beschreiben? :gruebel:

Sir Rufo 17. Feb 2014 15:52

AW: Eingabe mischen
 
Zitat:

Zitat von AlexII (Beitrag 1248222)
Wieso darf man sie nicht beschreiben? :gruebel:

Ich sagte sollten nicht.

Das hat etwas damit zu tun, ob du es erwarten würdest, wenn hier
Delphi-Quellcode:
function MyIntToStr( Value : Integer ) : string;
begin
  Result := IntToStr( Value );
  Value := 0;
end;

var
  i : integer;
  s : string;
begin
  i := 10;
  s := MyIntToStr( i );
end;
der Wert von
Delphi-Quellcode:
i
durch den Aufruf der Funktion verändert wird?


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