うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

Geogebra ScriptとIf[]コマンド

はじめに

数値オブジェクトa=0を用意する。

ボタンbutton1を押すと、aが1になり、もう一度押すと0になり、さらにもう一度押すと1になり...。

このように、button1を押すごとにaの値が0→1→0→1と変化するようにするには、どうすればよいでしょうか。

 

 

うまくいかない例1

button1のOn Click スクリプトに、以下のように記述する。

If[a==0,SetValue[a,1]]
If[a==1,SetValue[a,0]] 

a=0のときには1行目が実行されてaは1になり、a=1のときには2行目が実行されてaは0になる。

一見するとうまくいきそうなスクリプトですが、実際には何度button1を押しても、aは0から変化しません

 aの初期値は0ですから、button1を押すと、まず1行目が実行されて、a=1になります。しかし、aが1になることによって、2行目のIf条件を満たしてしまいました。そのためただちに2行目が実行されて、aは0に戻ってしまうのです。

 

うまくいかない例2

If[a==1,SetValue[a,0]] 

If[a==0,SetValue[a,1]]

それならば、 1行目と2行目を入れ替えたらどうでしょうか。

初期値a=0の状態でbutton1を1回押すと、1行目は実行されず、2行目だけが実行されて終わります。したがってaは1になります。それから先は、上記の例1と同じ理由で、いくらbutton1を押しても、a=1のままです。

 

うまくいく例2

下記のように、スクリプトを1行にまとめれば、うまくいきます。

If[a==1,SetValue[a,0],SetValue[a,1]]

 

うまくいく例2

技巧的ですが、以下のように記述しても、うまくいきます。

If[a==1,SetValue[a,0.5]]
If[a==0,SetValue[a,1]]
If[a==0.5,SetValue[a,0]]

a=0のときは2行目だけが実行されて終わりです。

a=1のときは、いったんaを0.5に変えて、2行目の実行を回避した後、3行目で0に変えます。