Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufallsvariable (https://www.delphipraxis.net/124615-zufallsvariable.html)

Hans33 22. Nov 2008 11:48

Re: Zufallsvariable
 
Ja klappt auch soweit aber die zu erratenen zahl ist immer 0!!
auch wenn ich das Projekt schließe und dann nochmal starte. Muss das so sein?

quendolineDD 22. Nov 2008 11:51

Re: Zufallsvariable
 
Poste mal deinen gesamten Quelltext. Bei mir kommen nach jedem Neustart des Programms neue Zufallszahlen heraus ...

Du darfst die Initialisierung des Zufallsgenerator, durch den Aufruf von der Prozedur Randomize nicht vergessen!

Hans33 22. Nov 2008 11:55

Re: Zufallsvariable
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  public
    z : integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject);
var r : real;
begin
  r := StrToFloat(Edit1.Text);

       if r < z then Label2.Caption := 'Zu niedrig'
  else if r > z then Label2.Caption := 'Zu hoch'
  else if r = z then Label2.Caption := 'Erraten';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
z := random(100)+1;
end;
end.

DeddyH 22. Nov 2008 12:01

Re: Zufallsvariable
 
Wieso vergleichst Du ganze mit Fließkommazahlen?

Hans33 22. Nov 2008 12:05

Re: Zufallsvariable
 
Warum? Ist das falsch?
Wenn ja wie mach ichs anders??

DeddyH 22. Nov 2008 12:09

Re: Zufallsvariable
 
Hier mal ein schnell runtergetipptes Beispielprojekt (implementation-Teil):
Delphi-Quellcode:
uses Math;

procedure TfrmRaten.btnRatenClick(Sender: TObject);
var Ratezahl: Integer;
begin
  Ratezahl := StrToIntDef(edtEingabe.Text,0);
  case Sign(Ratezahl - Zahl) of
     0: ShowMessage('Erraten');
     1: ShowMessage('Zu hoch');
    -1: ShowMessage('Zu niedrig');
  end;
  edtEingabe.SetFocus;
  edtEingabe.SelectAll;
end;

procedure TfrmRaten.FormCreate(Sender: TObject);
begin
  Randomize;
  Zahl := Random(100) + 1;
end;

blackdrake 22. Nov 2008 12:14

Re: Zufallsvariable
 
@Hans33: Wenn die zu erratende Zahl eine ganze Zahl sein sollte, wieso solltest du dann dem Benutzer erlauben, eine Fließkommazahl einzugeben? Wenn der Benutzer 9.5 eingibt, ist das schlicht und einfach ein falscher Wert. Das ist genau so, wie wenn er "a" eingibt, ist auch falsch.

StrToIntDef aus dem vorherigen Post wandelt eine ungültige Eingabe in 0 um und somit erhält der Benutzer keine Fehlermeldungen bei einer Kommazahl oder einem nicht-numerischen Wert.

quendolineDD 22. Nov 2008 12:53

Re: Zufallsvariable
 
Macht sich bloß dumm, wenn der Benutzer dann nicht darauf hingewiesen wird, das er eine falsche Eingabe macht und immer weiter macht ...
Ich glaube aber das Grundproblem ist hier einfach das Verständnis, weswegen man nicht unbedingt eine Abfrage der Benutzereingabe machen sollte.

DeddyH 22. Nov 2008 12:56

Re: Zufallsvariable
 
Wer so blöd ist, beim Zahlenraten ein "a" oder sowas einzugeben, hat es nicht besser verdient :twisted:

Hans33 22. Nov 2008 12:59

Re: Zufallsvariable
 
was ist dann falsch?
Ich kann kein denkfehler erkennen!
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  public
    z :integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;
z := random(50)+1;
end;
procedure TForm1.Button1Click(Sender: TObject);
var r : real;
begin
  r := StrTofloat(edit1.Text);

       if r < z then Label2.Caption := 'Zu niedrig'
  else if r > z then Label2.Caption := 'Zu hoch'
  else if r = z then Label2.Caption := 'Erraten';
end;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 Uhr.
Seite 2 von 4     12 34      

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