hp39gs吧 关注:898贴子:3,326

HP39gs 从入门到精通(完全教程)

只看楼主收藏回复

本帖旨在帮助对HP39gs使用存在疑惑的同学们, 楼主还是学生党, 计划一周更新一次,所以欢迎大家跟帖补充。


IP属地:福建1楼2017-05-03 22:15回复
    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的规格,不包括上方状态条。
    OKEY,以上就是在下一晚上的工作成果, 2017年五月六号在下将带来入门级的Part 2——基本操作,敬请期待!
    柜里猫
    2017年5月4日01:05:46


    IP属地:福建2楼2017-05-04 01:03
    收起回复
      刘明


      IP属地:北京来自Android客户端3楼2017-05-05 06:34
      收起回复
        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个表单形成的表达式的外面加上大括号。
        储用:同上。
        基本操作到这算完了,编写小文大约用了6个小时,在下一边实验一边争取给出精确回答。按惯例(也没形成几天),新的内容Part 3将在2017年5月13日星期六继续发布,感谢关注!
        还有, 因为在下个人的怠惰,导致Part 2发布超时将近4小时30分钟,在此衷心抱歉!
        柜里猫
        2017年5月7日04:28:28


        IP属地:福建4楼2017-05-07 04:26
        收起回复
          顶一个


          IP属地:北京来自Android客户端6楼2017-05-07 22:11
          回复
            支持了!


            IP属地:江苏来自手机贴吧7楼2017-05-10 15:14
            回复
              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开头的排序方法是降序。
              常用的应用到这就讲完了,在下个人觉得写得比较少,遗漏的点很多,有讲得不通之处, 欢迎各位指出。
              还有一件事,有个叫6666辛苦吧的家伙在各个吧里大发水贴,发过的78个贴基本都是水贴,最近竟然发到hp39gs吧里了,希望大家一起抵制这种行为,还网友们一个干净的讨论空间。
              证据如下:

              柜里猫
              2017年5月14日13:52:21


              IP属地:福建9楼2017-05-14 13:55
              收起回复
                支持


                IP属地:山东10楼2017-05-17 18:52
                回复
                  这几周发帖晚了,非常抱歉。上周没有把稿子写完,觉得将就着发非常影响质量,就没有发帖,但是最后又忘记过来解释一番,真是非常惭愧。不过,今天在下将补回之前的工作,带来这一期的part 4。


                  IP属地:福建11楼2017-05-28 19:21
                  回复
                    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 ":
                    2017年5月29日00:18:06
                    柜里猫


                    IP属地:福建12楼2017-05-29 00:16
                    收起回复
                      新的part4已经发表了,但是因为篇末写了三个例程,大量的代码导致帖子被系统删除了。申诉业已提出,两三天内应该就能恢复,到时还请各位观赏。part4是关于提示语句prompt的,可以说是编程的第一步,接下来的事情就将变得有趣了。
                      还有,小升初考试将近,在下要花较长时间备考,后面的帖子最迟可能会拖延到暑假,发帖有不准时处,请多多见谅。


                      IP属地:福建14楼2017-05-29 20:08
                      收起回复
                        支持楼主的教程


                        IP属地:陕西来自Android客户端18楼2017-06-03 08:40
                        回复
                          楼主加油!


                          IP属地:安徽来自Android客户端19楼2017-06-12 23:54
                          回复
                            支持


                            IP属地:江苏20楼2017-07-05 19:47
                            回复
                              **……现在的小学生


                              IP属地:山西来自Android客户端21楼2017-07-12 17:11
                              回复