参数与变量

阅读(6192) 标签: 参数, 变量,

在集算器中,常数可以直接存储在单元格中,并在表达式中被引用,关于集算器中常数的初步使用,可以查看的讲述。实际上,在表达式中引用单元格中的常数时,就相当于把单元格值作为变量使用。集算器中的各类参数、变量等都不限定数据类型,可以任意改变,但是在调用时需要注意。

在这里,我们就来讲述一下如何在集算器中使用各种参数。

用单元格作为参数

在集算器中,如果一个单元格有值,那么在计算格或者执行格中,就可以直接使用单元格名称引用单元格值。有值的单元格可以是常数格、计算格,也可以是被执行格赋值的其它单元格。单元格名称由列号字母和行号整数组成。如:

 

A

B

1

3

=3*5

2

=A1*B1

 

3

=B2

>B2=3.14

4

=B2/2

 

A1是常数格,B1是表达式。A1B1的值,都可以作为参数使用,B1A2中的结果如下:

 

B2中未设定常数,且没有表达式,这样在A3中调用B2中的格时结果为空,实际上,任何一个单元格的初始值都是null

B3B2设定了格值,此时再在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中计数。计算后,A2B2中结果如下:

 

网格参数

在网格文件中,还可以定义网格参数,网格参数可以在当前网格中使用。

在菜单栏的Program菜单项中点击Parameter,可以查看网格参数设置:

在网格参数设定对话框中,可以设定网格文件中使用的参数。网格参数的参数名中不能包含空格或符号,且不能只含数字;参数值可以使用各种类型的常量,将根据设定值自动解析为相应的数据类型。需要注意的是,网格参数中不能使用表达式。

如果勾选Set arguments before run选项,则会在运算网格之前,弹出网格参数设定窗口:

在计算前可以修改网格参数的值,否则将使用默认值。网格参数在使用时,直接用参数名调用:

 

A

1

=pi*4

2

=arg1+" world!"

3

=arg2.(~*~)

计算后,A1,A2A3中的结果如下:

   

网格参数需要事先定义,如果在表达式中试图使用未定义的网格参数,表达式将无法解析而报错。

由于网格参数可以自定义名称,因此经常用来存储一些计算常量,如圆周率等。此外,网格参数也经常用来设定一些需要在计算前修改的数据,如:

 

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中分别定义了网格变量ab,这样就可以在A2B2中调用,计算后,A2B2中的结果如下:

 

网格中定义过的网格变量,及它们的值,可以在界面右下方的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行的代码分别准备为A2B2赋值,只有A2中有结果:

B2中为空。

网格常量

在网格计算中,对于一些会重复使用的参数,可以设定为网格常量。网格常量的使用和网格参数是相同的,用常量名称调用即可。但是常量与网格参数也有所不同,常量可以设定类型,而且在网格中是不允许赋值的,而参数则可以赋值。

查看网格常量,可以点击 Tool 菜单中的Cellset constant 按钮:

常量可以是各种数据类型,如字符串、整数、日期、序列等等。在使用时,直接用常量名称调用:

 

A

1

=param1+" Smith"

2

=round(pi*3*3, 2)

3

=param2.sum()

计算后,A1,A2A3中的结果如下:

   

参数、变量和常量的优先级

在前面,我们了解了单元格参数,网格参数,网格变量和网格常量的使用。那么如果多种类型的参数、变量或常量共同使用时,情况如何呢?

先来看看下面的情况,在网格常量和网格参数中,均设定了pi

此时,网格如下:

 

A

1

=pi

2

>pi=3

3

=pi

计算后,A1A3中的结果分别如下:

 

可见,同时定义了同名的网格常量与网格参数时,网格参数优先,因此A1中的值为3.14。当网格中存在同一名称的网格变量时,又会以网格变量优先,因此A3中的值为A2中赋值的3

 

再来看看下面的情况:

 

A

1

 

2

=A1

3

>A1=3

4

=A1

因为A1最初时没有数据,因此A2中的结果为空。而网格参数中定义的"A1"无法读到。因此,在设定网格参数时,不能使用单元格名形式的名称。

A3中为"A1"赋值后,会发现单元格A1的底色变成了淡黄色,而右下角的并没有"A1"这个网格变量,说明A3实际上是在为单元格赋值。此时A1A4中的数据是相同的:

 

所以,在集算器中,无论是网格参数、网格常量或者是网格中定义的变量,都应该避免使用类似单元格名的名称。