Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Random Problem (https://www.delphipraxis.net/47233-random-problem.html)

Clane 8. Jun 2005 07:14


Random Problem
 
Morgen Leute

also mein src

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

var i: integer;

begin

Randomize;

for i := 1 to strtoint(edAnzahl.text) do
  begin
    Listbox1.items.add(random(strtoint(edBis)+strtoint(EdVon)));
  end;
end;
so und jetzt das problem...

in der zeile
Zitat:

Listbox1.items.add(random(strtoint(edBis)+strtoint (EdVon)));
wird eine zufallszahl berechnet edBis is die anfangszahl und Edvon is die endzahl also von wo bis wo die zufallszahlen gehn

wenn edBis = 1 ist funktioniert das auch ganz gut aber wenn die zahl über 1 ist kommen werte von 1 und auch werte die über der endzahl heraus .. was is daran flassch oder wie kann ich das besser machen ??

MfG. PBiggi

marabu 8. Jun 2005 07:28

Re: Random Problem
 
Hallo PBiggi,

mach das besser so:
Delphi-Quellcode:
var
  iStart, iEnde, iRange: integer;
begin
  iStart := StrToInt(edVon);
  iEnde := StrToInt(edBis);
  iRange := Succ(iEnde - iStart);
  Listbox1.Items.Add(IntToStr(Random(iRange) + iStart));
end;
Grüße vom marabu

Dass man mit Add() nur Zeichenketten verarbeiten kann, habt ihr alle gemerkt und keiner sagt mir was...

Sharky 8. Jun 2005 07:31

Re: Random Problem
 
Hai PBiggi,

ich würde es so mache:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize; // Nur einmal im Programm aufrufen!
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  zufall : integer;
  von : integer;
  bis : integer;
begin
  ListBox1.Clear;
  von := StrToInt(edVon.Text);
  bis := StrToInt(edBis.Text);
  for i := 1 to strtoint(edAnzahl.text) do
  begin
    zufall := Random (bis - von +1) + von;
    Listbox1.items.add(IntToStr (zufall));
  end;
end;
[Edit]Ups. Da ist mir marabu zuvor gekommen *g*[/edit]

Clane 8. Jun 2005 07:37

Re: Random Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
ok ich hab den src so übernommen noch an die edits .text drangehönt und das ergebnis sieht so aus ...

edit: die rede is von marabu code

Clane 8. Jun 2005 07:43

Re: Random Problem
 
... peinlich hab von und bis irgentwo vertauscht :roll:

Sharky 8. Jun 2005 07:43

Re: Random Problem
 
Zitat:

Zitat von PBiggi
... edit: die rede is von marabu code

Da er das selbe macht wie ich muss es gehen ;-)

Zeige doch mal den Code wie Du ihn jetzt hast.

Unplugged 8. Jun 2005 07:44

Re: Random Problem
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  x            : Integer;
begin
  Randomize;
  for x := 1 to 10 do
    ListBox1.Items.Append(IntToStr(Random(StrToInt(Edit2.Text) - StrToInt(edit1.Text)) + StrToInt(Edit1.Text)));
end;
Hab ich gerade getestet und geht 1a unter Delphi 6

Edit1 : Min
Edit2 : Max

PS: Code ist nicht besonders elegant :D

Edit: Da war wohl jemand schneller ^^

Clane 8. Jun 2005 07:48

Re: Random Problem
 
jetztiger code

Zitat:

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
zufall : integer;
von : integer;
bis : integer;
begin
ListBox1.Clear;
von := StrToInt(edBis.Text);
bis := StrToInt(edVon.Text);
for i := 1 to strtoint(edAnzahl.text) do
begin
zufall := Random (bis - von +1) + von;
Listbox1.items.add(IntToStr (zufall));
Gauge1.progress := Gauge1.progress +1
end;
end;
dei beiden roten variablen wurden vertauscht das war der ganze fehler

Kroko1999 8. Jun 2005 08:52

Re: Random Problem
 
in der Unit
Math

Kategorie

Zufallszahlen
Delphi-Quellcode:
function RandomRange(const AFrom, ATo: Integer): Integer;

Clane 8. Jun 2005 09:11

Re: Random Problem
 
jo danke das sieht ja noch einfacher aus ;) ich werd das mal so probiern

marabu 8. Jun 2005 19:30

Re: Random Problem
 
Hallo PBiggi,

denke daran, dass Math.RandomRange(iLow, iHigh) nie iHigh als Ergebnis liefert. Der Range ist ein nach oben offenes Intervall. In meinem Code war ich von einem geschlossenen Intervall ausgegangen. Wenn du also diese Funktion einsetzt, dann musst du das Supremum auf Succ(iHigh) setzen um ein vergleichbares Ergebnis zu erhalten.

Freundliche Grüße vom marabu

PS: Seit wann wird eigentlich die Math-Unit bei der Personal Edition mitgeliefert?

Clane 9. Jun 2005 06:41

Re: Random Problem
 
Zitat:

PS: Seit wann wird eigentlich die Math-Unit bei der Personal Edition mitgeliefert?
garnich ... ich habs gesten nich mehr geschafft das zu probiern und als ich das grade eben ausprobiert hat is mir aufgefallen das die unit fehlt ....


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 Uhr.

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