在集算器中,常数可以直接存储在单元格中,并在表达式中被引用,关于集算器中常数的初步使用,可以查看常数的讲述。实际上,在表达式中引用单元格中的常数时,就相当于把单元格值作为变量使用。集算器中的各类参数、变量等都不限定数据类型,可以任意改变,但是在调用时需要注意。
在这里,我们就来讲述一下如何在集算器中使用各种参数。
在集算器中,如果一个单元格有值,那么在计算格或者执行格中,就可以直接使用单元格名称引用单元格值。有值的单元格可以是常数格、计算格,也可以是被执行格赋值的其它单元格。单元格名称由列号字母和行号整数组成。如:
|
A |
B |
1 |
3 |
=3*5 |
2 |
=A1*B1 |
|
3 |
=B2 |
>B2=3.14 |
4 |
=B2/2 |
|
A1是常数格,B1是表达式。A1与B1的值,都可以作为参数使用,B1和A2中的结果如下:
B2中未设定常数,且没有表达式,这样在A3中调用B2中的格时结果为空,实际上,任何一个单元格的初始值都是null。
B3为B2设定了格值,此时再在A4中调用时,B2的值就已经被设定为3.14了,A4结果如下:
可以注意到,如果一个单元格中的值不为空,默认情况下会用底色淡黄色表示。
在集算器中,单元格参数可以直接使用,不需事先声明也不必定义参数名,同时查看方便,因此应用最为广泛。
如下面的程序用单元格参数,存储计算累计值:
|
A |
B |
C |
1 |
=demo.query("select * from CITIES") |
|
|
2 |
|
|
|
3 |
for A1 |
if A3.POPULATION>500000 |
>A2=A2+1 |
4 |
|
else |
>B2=B2+1 |
在A3中遍历城市数据,如果城市人口大于500000,则在A2中计数,否则在B2中计数。计算后,A2与B2中结果如下:
在网格文件中,还可以定义网格参数,网格参数可以在当前网格中使用。
在菜单栏的Program菜单项中点击Parameter,可以查看网格参数设置:
在网格参数设定对话框中,可以设定网格文件中使用的参数。网格参数的参数名中不能包含空格或符号,且不能只含数字;参数值可以使用各种类型的常量,将根据设定值自动解析为相应的数据类型。需要注意的是,网格参数中不能使用表达式。
如果勾选Set arguments before run选项,则会在运算网格之前,弹出网格参数设定窗口:
在计算前可以修改网格参数的值,否则将使用默认值。网格参数在使用时,直接用参数名调用:
|
A |
1 |
=pi*4 |
2 |
=arg1+" world!" |
3 |
=arg2.(~*~) |
计算后,A1,A2和A3中的结果如下:
网格参数需要事先定义,如果在表达式中试图使用未定义的网格参数,表达式将无法解析而报错。
由于网格参数可以自定义名称,因此经常用来存储一些计算常量,如圆周率等。此外,网格参数也经常用来设定一些需要在计算前修改的数据,如:
|
A |
B |
C |
D |
1 |
Big |
Small |
SAME |
|
2 |
|
|
|
|
3 |
for num |
=rand(6)+1 |
=rand(6)+1 |
=rand(6)+1 |
4 |
|
if B3==C3 && B3==D3 |
>C2+=1 |
|
5 |
|
else if B3+C3+D3>10 |
>A2+=1 |
|
6 |
|
else |
>B2+=1 |
|
其中num是设定的网格参数,在这里设定投骰子次数,计算随机的3个骰子的点数情况,总点数大于10记为大,存在A2中;小于或等于10记为小,存在B2中;如果3个骰子点数相同,则存在C2中此时不记大小。用num设定试投100次后,A2,B2,C2中的结果如下:
其中,>C2+=1这样的表达式,相当于>C2=C2+1。对于a=a?x这样的表达式,可以用a?=x简写。
使用网格变量
除了直接使用单元格名,以及调用事先定义好的网格参数,在网格中还可以使用起了名字的变量,称为网格变量。网格变量无须事先声明,赋值时即自动产生,在赋值后的整个网格内均有效。但引用尚未赋值的变量将出错。如:
|
A |
B |
1 |
>a=5 |
>b=[1,3,2] |
2 |
=a+3 |
=b.(~+a) |
在A1中和B1中分别定义了网格变量a和b,这样就可以在A2和B2中调用,计算后,A2和B2中的结果如下:
网格中定义过的网格变量,及它们的值,可以在界面右下方的Cellset variable页中看到:
如果网格程序定义了网格参数,也会在这个列表中显示。
变量的判断
在集算器中,判断某个变量是否已定义,可以用ifv函数,如:
|
A |
B |
1 |
>a=5 |
>b=[1,3,2] |
2 |
|
|
3 |
if ifv(a) |
>A2=b.(~+a) |
4 |
else |
>B2=b |
第3行和第4行的代码分别准备为A2和B2赋值,只有A2中有结果:
而B2中为空。
在网格计算中,对于一些会重复使用的参数,可以设定为网格常量。网格常量的使用和网格参数是相同的,用常量名称调用即可。但是常量与网格参数也有所不同,常量可以设定类型,而且在网格中是不允许赋值的,而参数则可以赋值。
查看网格常量,可以点击 Tool 菜单中的Cellset constant 按钮:
常量可以是各种数据类型,如字符串、整数、日期、序列等等。在使用时,直接用常量名称调用:
|
A |
1 |
=param1+" Smith" |
2 |
=round(pi*3*3, 2) |
3 |
=param2.sum() |
计算后,A1,A2和A3中的结果如下:
在前面,我们了解了单元格参数,网格参数,网格变量和网格常量的使用。那么如果多种类型的参数、变量或常量共同使用时,情况如何呢?
先来看看下面的情况,在网格常量和网格参数中,均设定了pi:
此时,网格如下:
|
A |
1 |
=pi |
2 |
>pi=3 |
3 |
=pi |
计算后,A1和A3中的结果分别如下:
可见,同时定义了同名的网格常量与网格参数时,网格参数优先,因此A1中的值为3.14。当网格中存在同一名称的网格变量时,又会以网格变量优先,因此A3中的值为A2中赋值的3。
再来看看下面的情况:
|
A |
1 |
|
2 |
=A1 |
3 |
>A1=3 |
4 |
=A1 |
因为A1最初时没有数据,因此A2中的结果为空。而网格参数中定义的"A1"无法读到。因此,在设定网格参数时,不能使用单元格名形式的名称。
在A3中为"A1"赋值后,会发现单元格A1的底色变成了淡黄色,而右下角的并没有"A1"这个网格变量,说明A3实际上是在为单元格赋值。此时A1和A4中的数据是相同的:
所以,在集算器中,无论是网格参数、网格常量或者是网格中定义的变量,都应该避免使用类似单元格名的名称。