Delphi-PRAXiS

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

Dr4ke 12. Mai 2007 14:10


random()
 
Wie stelle ich es an das random() min. 1 raussucht und nicht 0?

Klaus01 12. Mai 2007 14:14

Re: random()
 
Delphi-Quellcode:
random(maxZahl) +1
oder randomRange

grüße
Klaus

Hador 12. Mai 2007 14:26

Re: random()
 
Zitat:

Zitat von Klaus01
Delphi-Quellcode:
random(maxZahl) +1

Naja eigentlich
Delphi-Quellcode:
Random(MaxZahl - 1) + 1
oder
Delphi-Quellcode:
Succ(Random(Pred(MaxZahl)))

Dr4ke 12. Mai 2007 14:27

Re: random()
 
Ahh tricky ;) Danke .. Aber ich hab noch ein Problem und möchte nicht gleich nen neuen Thread aufmachen.

Delphi-Quellcode:
procedure TForm1.btnWuerfelnClick(Sender: TObject);
var
ergebnis : integer;
begin
Addieren;
ergebnis := StrToInt(edtAnzahl.Text) + Addieren;
edtAnzahl.Text := IntToStr(ergebnis);
end;

function TForm1.Addieren : integer;
begin
Addieren := random(6)+1;
end;

Sollte recht verständlich sein .. Beim Button-klick wird eine Zufallszahl zwischen 1 und 6 generiert und zum Wert im Textfeld hinzugezählt. Jedoch erhalte beim Klick folgende Fehlermeldung:

Delphi-Quellcode:
" ist kein gültiger Integerwert.

Woran könnte das liegen?

Apollonius 12. Mai 2007 14:44

Re: random()
 
In deinem Textfeld steht gar nichts, es sollte aber eine Zahl darin stehen. Außerdem kannst du dir den ersten Aufruf von Addieren in dieser Form schenken, da er letztlich keinen Effekt hat.

Dr4ke 12. Mai 2007 14:46

Re: random()
 
Zitat:

Außerdem kannst du dir den ersten Aufruf von Addieren in dieser Form schenken, da er letztlich keinen Effekt hat.
Aber ja, sonst habe ich doch keine Zufallszahl?


Und danke für die Hifle mit dem Textfeld. Ich werde jetzt einfach ne 0 reinschreiben, oder gibt es eine sauberere möglichkeit?

SnuffMaster23 12. Mai 2007 14:49

Re: random()
 
Probier mal
Delphi-Quellcode:
function TForm1.Addieren : integer;
begin
  Result := random(6)+1;
end;
Addieren := random(6)+1; ist BASIC-Syntax ;)

Dr4ke 12. Mai 2007 14:57

Re: random()
 
Ich habe den Utnerschied jetzt nicht verstanden .. Ob ich nun das Ergebnis in Result oder im Rückgabewert der function speicher .. Ist das nicht egal?

SnuffMaster23 12. Mai 2007 15:00

Re: random()
 
Result ist der Rückgabewert der Funktion ;)
Das Ergebnig dem Funktionsnamen zuzuweisen geht in Delphi (glaub ich) nicht oder wird jedenfalls nicht empfohlen.

Aber den ersten Aufruf kannst du dir wirklich sparen, der Funktionswert verschwindet ja im Nirvana.

Dr4ke 12. Mai 2007 15:05

Re: random()
 
Zitat:

Result ist der Rückgabewert der Funktion Wink
Oh achso ;D

Zitat:

Das Ergebnig dem Funktionsnamen zuzuweisen geht in Delphi (glaub ich) nicht oder wird jedenfalls nicht empfohlen.
Es geht schon. Warum es nicht empfohlen wird weiß ich nicht.

Zitat:

Aber den ersten Aufruf kannst du dir wirklich sparen, der Funktionswert verschwindet ja im Nirvana.
Kann mir das mal jmd. näher erklären? Wenn ich das erste Addieren; weglasse habe ich keine Zufallszahl die ich addieren kann ..


Und: Gibt es eine sauberere Lösung als das ich ins Textfeld ne 0 am Anfang schreibe damit ich keinen Error kriege?

Die Muhkuh 12. Mai 2007 15:06

Re: random()
 
Delphi-Quellcode:
procedure TForm1.btnWuerfelnClick(Sender: TObject);
var
ergebnis, tmp : integer;
begin
tmp := StrToInt(edtAnzahl.text);

if tmp = 0 then
  ergebnis := Addieren
else
  ergebnis := tmp + Addieren;

edtAnzahl.Text := IntToStr(ergebnis);
end;

function TForm1.Addieren : integer;
begin
  Result := random(6)+1;
end;
Vermutlich willst du das.

Dr4ke 12. Mai 2007 15:12

Re: random()
 
Eben nicht ;D

Wenn das Textfeld leer ist und man "würfelt" kriegt man ne Fehlermeldung: " ist kein gültiger Integerwert.

Wenn ich vorher ne 0 reinschreibe gehts. Wie kann ich es anstellen das es leer ist und trotzdem kein Error kommt?

Die Muhkuh 12. Mai 2007 15:21

Re: random()
 
Delphi-Quellcode:
procedure TForm1.btnWuerfelnClick(Sender: TObject);
var
  ergebnis, tmp : integer;
begin
  if Trim(edtAnzahl.Text) = '' then
    tmp := 0
  else
    tmp := StrToInt(edtAnzahl.Text);

  ergebnis := tmp + Addieren;

  edtAnzahl.Text := IntToStr(ergebnis);
end;

Klaus01 12. Mai 2007 15:42

Re: random()
 
oder so:


Delphi-Quellcode:
procedure TForm1.btnWuerfelnClick(Sender: TObject);
var
  ergebnis,ErrorCode : integer;
begin
  val(edtAnzahl.text,ergebnis,ErrorCode);

if ErrorCode <> 0 then
  ergebnis := Addieren
else
  ergebnis := ergebnis + Addieren;

edtAnzahl.Text := IntToStr(ergebnis);
end;

function TForm1.Addieren : integer;
begin
  Result := random(6)+1;
end;
Grüße
Klaus

brechi 12. Mai 2007 15:47

Re: random()
 
Zitat:

Zitat von SnuffMaster23
Probier mal
Delphi-Quellcode:
function TForm1.Addieren : integer;
begin
  Result := random(6)+1;
end;
Addieren := random(6)+1; ist BASIC-Syntax ;)

Addieren := random(6)+1;
ist normale Pascal Syntax und macht keinen Unterschied zu Result := ...

Result gibt es erst ab Turbo Pascal ;)

himitsu 12. Mai 2007 15:48

Re: random()
 
gib mal 'nen Buchstaben ein ... dann gibt's wieder 'ne Fehlermeldung :zwinker:
dann lieber so ^^
Delphi-Quellcode:
procedure TForm1.btnWuerfelnClick(Sender: TObject);
var
  ergebnis : integer;
begin
  ergebnis := StrToIntDef(edtAnzahl.Text, 0) + Addieren;

  edtAnzahl.Text := IntToStr(ergebnis);
end;

In Zuweisung geht schon an den Funkionsnamen, nur kann man da nichts auslesen
Zitat:

Zitat von SnuffMaster23
Das Ergebnig dem Funktionsnamen zuzuweisen geht in Delphi (glaub ich) nicht oder wird jedenfalls nicht empfohlen.

Code:
function TForm1.Addieren : integer;
begin

  Addieren := 1;
  Addieren := [color=#ff0000][b]Addieren[/b][/color] + 1; // beim Roten wird die Function
                             // aufgerufen und nicht das Ergebnis ausgelesen
  Result := 1;
  Result := Result + 1;

end;

Die Muhkuh 12. Mai 2007 15:52

Re: random()
 
Zitat:

Zitat von himitsu
gib mal 'nen Buchstaben ein ... dann gibt's wieder 'ne Fehlermeldung :zwinker:
dann lieber so ^^

Auch nicht perfekt, man sollte erst gar nicht zulassen, dass man Buchstaben eintippen kann ;-)

Dr4ke 12. Mai 2007 16:07

Re: random()
 
Man kann keine Buchstaben eingeben, das Textfeld ist deaktiviert. ;)

So, mein Problem ist gelöst, danke an alle.


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