|
楼主 |
发表于 2017-5-29 20:19:58
|
显示全部楼层
part 1 第一部分 外形与配置
一. CPU
HP39gs的cpu采用了Samsung公司基于ARM公司的ARM920T处理器核设计的S3C2410处理器(某基百科),网上也有说使用48MHz的"ARM9"处理器的(某度)(两种意见姑且用作参考), 但是HP39gs运行于虚拟机环境下,整体效率是低于9860、TI86, 甚至5800p的。不过,作为一部成本至多40元的图形计算器, 能做到目前的速度也是不容易了。(在下是花50块软妹币(RMB)买到的,品质优良)
二. 内存
HP39gs的固件(可擦写只读存储)保存在sst公司出品的MPF Flash闪存器件中, 而用户数据则保存在一块SRAM芯片里, 根据SRAM的设计特性, 一旦断电, 用户数据将丢失。
实际可用内存为200kb, 是商家宣传的4/5。
三. 键位
HP39gs的键位设计采用与科学计算器截然不同的按键布局(其他图形计算器大概也一样), 惯用科学计算器的同学们初入手时可能会非常不习惯,特别需要指出, HP39gs的同一个按键的“shift”功能与“alpha”功能一个处于上方,一个处于下方, 非常反人类,只能慢慢去习惯了。
HP39gs的按键除了“on”与上下左右键之外,全部向外倾斜大约15度, 而且手感较硬,有种似胶非胶的触感, 用久了手会有些酸,但是比起软绵绵的科学计算器来非常有质感。
有些习惯上的不同, 在这稍微解释一下:
1.四则运算
+ - * / 四个键都位于右手边, 以 / * + -的顺序依次排下来。
2.三角函数
sin cos tan 位于从下往上数第六行,可用shift功能召唤反三角函数。
3.对数
三角函数的左边。(log默认以10为底数,具体运算可用对数的运算法则来达到目的)
4.指数
三角函数的正下方, 即第五行处。
5.负号
“2”的正下方(不会有人找不到负号吧?)
6.shift功能与alpha功能
看见键盘上的蓝色小字和黑色小字了吗?先按一下shift或alpha(可放开),然后再按相应的按键就可以了。
(黑字对应黑字底下的键,蓝字对应蓝字上面的键)
7.几个看似深奥的功能键
首先是最上方的小紫键,一共六个, 开机时对应屏幕最下方的六个黑方块,在不同的界面发挥不同的作用。如主界面出现的sto>意为将内容存入某处(这个“某处”由">"后的变量名决定),而program界面的这个位置则显示了Edit, 即打开并编辑。简而言之,屏幕上写了什么,小紫键就代表什么。
其次是下面最怪的六个键
“symb”是symbol的缩写,一般用于打开当前程序的表达式输入界面,如在function中输入函数表达式。
“plot”意即绘图, 在绝大多数程序中用于打开坐标系进行绘图(需先输入表达式)
“num”即number的缩写, 可以显示有关数值的内容。
“home”是回到主界面,好多人不会这一招就到处按,弄到找不到主界面,关机了又打开还不是主界面,急得满地打滚。
“aplet”是应用程序的意思, 你可以在这找到更多功能。
“views”意即视图,没有卵用。
四. 接口
HP39gs采用五针USB接口,另带10101COM通信接口(用于计算器间共享数据,但是基本买不到连接线了),
可以用充电宝或者充电器供电(只要有带USB输出口),个人建议用一个充电宝供电(电池很贵,当然土豪随意)
五.电源
电池用7号,四节, memory backup的电池要用2032的3V纽扣电池(电池牌子无所谓,稳定就可以)
推荐使用外接电源,HP39gs是如假包换的电老虎,两周换一次电池不是梦想。
还有一件事,有时候会出现外接电源后Memory clear的现象,不是记忆卡坏了(真坏了断电几小时一般又会好过来), 就是充电宝用了什么闪充,最好试试别的充电宝。
六.屏
HP39gs的屏幕使用131*64的规格,不包括上方状态条。
Part 2 第二部分 基本操作
一. 开关机
HP39gs的用户大多使用过科学计算器, 刚使用图形计算器时会习惯性地想按右上角的那个键来开机,结果开不了,急得满地打滚,关机也是类似情况。不过过了一会自己都觉得好笑,“on”被藏在了左下角。关机则需要先按shift,再按on。
二. 模式调节
终于进到梦寐以求的主界面了,小试一下计算器的能力吧。出来的都什么东西?
和自己想的完全不一样。
上面的计算都是对的, 只是计算模式不是自己以为的那种而已。要得到预期的结果,首先要把计算模式调到自己预期的样子。home键的shift功能就是角度单位、结果格式和小数点格式的调节。如图所示:
最常用的角度单位是Degrees角度制, 上了高中的同学可能会更多地用到Radians弧度制。
按下CHOOS对应的小紫键, 选择需要的单位制即可。对于number format和decimal mark也是一样的。
number format的情况有些复杂,在此长话短说(chen ji tou lan)
1.fixed
输出可自定精度的小数(唯一能让计算结果总是不省略小数点前的0的格式)
后面的数值即为精度, 可以用Edit直接输入,也可以用CHOOS选择。
2.Scientific
科学记数法。输出标准的科学记数法格式。数值是保留的小数数位。
3.Engineering
工程单位制。输出以E3*n(10的3*n次方,其中n为整数)结尾的工程单位制格式。
4.fraction
不少人梦寐以求的分数格式,数值是表示分母的数字个数加分子的数字个数的大概数值,不好控制,而且加上根号候情况更加复杂,这也是HP39gs的局限所在。
5.mixed fraction
混合分数制。把结果表示为一个整数加一个真分数的格式。受限于fraction的不精确性,mixed fraction同样不好用。
6.standard
计算器的标准输出。
三.输入输出规则
1.线性输入
HP39gs使用的是看似落后的线性输入,对比于自然输入非常的反人类。主要原因在于,HP39gs使用的编辑栏是一个名叫Editline的特殊程序,既然是程序, 那么就有程序的局限性。 首先,任何的输入都是在写程序,所以只能像写文本文件一样线性地写入表达式;其次,因为是在写程序, 所以输入的表达式被叫做源代码, 在计算前要先经过编译,这也造成了HP39gs计算缓慢的假象。不过,编译过一次的程序再次运行就无需再次编译了,速度会快上至少四分之一秒,即使是对简单的加减法也是如此。
同样的,程序也有程序的优势,那就是可以输入极长的表达式,只要结果控制在9.9E499之内,理论上可以输入无限长的表达式(当然,只是理论上,实际还受到编译及计算速度和内存的限制,一条1.5kb的表达式(1*1*1……)就花去了50秒编译及运行,编译后占了5.2KB空间。)(没控制结果大小的话会用英文提示语法错误)
还有,既然是程序,那么就可以直接输入代码(输进去就可以运行了)。具体的实现我会在后面的某个讲解中写出。
线性输入的诀窍在于:多尝试和多使用括号。有不清楚之处既可通过尝试来确定运算规则, 也可使用括号来人为规定运算优先级。
还有一件事, 如果对任何运算符(如级数求和∑),那么可以调用“2”的shift功能SYNTAX。在编辑栏中输入按下shift后按“2”出现的HELPWITH 加上不了解的运算符(不要带其他符号!如输入 “HELPWITH ∑(” 就会被提示语法错误)
2.显示规则
与输入相称,显示也是线性的。不过,按下Enter后出现了不同的情况:
表达式是随意写的,重点在下面:
按下show后:
显示出了比弱智的线性输入复杂得多的自然输入。可以用它来判断自己的意图是否被计算器正确理解。
3.编辑文本文件
澄清一点,在HP39gs中,所有存在输入条件的操作均为编辑文本文件。
用“0”的shift功能可以打开notepad记事本功能, 一般第一次打开会发现里面空无一物,就像打开一个空文件夹。
按下NEW来新建一个文件(一旦新建,文件名就无法更改) ,命名后会自动跳转到编辑界面。
键“A-Z"可以切换到字母输入模式,这样就不用反复按alpha键了。
vars的shift功能 “chars” 可以
键盘上的del键默认删除光标指向的后方字符, 而虚拟键BKSP则是删除前一个,与电脑键盘的设置是一样的。(很奇怪吧,我们一直说着“删除”(delete)却一直用着相反的“退格”(backspace))
要是整篇都不要了,可以调用del的shift功能“clear”,确认后就可以删除全文。
还有一个特殊方法,最好只在紧急情况下使用。如果手滑(shoujian)误删了需要的数据,又没有备份的话,请在0.2秒内把电源切断,使计算器来不及存档就关机,有一定几率能挽回数据(只能说有几率)。
vars里提供了拷贝(复制粘贴)的功能,在左边的菜单里找到notepad,移到右边选中需要的文件,切换到value模式(这步比较重要,最好先做), 按ok或enter均可,就复制到当前输入环境下了(编辑文本、写程序、输入数值等等,只要有输入条件存在,都可以用)。写大且有重复性的文件时,适宜用这种方法。
4.读写变量、表单、矩阵、图像
(1)变量
HP39gs提供27个方便存储使用的变量,包括26个大写字母和角变量θ。
存储:可以使用sto将数值输入变量中,这也是最简单的方法。也可以在for循环中用赋值符 “=” 来直接赋值
如果要在程序中给变量赋值的话,可以使用prompt语句(比如prompt A)。
使用:直接把变量当常数用就可以了(比如当A = 1时,A+1和1+1是等效的)。
(2)表单
HP39gs提供10个表变量(每个都有任意大),编号为L1,L2…L0.
在表单中写内容时,要用诸如【1,3,5,7,9】的形式来表示这是一个表(否则会英语提示类型错误)
sto同样可以用于表的写入。
除此之外,prompt语句也可用于写表。无论如何,格式一定要严谨。
使用:同上
(4)矩阵
矩阵类似于表单,要在用n - 1个“,”隔开的n个表单形成的表达式的外面加上大括号。
储用:同上。
Part 3. 应用简易入门
引言
所谓简易,是相对以后将要陆续发出的应用精通部分而言的, 比起前两个部分会简单肤浅一些,请需要详细用法的同学们直接询问或者耐心等待后继的部分。
一.function
各界面介绍
(1).symb
symb是symbol的简称,意为标志,打开后是键入表达式的界面。
在这个界面中, 最多可以输入10个表达式。表达式的输入使用Editline程序(即输入栏), 既可以按Edit来唤出输入栏, 也可以直接输入(输入栏会自己跳出来)。
eval键是evaluate的缩写, 可以把表达式简单化简(把12*3化简成36之类的)
(2).plot
这里是图形计算器名字的来源:图形绘制界面。在symb输入的表达式会在这里进行绘制。
zoom是用来调整图形缩放比的菜单。
zoom中的box是选定一个矩形区域进行绘制。
zoom中的in和out是放大和缩小绘制区域的大小。
zoom中的decimal是选用浮点数作为单位长度, 可以用来快速回到默认的缩放比。
un-zoom则是取消之前的zoom指令。
trace是让光标始终跟随图像。
goto是让光标跳到指定的x坐标处。
fcn里有求根、求交点等等功能。
(3).num
这里只与数值有关, 有多排数值,第一排是x值,其余的是对应的y值。
zoom的用法与plot中类似。
big是用大字体。
可以通过输入栏跳到指定的x值。
二.slove
1.各界面介绍
(1).symb
同于function
(2).plot
zoom同于function
goto同于function
menu同于function
由于重点在num上,所以fcn等功能都被省略了。
(3).num
在此只介绍info和slove
slove可以解出与当前x值最接近的解, 所以要得出全部解就需要手动调节x值。双击slove可以看到解析过程。
info可以显示解的情况, 看出是交点解还是极值解。(没有交点时会给出极值解,如x平方等于-1会给出x=0)
2. 计算方式
计算方式一目了然, 采用的是二分逼近和取大约值的方法。
三.liner slover
1.界面
线性解算器只有一个界面, 有2*2和3*3两个模式。
2.计算方式
公式法。把输入数据代入公式中,得出结果。
四.polar
极坐标,似于function。
五.triangle slove
三角解算器。同样,只有一个界面,使用公式法。解出的条件有:角边角、角角边、边角边。
六.statistics
统计。在此只讲解num界面。
输入同于function的num界面。
ins是在数列的末尾插入一个0。
sort可以对选中的数列进行排序。A开头的排序方法是升序,D开头的排序方法是降序。
part 4 提示语句 (prompt)
引言-----
图形计算器的一个重要功能就是编程,可以说,图形计算器几乎一切的主要功能都是通过编程实现的。图形计算器的编程能力来自较大的内存和附带的编译能力。
对于编程界的新手和不熟悉HP-BASIC的玩家来说, 最好的入门方法就是学习prompt。prompt语句可以实现人机之间比较密切的交互,编的好的话会很有趣味性。
对于想要成为编程界的大牛的同学来说,有一条必须遵循的定律:多练习。对于任何语言,这条定律都成立。每个
大牛都是从反复磨练中成长起来的。所以,保持谦逊,遇见不会的知识就多学多练吧。在下也不过是一个略微有心的初学者,离真正的大牛还差很远很远。
好了,接下来是正文。
1.beep语句
HP39gs自带了一个蜂鸣器,可以发出1-15000Hz,时长灵敏度在0.001秒的振动声(不过,到了极限状态下声音会失真,而且有时不能发挥出全部能力)。用来控制这个蜂鸣器的语句就是beep。beep语句的最大用处就是证明计算器不是个哑巴。
beep的用法如下:BEEP x;y: 其中x是指频率,y是指时长。
入门到这就结束了,可以用这个来震惊一下同学。
但是这样只能小小震惊一下,要娱乐自己的话,还需要一点点小技巧。
比如,beep语句也接受变量,可以用诸如A、S、D、F、G、H等等变量(事实上用数组中的变量和矩阵中的变量来控制也是可以的,比如BEEP L1(1);M1(2,3):只要有数据在就可以运行。)(之前没有讲清楚,深感抱歉,表单也可以叫数组,而且数组是我比较习惯的叫法;矩阵和数组中的单元可以分别用Ln(i)和Mn(i,j)来表示,其中n,i和j是大于0的整数,且n,i,j表示的东西要有意义)。
再比如,控制beep语句也可以用循环。好的控制可以在不破坏音韵美的前提下节约大量代码和运行空间。
1000 > i (没有sto键,只好用大于号代替,在计算器上要用sto键。)
while i ≠ 0
BEEP i*10;0.1:
i - 1 > i:
在原理上相当于一段1000行的代码,在用了循环后代码体积小了250倍,如果不用的话是难以想象的。
还有一件事,只写出声的代码会让音乐显得急促,如果不是确实用意的话,要用频率较低的语句隔开来。一般是用频率在50Hz的beep语句,用0Hz不会有效果。)
2.choose语句
choose语句是一个在下尚且不能掌握的语句,在此只能姑且讲讲。
用法比较奇怪: CHOOSE X;“title”;“asdf”;“zxcv”:
x是要读入用户的选择的变量,title是选择窗口的标题, asdf和zxcv则是选项。按照样例,用户选择asdf的话,XX将会为1,选zxcv的话X会为2。
看起来在下好像会一点点,但是这只是表象。实际使用的时候,出现了各种各样的bug。有时候在编译时就报错,原因只是用了一个“暗中不能使用”的变量(语法完全正确,变量也没有问题,但是莫名错误),或者唤出选择框时没有办法选择(跟看MSGBOX一样,浑身难受),要不就是选了之后语句没给变量赋值,如此这般一大堆bug,真正成功的只有两次而已。
3.clrvar 语句
这个比较简单,是用来清空变量的。对于简单的变量可以用直接赋值为0的方法,但是对数组、矩阵就不方便,因为empty是不可以直接赋值进去的。用clrvar可以把单个变量赋值为0,把数组和矩阵赋值为empty,但是不能把数组和矩阵中的变量清空。
4.disp 语句
可以用诸如 DISP n;“asdfzxcv”:的形式在第n行写下“asdfzxcv”。n的范围限制在1-7,小于1的n值会视同于1,大于7的n值会视同于7;。
5.dispxy 语句
可以用 DISPXY x;y;n;“asdfzxc”的形式写在屏幕上,x,y是指坐标,n是放大x,y的倍数。这个语句不太好控制,在下没有在程序中用过。
6.disptime
这是用msgbox的形式显示当前时间。可以用给DATE、TIME变量赋值的方法设置系统时间。
7.editmat
打开编辑矩阵的界面。
8.freeze
暂停计算器的工作,直到有输入为止。
9.getkey
用 GETKEY X:的方法来输入一个键。但是输入的并不是键上写的,而是键位的编号。键位从左上编到右下,越来越大,如左上第一个键为11.1,第二个键为12.1,“7”键为72.1,enter键为15.1 。
10.prompt
这个语句是比较方便的输入语句,用 prompt x:就可以了。但是不能用来输入给数组和矩阵。
系出同源的input也有一样的缺陷。
11.input
input x;“title”;“asdf”;“asdfzxcv”;0;
title是输入界面的标题,asdf是输入框前的提示,asdfzxcv是输入框最下方的提示,0则是默认值(一定要写)。
这是比较个性化的输入方式。
12.msgbox
msgbox “asdfzxcv”:以一个灵活的信息框来显示信息,可以适应不同的文本长度。
13.wait
wait t: t是以秒为单位的时间,计算器将以运行循环的方法来消磨指定的时间,放到频率更高的设备上可能会快到或者慢到令人难以忍受。
提示语句的介绍到这算完了,不过,有几个练习布置给大家,看需要选做吧。
1.娃娃国
这是一段比较长的音频文件,编写尤需耐心。出处是周杰伦的《麦芽糖》(2007世界巡回演唱会)3:01-3:20的一小段。
例程:
FOR B=0 TO 1 STEP 1;
FOR A=0 TO 1 STEP 1;
BEEP 1700;0.1:
BEEP 50;0.1:
BEEP 1700;0.1:
BEEP 50;0.1:
BEEP 1300+1000*A;0.2:
BEEP 50;0.2:
END:
BEEP 2900;0.1:
BEEP 50;0.1:
BEEP 2400;0.1:
BEEP 50;0.1:
BEEP 2000;0.1:
BEEP 50;0.1:
BEEP 2000;0.1:
BEEP 50;0.1:
BEEP 2400;0.4:
BEEP 50;0.3:
BEEP 2300;0.1:
BEEP 50;0.1:
BEEP 2300;0.1:
BEEP 50;.1:
BEEP 2000;.1:
BEEP 50;.1:
BEEP 2000;.1:
BEEP 50;.1:
BEEP 1600;.1:
BEEP 50;.1:
BEEP 1600;.1:
BEEP 50;.1:
BEEP 1400;.2:
BEEP 50;.2:
BEEP 1500;.1:
BEEP 50;.1:
BEEP 1200;.1:
BEEP 50;.1:
BEEP 1700;.1:
BEEP 50;.1:
BEEP 1500;.1: BEEP 50;.1:
BEEP 1600;.4:
BEEP 50;.3:
END:
2.lock
一个锁。要求输入正确的密码。(例程用到了循环,用于防止乱按中意外解锁,但是目前的标准不要求这么严密)
例程:
WHILE 1
REPEAT
MSGBOX "ENTER THE CODE.":
PROMPT K:
IF K==123698745
THEN
BEEP 2500;0.2:
BREAK:
ELSE
BEEP 50;0.2:
MSGBOX "ERROR":
CONTINUE:
END:
END:
THEN
DISP 1;"NO WAY!":
RUN LOCK:
END:
THEN
RUN LOCK:
密码为k的值。
3.time
计算时间的小程序,记录开始的时间,输出经过的时间。
例程(坏了):
MSGBOX "START?":
MSGBOX "PRESS ON TO STOP":
TIME咥:
INT(A)哘:
INT((A-Q)*100)哛:
INT((A-Q-R/100)*10000)哠:
3600*Q+60*R+S咶:
IFERR
WHILE 1
REPEAT INT(TIME)咷:
INT((TIME-G)*100)咹:
INT((TIME-G-H/100)*10000)咺:
3600*(G-Q)+60*(H-R)+I-S哯:
3600*G+60*H+I咵:
DISP 2;Z:
END:
THEN
E-F咼:
MSGBOX
(J-(J MOD 3600))/3600 " h "
((J MOD 3600)-(J MOD 60))/60 " m " (J MOD 3600) MOD 60 " s ":
|
|