Seite 1 von 1

[gelöst] Rnd() Problem -1

Verfasst: Do, 10.10.2013 20:06
von clag
Hallo Leutz,

nachdem ich mich nun lange mit BubbleSort beschäftigt habe und alles sortiert iss was zu sortieren war :lol:
muss ich nun wieder etwas Unordnung erzeugen
dazu verwende ich Basic Funktion Rnd die eine Zufallszahl 0-1 generieren soll und den folgenden Code

Code: Alles auswählen

dim rand1 as integer
dim rand2 as integer

for m=1 to myAnzahl
  rand1 = rnd*myAnzahl-1
  rand2 = rnd*myAnzahl/2
  'print rand1 & ";" & rand2
  chkcell.string = rand1 & ";" & rand2
  chng1 =	mData(rand1)
  chng2 =	mData(rand2)
  mData(rand1) = chng2
  mData(rand2) = chng1
next m
im Prinzip funktioniert diese DatenMischschleife auch prima, solange ich die Zeile mit der print Anweisung aktiv ist und alles langsam abläuf,
lass ich die Schleife ohne print im Schnelldurchlauf mischen gibt es oft Fehler weil eine Zufallszahl -1 ausgegeben wird und damit kann man ja kein array ansprechen.
Meine Methode Ganzzahlen zu erhalten durch festlegen der Variablen auf integer ist vieleicht nicht ganz sauber?

Die Frage ist wie kommt ein -1 zustande und wie verhindere negativ Werte, es soll aber auch 0 erzeugt werden also ein simples +1 tut es nicht?

Re: Rnd() Problem -1

Verfasst: Do, 10.10.2013 20:43
von F3K Total
Hi Clag,
clag hat geschrieben:Meine Methode Ganzzahlen zu erhalten durch festlegen der Variablen auf integer ist vieleicht nicht ganz sauber?
Vielleicht versuchst Du es mal so:

Code: Alles auswählen

  rand1 = int (rnd * myAnzahl)
  rand2 = int (rnd * myAnzahl / 2)
Gruß R

Re: Rnd() Problem -1

Verfasst: Do, 10.10.2013 21:07
von clag
Hallo F3K Total,

ja, dein Tip war die richtige Medizin,
jetzt funktioniert es ohne Aussetzer -1 taucht nicht mehr auf.

Danke

Re: [gelöst] Rnd() Problem -1

Verfasst: Fr, 11.10.2013 08:29
von clag
Hallo F3K Total und andere Leser,

mein Jubel zu dem Lösungsvorschlag war voreilig ;)

das Problem war nicht die fehlende Definition = int ( sondern ein ganz schlichter, peinlicher Fehler in der Formel
denn im Fall das rnd = 0 liefert entstand das Problem,
weil es ist nun mal Fakt 0*99-1=-1 im Gegensatz zu 0*(99-1)=0

Also, anstelle der Formel

Code: Alles auswählen

 rand1 = rnd*myAnzahl-1 
nimmt man

Code: Alles auswählen

 rand1 = rnd*(myAnzahl-1)
und schon ist alles gut

outsch :lol: