Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi zufall, mit eingeschränkten werten ? (https://www.delphipraxis.net/41127-zufall-mit-eingeschraenkten-werten.html)

fadz 26. Feb 2005 15:34


zufall, mit eingeschränkten werten ?
 
hi,
ich hab folgendes problem,ich woltle ein zufallsscript basteln,
nur ich hab ein problem, als bedingung für dieses script dürfen nur zahlen aus dieser reihe hier gelten:
112
113
114
122
123
124
132
133
134
142
143
144
...
443

wie kann ich soetwas realisieren ?
wäre dankbar für vorschläge :)

ich hätte es z.b. irgendwie so realisiert:
zufallszahl zwishen 112 ... 443
und dann gucken ob sie nach meinen regeln ist,
ansonsten neu machen :)
nur ich weiss nicht ob es nicht einen einfacherere art gibt :)

mirage228 26. Feb 2005 15:36

Re: zufall, mit eingeschränkten werten ?
 
Hi,

machs mal so
Delphi-Quellcode:
Randomize; // nur einmal aufrufen, am besten im FormCreate
Wert := Random(332) + 112;
mfG
mirage228

Stanlay Hanks 26. Feb 2005 15:38

Re: zufall, mit eingeschränkten werten ?
 
Alternativ bietet die Funktion RandomRange aus der Unit Math die selbe Möglichkeit.

Man liest sich, Stanlay :hi:

PS: Die Suche hätte dir geholfen ;)

fadz 26. Feb 2005 15:43

Re: zufall, mit eingeschränkten werten ?
 
kk, atm hab ich es eifnachs o gemacht, lool:
Delphi-Quellcode:
var z,p1,p2:integer;
    p1a,p2a: string;
begin
repeat
z:=random(443);
if z>=111 then begin
p1a:= inttostr(z);
p2a:= inttostr(z);
delete(p1a,2,3);
delete(p2a,1,2);
p1:=strtoint(p1a);
p2:=strtoint(p2a);
end;
until (z>=111) and (pi <> p2);
memo1.Lines.Add(inttostr(z))
funktioniert prima und erfüllt den zweck :)

sniper_w 26. Feb 2005 16:30

Re: zufall, mit eingeschränkten werten ?
 
Zitat:

funktioniert prima und erfüllt den zweck
Dafür aber nicht optimal und damit nicht sinnvoll.
mirage228 hat dir in 2 Zielen alles gesagt.(keine REPEAT/UNTIL Abfrage)

xineohp 26. Feb 2005 16:39

Re: zufall, mit eingeschränkten werten ?
 
moin,

irgenwie hab ich das Gefühl ihr habt den Eingangspost nicht richtig gelesen!!
Zitat:

Wert := Random(332) + 112;
liefert auch z.B 116 was allerdings nicht in der gewünschten Menge liegt!

4toms 26. Feb 2005 16:42

Re: zufall, mit eingeschränkten werten ?
 
Hausaufgabe abgeschrieben / nicht selbst erstellt.

Setzen, schämen, sechs!

jfheins 26. Feb 2005 16:43

Re: zufall, mit eingeschränkten werten ?
 
Wie wäre es mit
Delphi-Quellcode:
zahl := (random (4) * 100 + 100) + (random (4) * 10 + 10) + (random (3) + 2)
Erzeugt
(1-4) > Hundert
(1-4) > zig / zehner
(2-4) > einer

Binärbaum 26. Feb 2005 16:44

Re: zufall, mit eingeschränkten werten ?
 
Nein, dann machs doch allgemein so:
Delphi-Quellcode:
var obereGrenze, untereGrenze, zufall: Integer;
...
Randomize;
zufall:= Random(obereGrenze-untereGrenze+1)+untereGrenze;
MfG
Binärbaum

xineohp 26. Feb 2005 16:44

Re: zufall, mit eingeschränkten werten ?
 
als Lösung des Problems würde ich empfehlen jede Ziffer einzeln zu generieren diese dann zusammen zusetzen:
Delphi-Quellcode:
var a,b,c,x: integer;
begin
  a := random(4)+1;
  b := random(8)+1;
  c := random(3)+2;
  x := 100*a + 10*b + c;
end;

Binärbaum 26. Feb 2005 16:45

Re: zufall, mit eingeschränkten werten ?
 
Zitat:

Zitat von xineohp
als Lösung des Problems würde ich empfehlen jede Ziffer einzeln zu generieren diese dann zusammen zusetzen

Warum so umständlich, wenn es auch einfacher geht (siehe mein Beitrag weiter oben) :?:

Jelly 26. Feb 2005 16:49

Re: zufall, mit eingeschränkten werten ?
 
Zitat:

Zitat von xineohp
irgenwie hab ich das Gefühl ihr habt den Eingangspost nicht richtig gelesen!!

Das Gefühl hab ich noch weiterhin.

Da in der Datenreihe einige Werte nicht auftauchen, muss dies berücksichtigt werden. Es ist aber nicht gerade effektiv, in einer repeat...until Schleife sooft eine Zufahlszahl zu erzeugen, bis sie in die Datenreihe passt. Ich würde alle Werte in eine StringList legen, und mittels
Delphi-Quellcode:
random(stringlist.count)
dann einfach eine Zeile rauspiksen. Geht natürlich nur, solange alles noch in den Speicher passt.

xineohp 26. Feb 2005 16:52

Re: zufall, mit eingeschränkten werten ?
 
@Binärbaum:
und was bitte würdest du dan konkret als obere bzw. untere Grenze verwenden?! es wird eine Ergebnismenge verlangt die die Zahlen 112..114, 122..124, 132..134, usw. beinhaltet! Das wirst du mit deinem Beispiel alleine nie erreichen! Natürlich kannst du dir eine Art RandomRange-Funktion schreiben und dann meine ersten drei Zeilen durch einen Funktionsaufruf ersetzen, da ist hier aber eindeutig ein Overkill!!


OT:
Ich frag mich warum die Leute immer so vorschnell antworten müssen und dann auch noch zum Teil wirklich unfreundlich, ohne dass die eigntliche Frage verstanden bzw. richtig gelesen wurde. Dieser Thread ist ein gutes Beispiel dafür: von 12 Antworten sind mindestens 5 (durch mangelndes Lese-Verständnis?) völlig am Ziel vorbei, drunter ist einer der absolut prolemisch und ohne irgendeinen Bezug zum Thema formuliert ist. Die Hälfte der übrigen Thread beschäftigt sich (zwangsläufig) mit der Korrektur der das Thema verfehlenden Beiträge und die zwei korrekten Lösungsvorschläge gehen völlig unter!

RavenIV 14. Mär 2005 15:12

Re: zufall, mit eingeschränkten werten ?
 
warum benutzt du nicht:

Delphi-Quellcode:
function RandomRange(const AFrom, ATo: Integer): Integer;
siehe OH für details...

gruessle

Steve 14. Mär 2005 15:36

Re: zufall, mit eingeschränkten werten ?
 
Hi,

mal davon ausgehend, dass die "Hunderter" zwischen 1 und 4 liegen dürfen, die "Zehner" ebenfalls von 1 bis 4 gehen und die "Einer" nur die Werte 2, 3 und 4 annehmen dürfen:
Delphi-Quellcode:
function zufall : integer;
begin
  result := RandomRange(1,4)*100+  // 1 bis 4
            RandomRange(1,4)* 10+  // 1 bis 4
            RandomRange(2,4);     // 2 bis 4
end;
Falls die Grenzen nicht sitmmen, kannst Du sie ja anpassen :)

Ist im Endhinein zwar fast das Gleiche wie schon erwähnt, aber die Antwort ist wohl vermutlich -wie bereits erwähnt- im ganzen Tumult untergegangen.. :roll:

Gruß
Stephan :dance:

//edit: Tippfehler


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