Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
636to640
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
636to640
636to640
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

ieso funktionieren beide Codes?

ieso funktionieren beide Codes?
20.07.2005 16:16:06
Reinhard
Hallo Wissende,
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

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ieso funktionieren beide Codes?
20.07.2005 20:48:48
PeterW
Hallo Reinhard,
der erste Code funktioniert nur, solange x 900 läuft der Code tatsächlich in eine Endlosschleife:
1 + (True) * -2 = 3
1 + (False) * -2 = 1
Im zweiten Code ist es richtig:
1 + (True) * 2 = -1
1 + (False) * 2 = 1
Gruß
Peter
AW: ieso funktionieren beide Codes?
20.07.2005 21:01:54
Reinhard
Hallo Peter,
danke für deine Mühe.
Die 3 fiel mir wohl nie auf weil das x meist immer so ca. 760 war.
Trotz der 3 ist mir immer noch nicht so ganz alles klar in dem Code, ich werde weiter daran experementieren.
Falls ich mich nicht mehrhier melde, fiel der Groschen, wenn nicht stelle ich es auf offen oder neue Anfrage wenn archiviert.
Gruß
Reinhard
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige