Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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 21. Nov 2008 22:56


Zufallsvariable
 
Hallo,

hab eine Frage.
Ich möchte ein Zahlenrätsel zum Einstieg in die Spieleprogrammierung machen.
Hab Turbo Delphi.

Soweit bin ich gekommen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var z:0..50; var r:Real;
begin
r:=strtofloat(edit1.Text);
If r<z Then
begin
Label2.Caption:='Die Zahl ist zu klein';
end;
If r>z Then
begin
Label2.Caption:='Die Zahl ist zu groß';
end;
If z=r Then
begin
Label2.Caption:='Richtig!!';
end;

Die Lösungszahl ist immer 112. Das ist das Problem
Danke für Hilfen!

freak4fun 21. Nov 2008 23:20

Re: Zufallsvariable
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  r: real;
  i: Integer;
begin
  Randomize;
  for i := 0 to 50 do
    begin
      r := Random(51);
      ListBox1.Items.add('Zahl: ' + FloatToStr(r));
    end;
end;
Randomize sollte nur ein mal aufgerufen werden. Random(51) erzeugt Zahlen zwischen 0 und 50 (einschließlich der Grenzen). ;)

Hawkeye219 21. Nov 2008 23:25

Re: Zufallsvariable
 
Hallo,

bei mir ist die Lösung immer 0!

Es wird eben die Zahl genommen, die zufällig in z steht - bis du einen sinnvollen Wert dort einträgst.

Gruß Hawkeye

blackdrake 22. Nov 2008 00:50

Re: Zufallsvariable
 
Hallo.

Soll das Zahlenrätsel wirklich Real-Zahlen abfragen? Das wären dann Zahlen mit Komma. Oder möchtest du Integer-Zahlen, also ganzzahlige Werte? Bei den Real-Zahlen musst du darauf achten, dass du das amerikanische Komma, den Punkt nimmst.

Außerdem ist die Notation "var z:0..50;" falsch. Was willst du damit genau aussagen?

Als erstes müsstest du z einen gültigen Typen zuweisen, z.B. Integer:

Delphi-Quellcode:
var z: integer;
und dann müsstet du im Code irgendwo z definieren/initialisieren.

Ich glaube in diesem Falle meinst du

Delphi-Quellcode:
z := Random(51);
In diesem Falle wäre Random aber nur für ganzzahlige Zahlen gültig! Deswegen irritiert mich, dass du diese mit einem Fließkommawert vergleichen willst.

Möchtest du eine zufällige Kommazahl mit 2 Nachkommastellen, könntest du sowas machen:

Delphi-Quellcode:
var z: real;

z := Random(51 * 100) / 100
Gruß
blackdrake

Hawkeye219 22. Nov 2008 01:17

Re: Zufallsvariable
 
Hallo Daniel,

Zitat:

Zitat von blackdrake
Außerdem ist die Notation "var z:0..50;" falsch.

Nein, das ist eine gültige Notation. Sie besagt, dass die Variable z ganzzahlige Werte im Bereich 0..50 aufnehmen kann. Wenn zur Laufzeit ein Wert außerhalb dieses Bereichs zugewiesen wird, dann erhält man bei eingeschalteter Bereichsprüfung eine Exception.

Gruß Hawkeye

DP-Maintenance 22. Nov 2008 08:16

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Windows API / MS.NET Framework API" nach "Object-Pascal / Delphi-Language" verschoben.

Hans33 22. Nov 2008 10:59

Re: Zufallsvariable
 
Hi

bin jetzt nicht wirklich schlau daraus geworden.
Ich möchte nur eine Zahl in mein Edit-Feld eingeben. Die Zufallsvariable soll eine ganze Zahl zwischen 1 und 50 sein
also
Delphi-Quellcode:
r:=Random(51)
r muss dazu doch eine ganze Zahl sein
also
Delphi-Quellcode:
r:Integer;
aber was muss dann die zahl, die ich in das Edit-Feld einege sein? Integer oder Real? Eigentlich doch Integer da r auch Integer ist?!?!
dann bin ich auf das gekommen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var z,r:Integer;
begin
 r:=strtoint(edit1.Text);
 z:=Random(51);
 If r<z Then
  begin
   Label2.Caption:='Die Zahl ist zu klein';
  end;
 If r>z Then
  begin
   Label2.Caption:='Die Zahl ist zu groß';
  end;
 If z=r Then
  begin
   Label2.Caption:='Richtig!!';
  end;
 end;
end.
aber dann ist die Lösungszahl zwischen 10 und 11, asber wenn ich dann 9,5 oder 9.5 eingebe kommt eine Fehlermeldung!!

was nun??

Hans33 22. Nov 2008 11:03

Re: Zufallsvariable
 
Die Zufalls variable ändert sich auch bei jedem Button-Klick was natürlich nicht sein sollt sonst kann man ja die Zahl nie eraten :lol:

quendolineDD 22. Nov 2008 11:10

Re: Zufallsvariable
 
Sicher, weil du bei StrToInt keine Gleitkommazahlen verwenden kannst, sondern ganzzahlige Werte brauchst.
Nun versteh ich auch inwiefern du das machen willst ;-)

Einfach dann die Zufallsvariable im FormCreate zuweisen und die Abfrage mit der Eingabe im ButtonClick-Ereignis.

Delphi-Quellcode:
  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); //Gleitkommawert von Eingabe r zuweisen

       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(50)+1; //Zufallszahl im Bereich 1-50
end;
Edit: Stimmt, hatte das einfach den Vorpostern entnommen ^^

DeddyH 22. Nov 2008 11:15

Re: Zufallsvariable
 
Btw: Eine Zufallszahl im Bereich 1 bis 50 bekommt man mit Random(50) + 1.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.
Seite 1 von 4  1 23     Letzte »    

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