返回列表 回复 发帖
编程填表---实现迭代
    今天弄了一中午,希望编程对表格填表,但是失败了,心里总在想思路不会有问题啊,怎么会失败呢,于是晚上有探索,终就成功,于是乎,贴出分享。
    我认为是最恰当的思路,因为有形,这样编程的难度就大幅度的降低,从而提高了编程的效率,编程填表,我们只需要掌握如何把数据输入到表格,这一点请不要用ggb提共那几个古怪的填表命令,事实上这么做就可以了:A1=3,数据就被填到了单元格A1中,而命令a=A1,单元格是数据就送个了变量a,而且有图像的画,还会自动产生图像。系统提共的填表,取表命令,怪怪的。对表格编程就是发现表格数据有图像的时候会自动生成图像。此外命令填入表格的方法是:用双引号,以就是说命令是以字符串的方式存放在表格里面的,本来js中单双引号是一回事,但是官网明确告诉ggb只是部分支持js,测试的结果是ggb只只把双引号引起来的角字符串。单引号的无法识别。
经过我反复的探索,终于成功的采用编程的方式,把数据填入到了表格,
最后实现了编程表格迭代

下面以正n边形的编程为例,依次来说明如何迭代。首先贴出代码,并注解在后面:
n0=ggbApplet.getValue("n")
/*抓取滑竿参数值为n0*/
for(i=1;i<100;i++){
  ggbApplet.deleteObject("A"+i)
}
/*采用循环语句去掉名称为A1,A2,...A100的点,使画面得以及时更新*/
ggbApplet.evalCommand("A1=A")
/*A1=A的意思是平面内,我先画了一个点A,把这个点的坐标送到表格的单元格A1中去,不能用右键记录到表格这种方式完成,
但是这句命令必须使用方法evalCommad才可以得以执行*/
t0=2*Math.PI/n0  /*内部只能用弧度官方文件明确告诉内部是以弧度制运算的,测试的结果也不能写成360度/n0,报错,
这是引用javascript的Math类的方法,获得圆周率,
因为ggb本身在编程时输入不了pi。
*/
for(i=1;i<=n0;i++){

  cmd="A"+(i+1)+"=rotate["+"A"+i+","+t0+"]"/*意思是A2=rotate[A1,t0],A3=rotate[A2,t0],表示递推字符串
以就是把记录到表格中的点A1旋转t0,并把值送到表格的A2单元格中,等等。
*/
   ggbApplet.evalCommand(cmd)/*执行上面的递推字符串表达的命令*/
  cmd2="B"+i+"=segment[A"+i+","+"A"+(i+1)+"]"
//我想执行的命令,类型字符串,意思是如:B2=segment[A1,A2],连接单元格A1,A2组成线段,并把这个值送到单元格B2中存放。注意电子表格的
A列,放的都是点,而B列我用来放线段,这是命令要通过下面的ggb的ggbApplet对象的方法才可以实现我的希望。*/
ggbApplet.evalCommand(cmd2)
/*实现字符串命令cmd2*/
   ggbApplet.setLabelVisible("A"+(i+1),false)
/*设置几何视区内的点A1,A2,... 的标签不可见,这是为了画面的整洁*/
}
ggbApplet.setLabelVisible("A"+1,false)
/*A1这个点在上面的循环语句中隐藏不了标签,所以最后补上了这句。*/
成功的填表法编程思路。我认为是很好的思路。.ggb (9.76 KB)
填表法编程成功后,那么如果要跌代5000次,就不比夸张的把表格拖动到第5000行的位置了。这样理论上就解决了控制迭代次数操作的问题。
另有个地方要注意:如果有一滑竿叫a
1.如果是在表格中要旋转A1,a度,这这么输入:"A2=rotate[A1,a]", 直接使用滑竿名字
2.如果是编程,这个程序是送值到表格,则滑竿值直接引滑竿名就是可以了
3.如你是想用滑竿值进行其它的非表格计算,那就得用方法ggbApplet.getValue(),把这个滑竿a的值抓出来,因为a在普通的js中代表对象,值是它的属性。
4.以就是说表格是利用对象进行操作的,而普通的js中要用值属性才可以计算。
也许有的朋友会奇怪,为什么我老研究旋转命令,这有两个原因,其一,我对ggb 并不熟悉,其二,要探索其用法,就探索旋转命令就够了,其余的以此类推。从简单的入手才最容易搞明白怎么玩着个ggb。
其三:官方也搞的是裸奔。毕竟是免费的,你难道还希望免费为你像几何画板那样做个详细的说明文档给你吗?让你免费这么弄你干吗?

迭代探索
完整的二分树,应该是2个循环嵌套能够完成,第n级顶点为2^n个,第n+1级的顶点为上级顶点的2倍。找时间试试。看能否成功。还是几何画板操作方便,ggb可行,但不方便。也许我没找到好的方法把。表格迭代做点简单的可以,复杂的还是要编程。
做到这里,我不断的问自己ggb能普及吗?!
1.如果是画画图,几何画板就够了
2.如果要迭代几何画板的方便
3.而ggb要不断的输入命令,它的自带工具点的旋转工具用起来也不习惯,因为点旋转后长度边了,而命令rotate[], 旋转后保持长度不变,这合乎习惯。不明白为啥要这样设计了。
4.把ggb来当js脚本的学习器到是不错的,用来玩迭代,就把小事变成大事来整了。
我个人的观点,就目前状况来看ggb当做几何画板的补充到是不错的。代替几何画板不知从何处代替。
5.看了ggb的cas测试版,基本和ggb4.0差不多
6.看了ggb的3d测试版,你用了就伤心。
7.几何画板在大陆火,是因为它容易操作,而且让人感到离数学很近,玩几何画板,让人感到你不是在玩软件,而是在做数学题,玩ggb就没这种感觉。玩ggb到像是在教人学习编程。编程不是人人都喜欢的。对少数的编程高手来讲,玩着个软件到是不错的。

8.我把我玩ggb的感觉写出来,让大家知道这个软件是怎么回事,让网友自己去选择自己喜欢的软件玩。
9.ggb不明白的东西太多了,比如,在4.0版本上编辑脚本,脚本稍多一点,滚动条就不滚动,被挡住的脚本就只能猜着往里面输入。ggb是一个bug“泵”多的软件,4.0的bug都没处理好,就在推4.02,4.02还没整清楚,就在推5.0版本,看来作者也是一个很随意的教授,或者就是利用业余时间弄弄吧了,这个应该不是作者的主业。还有ggb的帮助文档,如果还可以精简的话,我估计作者还会给你精简。

迭代探索.ggb (6.7 KB)

创建列表list的脚本:
arr=new Array()
for(i=0;i<4;i++){

t=arr.push(i)
}

ggbApplet.evalCommand("{"+arr+","+t+"}")
我拿着命令,想用循环语句创建列表,没头绪,结果是弄了js的数组才把这个列表弄出来。
----------------------
访问上述列表
for(i in arr){
ggbApplet.evalCommand(arr[i])
}
-------或
for(i in arr){
ggbApplet.evalCommand("element[list100,"+i+"]")
}
----------------------输入矩阵的js代码
arr=[];arr1=[]
for(i=0;i<3;i++){
  for(j=0;j<4;j++){
    arr1[j]=i+""+j
  }
arr[i]="{"+arr1+"}"
}
ggbApplet.evalCommand("s={"+arr+"}")
----ggb的列表,整了半天,发现只有用js的数组才好输入。

迭代几何画板中的那种二分树






------------------------------------
由于ggb本身是一个到处是bug的软件。在输入脚本时,下面的脚本在脚本输入框中放不下,所以只能拿记事本编辑,编辑好在复制到ggb的脚本编辑框中去,由于ggb的脚本编辑器bug的很,所以脚本的语句就只有一个挨一个挤在一起了。不好看也不好读,如果换行写,那就更装不下,作者太不严谨了。
。无法理解ggb 的作者,连4.0,4.09的脚本编辑框都没弄好,去弄什么5.0嘛,不可理解。从理论上来讲ggb可以做一切迭代,但是要编程,我做不出来是因为我编不来有的程序,但不代表ggb不能。ggb有两种脚本GGB脚本和js脚本,ggb脚本干不了什么事,基本就是一个摆设,因为ggb脚本连循环语句都没有。要干事情就得用js脚本。迭代的流畅度明显不如几何画板。看来网上说的:java不适合做数学问题是真的。要做数学问题还是要用c语言。我相信网上的这一说。
还有ggb的脚步框中输入脚本时最好加分号断句,ggb不严谨,不加分号ggb的bug出来了,你都不知道错在哪里。我从没见过如此不严谨的软件,这是ggb是第一个。我怀疑ggb是不是那个大学生写的一篇毕业论文啊?二分树要用脚本编程才可以做出来,脚本如下:
n0=ggbApplet.getValue("n");
for(i=0;i<Math.pow(2,n0+1);i++){  
  for(j=0;j<Math.pow(2,n0+1);j++){ggbApplet.deleteObject("A_{"+i+j+"}")
  }
};
ggbApplet.evalCommand("A_{00}=(1,3)");
ggbApplet.evalCommand("A=(1,0)");
s0="rdkt[A,A_{00},k,t]" ;
ggbApplet.evalCommand(s0);
ggbApplet.renameObject("B","A_{10}");
ggbApplet.renameObject("C","A_{11}");
for(i=0;i<n0;i++){
  for(j=0;j<Math.pow(2,i);j++){
      s1="A_"+"{"+i+j+"}";    c0="A_"+"{"+(i+1)+2*j+"}";      c1="A_"+"{"+(i+1)+(2*j+1)+"}"  ;
      cmd1="rdkt["+s1+","+c0+",k,t]";
      ggbApplet.evalCommand(cmd1);  ggbApplet.renameObject("B","A_{"+(i+2)+4*j+"}");
      ggbApplet.renameObject("C","A_{"+(i+2)+(4*j+1)+"}");
      cmd2="rdkt["+s1+","+c1+",k,t]";
      ggbApplet.evalCommand(cmd2);ggbApplet.renameObject("B","A_{"+(i+2)+(4*j+2)+"}");
      ggbApplet.renameObject("C","A_{"+(i+2)+(4*j+3)+"}");
  }
}
for(i=0;i<Math.pow(2,n0+1);i++){  
   for(j=0;j<Math.pow(2,n0+1);j++){      
     ggbApplet.setLabelVisible("A_"+"{"+i+j+"}",false);
   }   
}

/*请别超过7次迭代,否则卡死你娃*/在ggb的脚本框就没这么好看了,那里将挤在一起。
体会:ggb中编程对点的命名不方便,要是有一个命名函数或方法就好了。上面的编程主要是对点的命名编程。rdkt[点,中心,比,角]---是自定义工具。
ggb文件如下:
咱们业余选手玩这个软件太费力了,这个软件是给那些编程高手设计的。要像几何画板那样火,难,难,难。估计好都网友看了上面的代码后,跟本就不会在去学这个ggb了。因为太难学会了。学这个软件的门槛太高了:
1.要认识点英文
2.要有学点js脚本。
编程这东西不是人人都喜欢的。不过这个软件把它作为学习js脚本的练习器到可以胜任。ggb 不妨改叫js练习器吧,这样叫更恰当的能反映这个软件的特点。
在网上查了一下,网上说java处理数学问题并不擅长,java主要是在互联网上交互。数学软件一般都是c语言编的,网上说c的效率是非常高的。俺们对java是外行,也只是在网上看的,对不对俺不清楚。
期望:
  ggb的架构是不错的,如果在操作的方便性上加以改进,不要在这么激进的去推新版本,工作做的踏实一点,老老实实的把4.0做好,把现在的bug清理掉,你想,我们这种非编程专业的人都可以明显的感受ggb的bug,那些专业人士就更能发现ggb的问题了,还是几何画板踏实,稳步前进。在操作的方便性上好好的改进一下,这个软件就有前途,否则就只能是少数人的玩物。
后记:
  如果把一个软件按时间划分,可以划分为幼年,青年,成年。那么ggb还是在幼年期,但是gsp已经步入了成年期。

二分树.ggb (5.3 KB)

GeoGbra今天已经升级到了4.0.16.0版本。
遗憾的是bug:脚本输入框无法调整大小依然没有改进。
以就是说脚本输入框和原来一样一点改进都没有。这样通过脚本进行迭代依然和原来一样极不方便。
GeoGbra你什么时候才可以长大。再等等吧。
本来我想到官方的论坛注册,反映一下,但是没发注册。遗憾。等吧。等到GeoGbra成熟了再来玩这个软件吧。
82# shdxinxian


我这么说,不知道对不对:
  学习ggb入门并不难(如,画个园,画画线),但是要想达到几何画板那样的水平,就必须要学习js脚本语言。如果你喜欢编程呢,学习ggb也会觉得有乐趣,有了乐趣你就不再觉得难了。兴趣是最好的老师。所以在学习ggb的同时,你应该同时去学习JavaScript或jscript脚本语言。这两种脚本语言差不多。另外你学习ggb必须要有心理准备,这个软件有许多不如意的地方,比竟是新出来的,而且是用java语言编写的。有点编程常识的人都知道,c语言的效率才高,许多有名的数学软件都是用c语言编的。用java编写的数学软件,你很难遇到。但ggb是。还有就是ggb的脚本输入框是很难用的,不完备。客观的讲ggb的不完备应该是暂时的,若干年后会完备的。如果ggb是收费软件完备的可能会快一点。总之ggb的学习是和编程的学习联系在一块的。学习ggb 就得学习编程。难与不难就看你有没有兴趣了。有兴趣就不会觉得难!
为了学习geogbra,这里提供
javascript脚本学习入门最好的地方:
http://www.w3cschool.cn/js_functions.html
这个地此的学习,是以IE为宿主讲解的。其实js脚本可以脱离开网页运行。
返回列表