Delphi-PRAXiS
Seite 3 von 4     123 4      

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)

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]


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 Uhr.
Seite 3 von 4     123 4      

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