![]() |
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! |
Re: Zufallsvariable
Delphi-Quellcode:
Randomize sollte nur ein mal aufgerufen werden. Random(51) erzeugt Zahlen zwischen 0 und 50 (einschließlich der Grenzen). ;)
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; |
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 |
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:
und dann müsstet du im Code irgendwo z definieren/initialisieren.
var z: integer;
Ich glaube in diesem Falle meinst du
Delphi-Quellcode:
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.
z := Random(51);
Möchtest du eine zufällige Kommazahl mit 2 Nachkommastellen, könntest du sowas machen:
Delphi-Quellcode:
Gruß
var z: real;
z := Random(51 * 100) / 100 blackdrake |
Re: Zufallsvariable
Hallo Daniel,
Zitat:
Gruß Hawkeye |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Windows API / MS.NET Framework API" nach "Object-Pascal / Delphi-Language" verschoben.
|
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 muss dazu doch eine ganze Zahl sein
r:=Random(51)
also
Delphi-Quellcode:
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?!?!
r:Integer;
dann bin ich auf das gekommen
Delphi-Quellcode:
aber dann ist die Lösungszahl zwischen 10 und 11, asber wenn ich dann 9,5 oder 9.5 eingebe kommt eine Fehlermeldung!!
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. was nun?? |
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:
|
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:
Edit: Stimmt, hatte das einfach den Vorpostern entnommen ^^
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; |
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:58 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