Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufälligen Buchstaben anzeigen (https://www.delphipraxis.net/40887-zufaelligen-buchstaben-anzeigen.html)

Äfan 22. Feb 2005 18:51


Zufälligen Buchstaben anzeigen
 
Hi,

Wie kann ich es machen, dass wenn ich auf den Button klicke, in Edit ein zufälliger buchstabe eigefügt wird ?

MFG :-D

Sharky 22. Feb 2005 18:55

Re: Zufälligen Buchstaben anzeigen
 
Hai Äfan,

mit Delphi-Referenz durchsuchenRandom einen passende Zahl (ASCII-Code) erzeugen und mit Delphi-Referenz durchsuchenChr in einen Buchstaben umwandeln.

Khabarakh 22. Feb 2005 18:57

Re: Zufälligen Buchstaben anzeigen
 
Delphi-Quellcode:
procedure Button1Click(Sender: TObject);
begin
  Edit1.Text:=Chr(Random(Ord('Z')-Ord('a'))+Ord('a'));
end;
Im FormCreate noch randomize aufrufen.
Wohlgemerkt ohne Sonderzeichen

EDIT: Ich hab mir vielleicht 5 Sekunden den Beitrag durchgelesen und du hast gleichzeitig die Antwort geschrieben :stupid: .

Sharky 22. Feb 2005 19:01

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Khabarakh
Delphi-Quellcode:
procedure Button1Click(Sender: TObject);
begin
  Edit1.Text:=Chr(Random(Ord('Z')-Ord('a'))+Ord('a'));
end;

Hai Khabarakh,

bist Du dir da sicher mit deinen "ORDs"? Da kommen doch sicher etwas falsche Buchstaben raus ;-)

Edit:
So wäre es glaube ich besser :stupid:
Delphi-Quellcode:
 Edit1.Text := Edit1.Text + Chr (Random (56) + 64 + 1);

Äfan 22. Feb 2005 19:03

Re: Zufälligen Buchstaben anzeigen
 
Also bei beiden beispielen, stürzt mein prog ab und es kommt ein CPU fenster :(

Duffy 22. Feb 2005 19:06

Re: Zufälligen Buchstaben anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Äfan,
hier mal eine Demo dazu ...

bye
Claus

Äfan 22. Feb 2005 19:09

Re: Zufälligen Buchstaben anzeigen
 
@Duffy: thx

Aber wenn ich ein eigenes Programm mache und diesen code einbaue, kommt ein fehler:

Bild (verlinkt weil zu groß)

MFG

Sharky 22. Feb 2005 19:30

Re: Zufälligen Buchstaben anzeigen
 
Hast Du noch andere Komponenten auf der Form?

Hier mal ein anderer Code um Buchstaben (A..Z,a..z) zu erzeugen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  buchstabe : String;
begin
  buchstabe := Chr((Random (26) + 65));
  if (Boolean(Random(2))) then
  begin
    buchstabe :=LowerCase (buchstabe);
  end;
  Edit1.Text := Edit1.Text + buchstabe;
end;

Binärbaum 22. Feb 2005 19:37

Re: Zufälligen Buchstaben anzeigen
 
So ist es vielleicht besser:

Delphi-Quellcode:
function Buchstabe(asUpperCase: Boolean): Char;
begin
  if asUpperCase then
    Result:=Chr( Random(Ord('Z')-Ord('A')+1) +Ord('A') )
  else
    Result:=Chr( Random(Ord('Z')-Ord('A')+1) +Ord('a') );
end;
...
procedure Button1Click(Sender: TObject);
begin
  Randomize;
  Edit1.Text:=Buchstabe(True);
end;
Das +1 in Random muss sein,da sonst nur Buchstaben bis y erzeugt werden.

MfG
Binärbaum

Äfan 22. Feb 2005 19:43

Re: Zufälligen Buchstaben anzeigen
 
Mit Binärbaum's code gehts. :gruebel:

Binärbaum 22. Feb 2005 20:01

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Äfan
Mit Binärbaum's code gehts. :gruebel:

Was gibt da zu grübeln? Wunderst du dich nur, dass es funktioniert, oder fragst du dich, wie es funktioniert?

Sharky 22. Feb 2005 20:42

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Binärbaum
So ist es vielleicht besser....

Hai Binärbaum,
bei deinem Code werden aber nur Gross oder Kleinbustaben erzeugt. Darum habe ich ja extra noch einen Zufallswert eingefügt um das zu umgehen ;-)

Aber Äfan scheint zur Zeit ja andere Probleme mit den verschiedenen Beispeilen zu haben ;-)

Binärbaum 22. Feb 2005 21:17

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Sharky
Zitat:

Zitat von Binärbaum
So ist es vielleicht besser....

Hai Binärbaum,
bei deinem Code werden aber nur Gross oder Kleinbustaben erzeugt. Darum habe ich ja extra noch einen Zufallswert eingefügt um das zu umgehen ;-)

Ebenso könnte man bei meiner Variante einen zufälligen Wert (d.h. True oder False) übergeben, um Groß- und Kleinbuchstaben zu erzeugen. Wie man es machen will, ist letzlich jedem selbst überlassen. Realisiern kann man es mit beiden Varianten. :)
[Edit]
Allerdings kann man deine Methode nicht verwenden, wenn man nur Groß- oder nur Kleinschreibung haben möchte. Aber das kommt jetzt darauf an, was Äfan genau erreichen will.
[/Edit]

MfG
Binärbaum

Äfan 23. Feb 2005 14:02

Re: Zufälligen Buchstaben anzeigen
 
ich bekomm aber immer noch: Bild (verlinkt weil zu groß)

Khabarakh 23. Feb 2005 16:53

Re: Zufälligen Buchstaben anzeigen
 
Das kann eigentlich nicht an diesen Zeilen liegen :gruebel: . Zeig mal den Quellcode bzw. gleich das ganze Projekt (oder vielleicht auch Bereichsprüfung usw. ggf. anschalten).

@Sharky: Oh, da sind ja wirklich noch welche dazwischen, falschherum wars auch noch :stupid: .

Rastaman 23. Feb 2005 17:18

Re: Zufälligen Buchstaben anzeigen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  s: String = 'abcdefghijklmnopqrstuvwxyz';
begin
  Randomize;
  Edit1.Text := s[Random(Length(s) + 1)]
end;

Chegga 23. Feb 2005 17:30

Re: Zufälligen Buchstaben anzeigen
 
Hi,

@ Äfan:
Es gibt noch eine Möglichkeit zufällige Buchstaben zu erzeugen.
(Diese ist zugegebener Maßen etwas sinnbefreit. :wink: )

Vereinbare eine Integer-Variable z.B.: Zahl: Integer;
Delphi-Quellcode:
bla bla bla...
Zahl := random(52) + 1;
// jetzt kommt das Sinnbefreite
  case Zahl of
   1: Edit1.Text := 'A';
   2: Edit1.Text := 'a';
   3: Edit1.Text := 'B';
   // usw... ;-)
  end;
Kostet viel Zeit und Mühe, aber vielleicht klappt's ja so. :zwinker:

MfG Marc

Rastaman 23. Feb 2005 17:34

Re: Zufälligen Buchstaben anzeigen
 
Meines klappt doch auch wozu dann dieses 'Sinnbefreite' :shock:

Sharky 23. Feb 2005 18:02

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Gerrit89
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  s: String = 'abcdefghijklmnopqrstuvwxyz';
begin
  Randomize;
  Edit1.Text := s[Random(Length(s) + 1)]
end;

:shock: Randomize und Random in der selben Methode? Sorry. Aber da solltest Du noch etwas die OH lesen!

@Äfan: Alle Beispiele die hier gezeigt wurden funktionieren zu 100%. Aber irgendwie bist Du nich bereit uns deinen Code zu zeigen :wall:

Darum muss ich für mich sagen: Hier hört meine Hilfe auf!

Duffy 23. Feb 2005 18:18

Re: Zufälligen Buchstaben anzeigen
 
Hallo Äfan
ich kann es Sharky nachempfinden.

Einen Tip hätte ich da noch, nimm als Ablage für dein Programm mal einen normalen Ordner und nicht den Desktop!

bye
Claus

Rastaman 23. Feb 2005 18:34

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Sharky
:shock: Randomize und Random in der selben Methode? Sorry. Aber da solltest Du noch etwas die OH lesen!

:oops: Jo warn bisschen übereifrig und sonst hätte der code so lang ausgesehen mit ner extra procedure :lol:

Äfan 24. Feb 2005 14:54

Re: Zufälligen Buchstaben anzeigen
 
@Sharky: Natürlich kann ich euch den code zeigen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Anschlage: TLabel;
    Fehler: TLabel;
    Button1: TButton;
    procedure Edit1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
        C: Char;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
begin
  If Edit1.Text = Label2.Caption then
   begin
   Anschlage.Caption := inttostr(strtoint(Anschlage.Caption) + 1);
  end
  else
   begin
   Fehler.Caption := inttostr(strtoint(Fehler.Caption) + 1);
  end;
  Label2.Caption := '';
  Edit1.Text := '';

  repeat
    C := Chr(Random(127 + 1));
  until C in ['A'..'Z', 'a'..'z'];
  Edit1.Text := C;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 randomize;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  repeat
    C := Chr(Random(127 + 1));
  until C in ['A'..'Z', 'a'..'z'];
  Edit1.Text := C;
end;

end.
Also ich habe es so gemacht, wie es hier steht, also mit case oder a-z in einer variablen und dann mit Position, is denke ich für meinen zweck sinnvoller als das mit chr usw. da ich dann besser bestimmen kann, welche zeichen verwendet werden sollen.

PS: Wie war das nochmal mit "A..Z" also das z.B. das ganze Alphabet in variable "buchs" gesetzt wird ?

MFG

Binärbaum 24. Feb 2005 15:03

Re: Zufälligen Buchstaben anzeigen
 
@Äfan:
Also ich fand die hier vorgestellten Funktionen/ Prozeduren mit Ord und Chr besser als die Variante, welche du jetzt verwendest.
Von den 128 zufälligen Zahlen, die du mit Random erzeugst, sind schonmal die ersten 64 überhaupt keine Buchstaben. Und dann kommen noch zwischen Groß- und Kleinbuchstaben im ASCII-Code einige Sonderzeichen und nach den Kleinbuchstaben auch noch. Also sind weniger als die Hälfte der Zahlen zu gebrauchen. Da finde ich die anderen Varianten doch effektiver.

MfG
Binärbaum

Äfan 24. Feb 2005 15:36

Re: Zufälligen Buchstaben anzeigen
 
Ja, also mit meiner bissherigen methode is es nix, ich mache es mit case oder var mit a-z :thumb:

PS: Hab gleich was neues gelernt, wusste das mit case nähmlich noch nicht :roll: :oops: :-D

MFG und thx

Binärbaum 24. Feb 2005 15:51

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Äfan
Ja, also mit meiner bissherigen methode is es nix, ich mache es mit case oder var mit a-z :thumb:

Du meinst doch mit dem case nicht etwa die Methode von Chegga?? :shock:
Die funktioniert zwar sicherlich auch, aber erstens ist es viel Schreibarbeit und zweitens
Zitat:

Zitat von Gerrit89
sinnbefreit

An deiner Stelle würde ich die Variante mit dem case also nicht nehmen, sondern eine der anderen hier vorgestellten Varianten.

Äfan 24. Feb 2005 21:12

Re: Zufälligen Buchstaben anzeigen
 
ja, ich meinte damit die von Chegga :oops:

OK, dann mach ichs mit der variable, a-z und position.

Off Topic PS: Wie kann ich in Edit1 automatisch das alphabet einfügen ? da war doch mal was mit 'a'..'z' :gruebel:

MFG

Sharky 25. Feb 2005 06:47

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Äfan
@Sharky: Natürlich kann ich euch den code zeigen:

Delphi-Quellcode:
unit Unit1;

.
.
procedure TForm1.Edit1Change(Sender: TObject);
begin
  If Edit1.Text = Label2.Caption then
   begin
   Anschlage.Caption := inttostr(strtoint(Anschlage.Caption) + 1);
  end
  else
   begin
   Fehler.Caption := inttostr(strtoint(Fehler.Caption) + 1);
  end;
  Label2.Caption := '';
  Edit1.Text := '';

  repeat
    C := Chr(Random(127 + 1));
  until C in ['A'..'Z', 'a'..'z'];
  Edit1.Text := C;
end;
...
end.
...

Dann schauen wir doch mal was dort passiert ;-)
Du hast ein Ereigniss welches aufgerufen wird wenn sich der Inhalt von Edit-1 ändert. Und was machst Du innerhalb dieser Methode? .... Genau! Du Änderst den Inhalt von Edit-1. Ergo -> Die Methode ruft sich selber immer wieder auf. Das Ergebniss ist ein Stacküberlauf.

P.S.: Deine repeat-Until-Schleife könnte unter umstenden Jahre laufen ohne je beendet zu werden ;-)

mr47 25. Feb 2005 12:56

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von Äfan
ja, ich meinte damit die von Chegga :oops:

OK, dann mach ichs mit der variable, a-z und position.

Off Topic PS: Wie kann ich in Edit1 automatisch das alphabet einfügen ? da war doch mal was mit 'a'..'z' :gruebel:

MFG

Delphi-Quellcode:
for i:= 1 to 26 do
begin
  //evt. noch edit1.clear; (falls du nur das alphabet willst!
  edit1.Text:=edit1.Text+chr(ord('a')-1+i);
end;
Ungetestet. Müsste aber das Alphabet in kleinbuchstaben ergeben.

mfg

PierreB 17. Okt 2005 17:35

Re: Zufälligen Buchstaben anzeigen
 
Moin,

ich habe mal Sharkys Code benutzt und nun folgendes versucht: Es soll 6 mal ein zufälliges Zeichen ins Edit geschrieben werden, klappt auch ohne Probleme. Doch nun möchte ich verhindern das ein Buchstabe (egal ob klein oder groß geschrieben) doppelt im Edit vorkommt. Hab mal folgendes (als Anfang) versucht:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  buchstabe, s: String;
  i : Integer;
begin
 edit1.text := '';
 for i := 0 to 6 do
  begin
   buchstabe := Chr((Random (26) + 65));
   if (Boolean(Random(2))) then
    begin
     buchstabe :=LowerCase (buchstabe);
    end;
  s := edit1.text;
  if Pos(buchstabe, s) <> 0 then begin
  buchstabe := Chr((Random (26) + 65));
  if (Boolean(Random(2))) then
  begin
    buchstabe :=LowerCase (buchstabe);
  end;
  end
  else
  Edit1.Text := Edit1.Text + buchstabe;
  end
end;
Klappt auch soweit, aber nur wenn doppelte Buchstaben in gleicher Größe (klein oder groß) vorkommen, wie kann ich also verhindern das ein Buchstabe egal ob groß oder klein doppelt im Edit vorkommt ?
*grad auf dem Schlauch steh*

Danke schonmal,

Khabarakh 17. Okt 2005 19:20

Re: Zufälligen Buchstaben anzeigen
 
Zitat:

Zitat von PierreB
Klappt auch soweit, [...]

Da hast du aber Glück gehabt :mrgreen: . Wenn du einen Char erzeugt hast, der schon vorkommt, erzeugst du einen neuen per Zufall. Aber es ist nicht sicher, dass dieser noch nicht im Edit-Feld ist (und mit ansteigender Anzahl immer unwahrscheinlicher).
Mein Vorschlag: Füge alle Buchstaben in ein Array ein, mische es kräftig durch und nimm dann die ersten n Chars des Array. Das sollte genauso zufällig sein.

[add] Statt dem Array könnte man natürlich auch gleich einen String benutzen. [/add]

PierreB 18. Okt 2005 16:15

Re: Zufälligen Buchstaben anzeigen
 
Danke, scheint auch ne gute Möglichkeit zu sein.

Ich guck mir das mal an, thx. :hi:


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