Zufallszahlen und Skripting

c_pale shared this problem 1 year ago
Not a Problem

In der angehängten Datei erzeuge ich die Zufallszahlen z1 und z2. Sind diese gleich, so soll über das Skripting (von z2) der Wert von debug zum Beispiel auf 1 gesetzt werden.

Die Zahlen z3 und z4 sind so definiert: z3=z1/z2 bzw. z4=z2/z1. Sind nun z3 und z4 gleich, so soll über das Skripting der Wert von debug 2 verändert werden.


Ausgangssituation: z1 und z2 verschieden und somit auch z3 und z4.

Zeichnung aktualisieren: STRG+R

Ergebnis: z1=z2 und das Skripting ändert auch den Wert von debug.

ABER: z3=z4 und das Skripting ändert den Wert von debug 2 nicht! Dieser wird erst bei erneuter Aktualisierung verändert.

Das sollte doch nicht so sein, oder?


LG

Comments (4)

photo
1

Ich habe Deine Datei in 2 Punkten angepasst:

- Den Skript für debug2 (z3 und z4) verschoben von z2 nach z4

- Die skripte erzeugen im debug_n entweder 0 oder 1 (um das Testen zu vereinfachen)

So scheint es zu funktionieren (Anhang Version B).

---------------------------------------------------------------------------------

Meine Vermutung (da in GGB nicht dokumentiert):

Wenn der Zufallswert für z2 verarbeitet wird, dann haben z3 und z4 immer noch den alten Zufallswert, da die Reihenfolge des Nachführens der Objektwerte in der Sequenz des Konstruktionsprotokolls erfolgt. Das gilt auch für die damit verknüpften onUpdate-Skripte.

Der Skript in z2 (2. Zeile für debug2) kommt für (die noch nicht nachgeführten Objekte) z3 und z4 zu früh.

------------------------------------------------------------------------------------

Und noch ein Fehler ist mir aufgefallen:

Nach dem Starten des Programms ist debug_n nicht nachgeführt.

(dies könnte tatsächlich ein Bug sein, ich bin mir aber nicht Sicher GGB 5.0.511)

Es bräuchte den Befehl AktualisiereKonstruktion() beim Start des Programms.

Ich habe dies in Anhang Version C in global-JavaSkript eingesetzt.

------------------------------------------------------------------------------------

Und zu guter Letzt:

Man könnte auch auf den Skript verzichten und debug wie folgt definieren:


  • debug=Wenn(z1=z2, 1, 0)
  • debug2=Wenn(z3=z4, 1, 0)

Aber es geht ja hier um die Frage der Skriptverarbeitung.

photo
1

Vielen Dank für deine Mühen!

Jetzt ist mir einiges klarer! An die Sequenz des Konstruktionsprotokolls hatte ich nicht gedacht.

Das war eigentlich mein Hauptproblem. Mit der Sequenz im Hinterkopf lässt sich das in Zukunft vermeiden.

Was du mit dem nachführen von debug_n meinst verstehe ich nicht so ganz.


LG

photo
1

Starte ZZBug_B sooft bis (z1 und z2) denselben Wert haben.

Dann müsste debug == 1 sein. Ist es aber nicht.

Mit andern Worten: Beim Start werden zwar die Zufallswerte berechnet aber der Skript wird nicht ausgeführt.

photo
1

Aaahhh... alles klar!


Vielen Dank nochmal!

photo
© 2019 International GeoGebra Institute