ieso funktionieren beide Codes?
20.07.2005 16:16:06
Reinhard
für https://www.herber.de/forum/messages/639745.html habe ich einen vba-Code geschrieben der auch funktioniert und deshalb bei meinem Problem an sich keine Rolle spielt, dient nur zur Info ws der Code machen soll.
Nachstehend sind 2 Codes, die das Gleiche tun wie der Code im geposteten Link, aber beträchtlich kürzer sind. Beide funktionieren, was meine Denklogik umschneisst. Von mir ausgesehen dürfte nur einer von beiden funktionieren.
Sie unterscheiden sich in 2 zeilen hinten durch "* -2" bzw. "*2"
In den Zeilen wird geprüft ob der Mittelwert der Zufaalszahlen größer 6 ist oder nicht was ja wahr bzw true ergibt, die dann -1 bzw 0 darstellen wenn mam sie multizipliert mit 1.
Durch den Ausdruck:
+ 1 + (x / anz > 6) * -2
erhalte ich ja nicht -1 und o sondern -1 und +1.
Wenn nun der Mittelwert größer 6 ist , nehme ich mir eine Zufallszahl und addiere "+ 1 + (x / anz > 6) * -2" also +1 oder -1 dazu. Dies solange bis der Mittelwert genau 6 entspricht.
Wenn aber der Mittel wert größer 6 ist und ich adiere +1 dazu, dann müsste m.W. eine Endlsoschleife entstehen, was aber nicht geschieht :-(
Und in einem der beiden Codes müßte das der Fall sein, dass der Mittelwert zu goß ist und trotzdem laufend eien 1 dazuaddiert wird.
Wo ist mein Denk/Code-Fehler?
Danke & Gruß
Reinhard
Option Base 1
Sub tttminus()
Application.ScreenUpdating = False
anz = 150
w = 6
ReDim z(anz) As Integer
For n = 1 To anz
Cells(n, 1) = Int((10 * Rnd) + 1)
x = x + Cells(n, 1)
Next n
While (x / anz) <> w
t = Int((anz * Rnd) + 1)
If Cells(t, 1) > 1 And Cells(t, 1) < 10 Then
Cells(t, 1) = Cells(t, 1) + 1 + (x / anz > 6) * -2
x = x + 1 + (x / anz > 6) * -2
End If
Wend
Application.ScreenUpdating = True
End Sub
Sub tttplus()
Application.ScreenUpdating = False
anz = 150
w = 6
ReDim z(anz) As Integer
For n = 1 To anz
Cells(n, 1) = Int((10 * Rnd) + 1)
x = x + Cells(n, 1)
Next n
While (x / anz) <> w
t = Int((anz * Rnd) + 1)
If Cells(t, 1) > 1 And Cells(t, 1) < 10 Then
Cells(t, 1) = Cells(t, 1) + 1 + (x / anz > 6) * 2
x = x + 1 + (x / anz > 6) * 2
End If
Wend
Application.ScreenUpdating = True
End Sub