cnCalc计算器论坛 [原fx-es(ms)论坛]

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 304|回复: 37

[聊天] 测量计算器哪家强?(先挖坑,慢慢填)

 关闭 [复制链接]
发表于 2017-10-6 19:21:36 | 显示全部楼层 |阅读模式
本帖最后由 randomzoom 于 2017-10-11 19:37 编辑

数独源程序tns--22楼
============================================================
由于手机和电脑的普及,计算器的刚性需求是越来越小,但是,在测量领域,计算器是必不可少的。想想一对基友在野外漫山遍野捉迷藏,一个举着杆子说,我在这里,另外一个扛着笨重的全站仪,到处搜对友,可能还要对着对讲机喊前进x米,后退x米,是不愿意抗电脑的。手机,电力成大问题。输入也慢,大太阳下,能看清楚屏幕才怪。所以一款顺手高效高能的计算器必不可少。

如何选择计算器,先来个应用场景分析:
1. 由于太阳暴晒,电力续航原因,彩屏计算器可以出局了。
2. 负重和便携原因,大体积大砖头出局,如TI-92,TI-Voyage 200。
3. 功能不能太弱,函数机出局,至少要是编程机。

那么剩下的就屈指可数了:
TI:84系列,89系列,nSpire(非彩屏);
Casio:58系列,98系列;
HP:39系列,49系列,FD10;
其他的有sharp,好像没有新出机。全是10多年前古董9400,9600,9900,出局。
不过,本文也不限于上述机器,尽可能收集公开的数据。涉及的计算器有:
TI 84 89 92 voyage 200 NSpire CX
CASIO fx 9860 5800 FD10 CG10 CG20
HP HP39G HP49G HP50G  Prime




 楼主| 发表于 2017-10-6 21:19:15 | 显示全部楼层
本帖最后由 randomzoom 于 2017-10-10 18:51 编辑

先来一个不完整的配置参数对比吧。所有参数均从网上及说明书中获取,不完整,也不保证准确。此参数仅供参考,本人对阅读此帖所产生的任何直接或间接的影响(收益或损失)不负任何责任。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 0 反对 3

使用道具 举报

发表于 2017-10-6 21:36:17 | 显示全部楼层
本帖最后由 電卓院亜紀良 于 2017-10-11 20:06 编辑

这位大佬从哪找的这些参数?彭定康说的?光这几个乱七八糟的参数不行啊,你得把列表里面的机子先摆出来让我等瞧瞧,然后都测试一遍




最近哪来这么多大佬,摸过两台破烂机器就敢来写文献综述了?

先提前剧透一下:

(1)楼主大佬的数据来源和参数对比没有统一标准,比较毫无依据,甚至胡编乱造,极其不可靠。以“测量计算器对比”为名,实际上通过机身自带的“编程语言”和“运行内存”等片面来贬低CASIO、HP等品牌计算器,把自己乱七八糟的见解作为“知识”向别人普及,将不同定位、不同领域的计算器放在一起胡乱比较。我们可以欣赏一下这位楼主的发言:








(2)机器之间比较极其狭隘,用词尖酸刻薄,语言阴阳怪气。有些名词故意更换字眼来表达贬低的意思。楼主大佬的意思大概就是“先有测量后有机”的这种,一大堆错别字连篇的文字就是传达楼主“计算器就是专门做测量用的”这种理论。除开历史上Pocket Computer以及fx-FD10 Pro之外,根本没有所谓的“测量计算器”,只是把计算器应用在测量领域而已。只做狭隘的编程语句对比,对各家公司的计算器产品性能和功能只知道一点皮毛仅凭手头的几台过时的停产计算器评判整个现代图形计算器产品系列的优劣好坏,完全没有使用过其他产品却胡言乱语误导大众。测量人员更需要能直接上手的机器与程序,哪些品牌的哪些产品适合工程测量方面,除了各位老用户的口碑,各公司中国官网也都明确标注,自然不需要楼主这么费力地“对比”。
顺便问楼主大佬,什么测量这么高端,还需要解数独?
楼主大佬批判起来三句不离“一坨屎”,您摸过几台?

(3)不难看出楼主大佬个人十分喜爱68k与Nspire系的机器【的编程功能】,而且喜欢得优越感爆棚,天下无敌的样子。引用名言一句:“对计算器的优劣的讨论请力求客观。我们不欢迎这种无端的贬低。”如果没办法做到客观,那就自己留着高兴就好。不然就和这个帖子一样:https://www.cncalc.org/thread-3740-1-11.html



以上是楼主大佬要的正气,看着办吧。






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2017-10-6 21:48:37 | 显示全部楼层
本帖最后由 randomzoom 于 2017-10-6 22:00 编辑

为什么HP的为HP Basic,TI的为TI Basic,而casio的却称为类basic指令呢,
因为9860,5800都用了一些奇特的指令,如:
?→A,输入A的数值
A⊿,输出A的数值
⇒,条件转移
Dsz,Isz,Rel,不知道什么意思。
这些东西在basic,或者hp,ti basic里没有此类指令。
其他的一些命令如:if/else,for/to/next,while......和basic类似,所以称为类basic指令。
编程上,basic和pascal差不多的。但是HP的RPL Lisp就完全是另外一种风格。
RPL要时刻惦记着堆栈,递归,比较的锻炼大脑,提升智力。
basic/pascal主要关注数据之间的逻辑关系。是面向抽象实际世界的。


 楼主| 发表于 2017-10-6 21:51:13 | 显示全部楼层
電卓院亜紀良 发表于 2017-10-6 21:36
这位大佬从哪找的这些参数?彭定康说的?光这几个参数不行啊,你得把列表里面的机子摆出来让我等瞧瞧,然后 ...

谢谢关注,欢迎你发表正气。
 楼主| 发表于 2017-10-6 22:21:52 | 显示全部楼层
本帖最后由 randomzoom 于 2017-10-6 22:23 编辑

欢迎大家参与评比哪家强,不限于我所列的型号。但必须是计算器,拿个手机就没意思了。
大家可以自己在计算器上编个8皇后或者解数独程序,特别是解数独很有用,随时随地破数独。
8皇后我已经用V200做了两个类型的。正在考虑高效简洁的第三类。
看大家能不能用自己心爱的计算器编出来,算法可以网上搜。
回复 支持 0 反对 2

使用道具 举报

发表于 2017-10-6 23:00:08 | 显示全部楼层
randomzoom 发表于 2017-10-6 22:21
欢迎大家参与评比哪家强,不限于我所列的型号。但必须是计算器,拿个手机就没意思了。
大家可以自己在计算 ...

问一下楼主有nspire的解数独的程序吗?
 楼主| 发表于 2017-10-6 23:17:59 | 显示全部楼层
王大锤 发表于 2017-10-6 23:00
问一下楼主有nspire的解数独的程序吗?

编过python的,正准备编TI-basic。
电脑上可以随便挥霍数组,计算器上就不能这么玩了。等我想一段时间吧。
 楼主| 发表于 2017-10-7 01:03:16 | 显示全部楼层
本帖最后由 randomzoom 于 2017-10-7 01:05 编辑

高端对垒

我想说,日本人真的很工于算计,在那么可怜的内存下也能做出可用的计算器。大家都应该学习CASIO这种节省的精神。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 0 反对 2

使用道具 举报

发表于 2017-10-7 10:26:49 | 显示全部楼层
王大锤 发表于 2017-10-6 23:00
问一下楼主有nspire的解数独的程序吗?

分分钟做出来但是我觉得可以跑一辈子[滑稽]
发表于 2017-10-7 20:30:27 | 显示全部楼层
zqqyyy 发表于 2017-10-7 10:26
分分钟做出来但是我觉得可以跑一辈子[滑稽]

哈哈
 楼主| 发表于 2017-10-8 18:15:20 | 显示全部楼层
我正在编NSpire版数独,程序不难,调试难。
总是遇到一些莫名其妙的语法错误,习惯问题,我不怎么看手册,基本上是想用什么函数就看看有没有,然后凭直觉使用。
还有一些特殊的传值方式,总是不自觉地使用X=1这种电脑方式,忘掉-〉或者输入时1:=x,应该是1=:x。
说说麻烦的地方,电脑可以用三维数组,计算器不行,即矩阵的每个元素存一个列表。我就用10位二进制。每个bit位代表这个格子可不可以填相应的数据。
所以就是8*8个10bit。
0b1111010110即表示,不可以取3,5,或者相反,可以取3,5。0,1的含义根据操作便利来规定。
之所以用10位,多一位,是为了操作便利。2^5 or 2^8可以表示操作第2、5位。用9位还要+-,麻烦。
候选举阵就这样:[[0b1010,0b1000101100,......],[...],...[...]] 9*9*10bit
逐位操作用 and,or,xor很方便。
 楼主| 发表于 2017-10-8 18:17:57 | 显示全部楼层
我邀请CASIO,HP也来编一个,或者其他的题目。
如果HP50g用rpl能做出来,我就膜拜了。
 楼主| 发表于 2017-10-8 18:23:59 | 显示全部楼层
三维数组也可以用二维数组来解决
9*9*9==>81*9,操作稍微不那么好看。
如操作z[7][5]==>z[7*9+5]
 楼主| 发表于 2017-10-9 17:58:22 | 显示全部楼层
本帖最后由 randomzoom 于 2017-10-9 18:01 编辑

数独做出来了,献上源程序。
电脑版NSpire 3.9,稍后会上tns。
主程序(入口)
Define shudu(str)=
Prgm
:Local h,i,j,k,l,p,q,mat,ex,rang,flag,depth
:m:="709080300
000002050
002000490
095000000
300090700
000030040
040100000
003500000
800609010"
:©default matrix for test
:If dim(str)≥89 Then © use out data
:str→m
:EndIf
:zoom:=newMat(9,9)
:initmat(m)→mat ©initial data for matrix
:Disp "Origin matrix":Disp mat
:fillmat(mat)→mat ©Fill grid with only 1 digit
:checkmat(mat)→status
:If status=1 Then
: Disp "Filled matrix"
: Disp mat
: Stop
:EndIf
:1→depth
:trymat(mat,depth)→mat  © try by force
:Disp "Final matrix":Disp mat
:EndPrgm
 楼主| 发表于 2017-10-9 18:06:57 | 显示全部楼层
按照调用顺序,主程序调用的函数

将字符串填入数独矩阵。
当然可以直接用矩阵,我个人觉得输入矩阵比较麻烦。

原始数据的输入是一个长全部给定残数独的数字,逐行输入,空格用0。用任意字符包括回车分隔行,非数字自动忽略。
Define initmat(m)=
Func
:Local i,j,k,p,q,mat
:newMat(9,9)→mat
:0→q
:For p,1,dim(m)
:  k:=mid(m,p,1)
:    If k≥"0" and k≤"9" Then
:        q+1→q
:        iPart(((q-1)/(9)))+1→i
:            mod(q-1,9)+1→j
:                expr(k)→mat[i,j]
:                    EndIf
:                EndFor
:Return mat
:EndFunc

 楼主| 发表于 2017-10-9 18:12:23 | 显示全部楼层
根据已有数据来回搜寻唯一可填的格子,然后填充,每填一个数,将打开下一轮的开关。
while循环是一轮81格扫描。其实可以提高效率的。但是在nspire上也就半分钟时间,暂时不弄了。
Define fillmat(mat)=
Func
:©fill grid with only 1 digit
:Local flag,i,j,ex,rang
:1→flag ©开启while循环
:While flag>0
:0→flag ©关闭while循环
:For i,1,9
:For j,1,9
:If mat[i,j]=0 Then
:exzoom(mat,i,j)→ex
:bits2list(ex)→rang
:If dim(rang)=1 Then
:1→flag ©开启while循环
:rang[1]→mat[i,j]
:Else
:©ex→zoom[i,j]
:1
:EndIf
:EndIf
:EndFor
:EndFor
:EndWhile
:Return mat
:EndFunc
 楼主| 发表于 2017-10-9 18:18:20 | 显示全部楼层
本帖最后由 randomzoom 于 2017-10-9 18:19 编辑

排斥范围:对每个空格用排斥法得到一个10二进制。
使用二进制,是为了方便用矩阵记录可选/排斥数字,or,and很方便,无需用笨拙的if判断
可选、排斥的转换也方便。
Define exzoom(mat,i,j)=
Func
:Local k,p,q,u,v,zoom
:©i=1,2,3,4,...,..9
:©p=0,0,0,3,...,..6
:©q=0,0,0,3,...,..6
:p:=3*iPart(((i-1)/(3)))
:q:=3*iPart(((j-1)/(3)))
:0→zoom
:For k,1,9
:©k=1,2,3,4,...,..9
:©u=1,1,1,2,...,..3
:©v=1,2,3,1,...,..3
:u:=iPart(((k-1)/(3)))+1
:v:=mod(k-1,3)+1
:zoom or 2^(mat[i,k]) or 2^(mat[k,j])→zoom©行,列
:zoom or 2^(mat[p+u,q+v])→zoom  ©3*3小方格
:EndFor
:Return zoom
:EndFunc
 楼主| 发表于 2017-10-9 18:21:37 | 显示全部楼层
二进制解码。提取10位二进制各位代表的数字,存入一个数列{}。{}元素个数是实际个数。
Define bits2list(bits)=
Func
:Local i,n,t,list
:{}→list
:0→n
:For i,1,9
:t:=((2^(i) and bits)/(2^(i)))
:If t≠1 Then
:n+1→n
:i→list[n]
:EndIf
:EndFor
:Return list
:EndFunc
 楼主| 发表于 2017-10-9 18:32:22 | 显示全部楼层
好了,上边的表示能填的唯一数已经填入了,在此程序仅能使用行、列、块,各种神奇的技能不会,程序表示,也不屑用旁门左技。天下难题,唯快可破,那些块块行行列列的技巧是慢速人脑采用的。电脑可以一个一个的尝试,错了没关系,试下一个。

尝试分两步,第一步,寻找可选数最少的格子测试。2选1毕竟比3选1快。虽然电脑快,但能简单提高效率的还是提一提。那些块块行行列列的设计起来太麻烦,人脑毕竟能一眼看出来。电脑要不停循环扫描。

Define trymat(mat,depth)=
Func
:Local h,i,j,im,jm,ex,rang,minzoom,status,mat0
:©Find min range grid
:9→minzoom
:0→im:0→jm
:For i,1,9
:For j,1,9
:If mat[i,j]=0 Then
:  bits2list(exzoom(mat,i,j))→rang
:  If dim(rang)<minzoom Then
:    dim(rang)→minzoom
:    i→im:    j→jm
:    If minzoom=2 Then
:      Exit
:    EndIf
:  EndIf
:  If minzoom=2 Then
:    Exit
:  EndIf
:EndIf
:EndFor
:EndFor
:©©©©©©©©©©©©©©
:©©Test at min range©©
:bits2list(exzoom(mat,im,jm))→rang
:For h,1,dim(rang)
:mat→mat0  ©save orginal
:©Disp im*10000+jm*100+h
:rang[h]→mat[im,jm]
:fillmat(mat)→mat
:checkmat(mat)→status
:If status=1 Then ©1-- finished
:  Return mat
:ElseIf status=0 Then ©0--un finished
:  trymat(mat,depth+1)→mat
:  checkmat(mat)→status
:  If status=1 Then  ©1-- finished
:    Return mat
:  EndIf
:EndIf
:mat0→mat ©restore orginal
:EndFor
:If depth=1 Then
: Disp "error input data"
:EndIf
:Return mat
:EndFunc
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|Archiver|手机版|cnCalc计算器论坛  

GMT+8, 2017-10-21 03:42 , Processed in 0.027176 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表