请教如何获取数组的尺寸
mfp吧
全部回复
仅看楼主
level 6
花神落CL 楼主
就是获取数组里面的元素个数。
2015年07月22日 07点07分 1
level 8
用size,比如n[1,2,3]和n[[1,2,3],[1,2,3]],size(n)返回[3],size(n,1)返回[2]
2015年07月22日 07点07分 2
谢谢了!我试过,但是结果是空括号。查了一下size是这么说的:size(x)返回矩阵x的尺寸向量。注意如果x不是一个矩阵,则总是返回[]。 看不懂,是不是数组并不是矩阵,那么如何把一个一维数组,转化成一维矩阵呢?
2015年07月22日 07点07分
@花神落CL 赋值的时候加[ ]就可以了,比如数字3不是一个数组,[3]就成数组了
2015年07月22日 07点07分
@花神落CL 对了,mfp里面叫矩阵
2015年07月22日 07点07分
我用的是参数形式,已经有[]了。我发个代码您给修改一下吧!
2015年07月22日 07点07分
level 6
花神落CL 楼主
附带说一下,下面的错误提示少了个字母:
Invalid expression
Cannot find a right parnthese to match the left parenthese!
2015年07月22日 07点07分 3
感谢指出,会修改。
2015年07月22日 23点07分
level 6
花神落CL 楼主
@woshiwppaa:下面运行结果中的序号是什么意思?
print(size(x)+"\n")
x[1]=["", "1", "0", "1"]
[2, 4]
x[2]=["", "1", "1", "1"]
[3, 4]
x[3]=["", "1", "1"]
[4, 4]
x[4]=["", "1", "0", "1", "0"] [5, 5]
x[5]=["", "1", "0", "0"]
[6, 5]
x[6]=["", "1", "1", "0", "1"] [7, 5]
2015年07月22日 10点07分 4
其中的x[3]和x[5]为什么结果不正确?
2015年07月22日 10点07分
@花神落CL 您这代码能够运行吗?x根本没有定义。能不能把完整的代码贴出来?
2015年07月22日 23点07分
level 7
数组和矩阵的尺寸计算示例如下:
function slyw() //1维数组或矩阵
variable a=[1,2,3,4,5] //定义了一个1行5列的1维数组
variable b=size(a)
print(b) //b等于[5]
endif
function slew() //2维数组或矩阵
variable a=[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]] //定义了一个3行5列的2维数组
variable b=size(a)
print(b) //b等于[3,5]
endif
[哈哈]希望对楼主有所帮助!
2015年07月22日 23点07分 5
帮忙检查一下6楼的代码。
2015年07月23日 01点07分
level 6
花神落CL 楼主
六楼有关代码:
Function erjin()
variable j,k,xi ,y,x ,a=[2, 5, 7, 3, 10, 4, 13]
for xi=0 to 6
set_array_elem(y ,xi, conv_dec_to_bin(a[xi]) )
set_array_elem(x,xi, split(y[xi],""))
print ("\n"+ "x["+xi+"]="+x[xi ]+" ")
k= size(x)
print( "\n"+ k)
next
endf
2015年07月23日 01点07分 6
conv_dec_to_bin(a[xi])这个转化成二进制的结果是字符串,要把字符串转化成纯数字用evaluate()字符转数值函数。比如2转化成二进制结果是10,程序中函数为conv_dec_to_bin(10),但这个结果是个字符串为"10",变为10,要用函数evaluate(),即evaluate(conv_dec_to_bin(10))他的结果为数字10.
2015年07月23日 02点07分
set_array_elem(y ,xi, xx)这个是向变量y的xi位置存储xx,当xi为纯数字时y为一维数组即向y的第xi列存入数值xx。当xi为向量[a,b]时,即是向y的第a+1行b+1列存入xx。
2015年07月23日 02点07分
你的这个程序代码好像是想把7个十进制数字转化成二进制数字并显示出来,代码可以修改成如第7楼所示的代码,具体请看第10楼
2015年07月23日 02点07分
level 1
楼主大概说的是,为什么结果是
x[0]=["1", "0"]
[1, 2]
x[1]=["1", "0", "1"]
[2, 3]
x[2]=["1", "1", "1"]
[3, 3]
x[3]=["1", "1"]
[4, 3]
x[4]=["1", "0", "1", "0"]
[5, 4]
x[5]=["1", "0", "0"]
[6, 4]
x[6]=["1", "1", "0", "1"]
[7, 4]
这里的1,2,3,4,5,6,7是如何来的。
请不要忘了哦,在程序完成之后,x是一个7*4的二维数组。7表示有7行,4表示最长的一行有4列。,并且,随着循环的进行,x的尺寸在不断增加,,所以会从[1,2]变化到[7,4]。
另外,set_array_elem在1.7中会有改变,请楼主用它的返回值重新设定数组,比如建议将
set_array_elem(y ,xi, conv_dec_to_bin(a[xi]) )
改为
y = set_array_elem(y ,xi, conv_dec_to_bin(a[xi]) )
2015年07月23日 02点07分 9
level 7
以下为修改后的程序代码经亲测可正常运行结果均正确无误请参考,如有问题可继续提出
Function erjin()
variable j,k,xi ,y,x ,a=[2, 5, 7, 3, 10, 4, 13]
for xi=0 to 6
set_array_elem(y ,xi, conv_dec_to_bin(a[xi]))//把每次转化成的二进制结果存入y
print("y["+xi+"]="+evaluate(y[xi])+"\n")//把每次转化成的二进制结果转化成数值并显示
next
print("y的最终结果为"+y+"\n")
x=size(y)//计算y的尺度
print("y的最终尺度为"+x[0]+"\n")
endf
2015年07月23日 02点07分 10
level 7
运行结果如图
2015年07月23日 02点07分 11
@编程000:再麻烦您讲讲如何把y里各个二进制数单独保存?即分为一个一个的?
2015年07月23日 09点07分
level 6
花神落CL 楼主
多谢各位的耐心帮助!教懂一个小白很费劲的。
2015年07月23日 04点07分 12
level 6
花神落CL 楼主
@编程000:再麻烦您讲讲如何把y里各个二进制数单独保存?即分为一个一个的?
2015年07月23日 09点07分 13
level 7
各个二进制数单独保存,没听懂这个是什么意思,y里面总共7个数据,你要向使用里面的其中一个数据直接用y[xi]即可,比如要用二进制的1101,那他他的变量名字就是y[6],即y[6]的值就是1101
2015年07月23日 10点07分 14
这段代码不能运行,可编程科学计算器停止响应: Function erjin1() variable j,k,xi,yi ,y,x, z ,a=[2, 5, 7, 3, 10, 4, 13] for xi=0 to 6 y=set_array_elem(y ,xi, conv_dec_to_bin(a[xi]) ) next yi = size(y) k=yi[0] print( "\n"+k ) for j=1 to j=6 z=evaluate(y[j ]) next endf
2015年07月23日 22点07分
各个二进制数单独保存的意思是,每个二进制数用一个不属于y的单独变量,而不是作为y的一个元素。
2015年07月23日 22点07分
for j=1 to j=6这个地方出问题了,造成死循环,程序无休止的执行下去最后导致软件崩溃停止。改为 for j=0 to 6即可。因为你那个是7个数字数组的位置默认是从0开始的。
2015年07月23日 23点07分
我的目的是把一个十进制数,写成2的幂的和的形式,如果你有时间,你来写一个?
2015年07月23日 23点07分
level 7
function dtob()
do
variable a,b=[0],c=0,d,e,f,aa
a=input("输入一个大于0的正整数=")
aa=a
if a>=0
do
d=mod(a,2)
set_array_elem(b,c,to_string(d))
c=c+1
a=a/2
until and(a>0,a<1)
f=size(b)
f=f[0]
variable g=[0]
variable h=0
for variable j=f-1 to 0 step -1
set_array_elem(g,h,b[j])
h=h+1
next
variable kkk=g[0]
for variable jjj=1 to f-1
kkk=kkk+g[jjj]
next
print(aa+"的二进制结果="+kkk+"\n")
variable kk,k=0
for variable jj=0 to f-1
k="+"+b[jj]+"*2^"+jj
kk=kk+k
next
print("指数形式为"+kk+"\n")
endif
variable z=input("输入1继续计算其他数据,≠1结束计算="+"\n")
until or(z<1,z>1)
endf
2015年07月24日 02点07分 15
编程000,真心赞一个。
2015年07月24日 02点07分
真厉害,谢谢!
2015年07月24日 02点07分
@woshiwppaa [哈哈]谢谢,你编写的这个计算器真好用[真棒]
2015年07月24日 03点07分
@花神落CL 不客气[哈哈],这个指数形式是字符串形式不能参与运算的。
2015年07月24日 03点07分
level 7
可以在修改一下:
function dtob()
do
variable a,b=[0],c=0,d,e,f,aa
a=input("输入一个大于0的正整数=")
aa=a
if a>=0
do
d=mod(a,2)
set_array_elem(b,c,to_string(d))
c=c+1
a=a/2
until and(a>0,a<1)
f=size(b)
f=f[0]
variable g=[0]
variable h=0
for variable j=f-1 to 0 step -1
set_array_elem(g,h,b[j])
h=h+1
next
variable kkk=g[0]
for variable jjj=1 to f-1
kkk=kkk+g[jjj]
next
kkk=evaluate(kkk)
print(aa+"的二进制结果="+kkk+"\n")
variable kk,k=b[0]+"*2^"+0
for variable jj=1 to f-1
kk="+"+b[jj]+"*2^"+jj
k=k+kk
next
print("写成指数形式为"+aa+"="+k+"\n")
endif
variable z=input("输入1继续计算其他数据,≠1结束结算=")
print("------------------------------"+"\n")
until or(z<1,z>1)
print("计算结束"+"\n")
endf
2015年07月24日 07点07分 19
1