cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 40214|回复: 21

hp39gs-入门教程

[复制链接]
发表于 2017-5-29 20:18:58 | 显示全部楼层 |阅读模式
本帖最后由 柜子里的猫 于 2019-11-2 02:53 编辑

本帖旨在帮助对HP39gs使用存在疑惑的同学们,同样的文章也发表在百度贴吧,系同一作者。
在这个论坛上的版本经过略微整理,便于连续阅读。
以及,楼主现在作为一个初中生回来了
以前的话讲得太满,结果写着写着发现自己的知识水平太低了,hold不住
遂改名为入门教程,也向指出我错误却被我忘记的前辈们真切地道歉
(望不要误人子弟才好
 楼主| 发表于 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 ":
 楼主| 发表于 2017-5-29 20:22:41 | 显示全部楼层
图都不见了,一张一张发着实不便,就不显式发出了,请见谅。
 楼主| 发表于 2017-6-6 16:24:58 | 显示全部楼层
本帖最后由 柜子里的猫 于 2018-3-2 23:21 编辑
電卓院亜紀良 发表于 2017-5-29 21:57
资瓷一下。这个内容叫“入门”是没问题的,但是肯定不能叫“精通”。图形计算器要在实际的数学问题中使用才 ...

谢谢你的纠正。
发表于 2017-6-17 11:31:47 | 显示全部楼层
淘宝新出来hp40gs工程机 ,是39gs的升级版, 不知道该机器有什么新的内容,可否增加这方面的使用介绍
发表于 2017-6-18 16:48:13 | 显示全部楼层
嘛,说起来这一票模拟器机比真Saturn快不少,50g@75MHz等效频率大概是12MHz多一点,39因为没有cas所以显得格外慢罢了
 楼主| 发表于 2017-7-31 18:57:26 | 显示全部楼层
唔,对于其他的图形计算器在下可谓一无所知,很抱歉,在下不敢随意评论自己不了解的型号。


刚刚在下在贴吧上传了新的part,篇幅较短,让大家见笑了。
 楼主| 发表于 2017-7-31 18:57:59 | 显示全部楼层
本帖最后由 柜子里的猫 于 2019-11-2 02:56 编辑

 楼主| 发表于 2017-9-3 01:15:17 | 显示全部楼层
Part 6 Loop循环语句
引言: 机器最擅长的事情就是重复工作,而能够命令机器陷入循环的编程语句就叫做循环语句。循环语句是每种语言都必不可少的,用好循环语句能节省大量代码。


本部分的知识比较基础,老司机可以略过。
(一).语法
1. for语句
FOR A=1 TO 10 STEP 1; //循环头
B+1->B: //循环体
END:
这样书写会使B+1->B:被执行十遍(从A=1到A=10共十遍),"STEP 1"可以省略(不写时默认STEP=1),但是当你希望控制循环的变量A以你想要的方式变化时,步长常量STEP就应显式写出。循环体每被执行一遍,A就会被加上STEP的值(比如当STEP=-1时,A每次被加上-1,即A减1),直到A逾越TO所规定的循环界限为止。‘TO’这个词表述得非常暧昧,可以理解为“大于等于”(当A比TO大时),也可以理解为“小于等于”(当A比TO小时),翻译成汉语应该是“当A满足A大于等于(或小于等于)TO规定的值时,循环条件成立”(其实就是人类理解的问题,机器才不会想那么多)。当然,如果STEP使得A向TO所期望的反方向变化的话,循环就没完了。
如果STEP为0会怎么样?除非A和TO都为0,否则循环一遍也不会被执行。
2.while语句
1->A:
WHILE A<10 //循环头
REPEAT //官方废话
A+1->A: //循环体
END:
while倒像是更自由化的for循环,循环的执行条件、循环变量的改变量(步长)是什么形式全部由你来定,所以大可以在循环中安插复杂的算法来确定循环什么时候停(与for不同,for中的STEP是在循环头唯一确定的常量)。也正因如此,犯错的几率也比用for高得多。在下看那句官废不爽很久了,好几次都在那里报错。
3.DO-UNTIL语句
在C和C++中被称作DO-WHILE的语句在HP-BASIC中以惊人的相似度出现。此语句的出现主要是为了能在某些状况下以较通顺和简洁的逻辑来写循环。
1->A:
DO
A+1->A:
UNTIL A>10:
END: //这时候end反而成了官废
这个比起while来就简洁多了。但是,until的不等号方向很容易反(在下实验的时候就写反了,A加到两百多万才反应过来)。此外,作为语(guan)法(fei)的一部分,end最好不要漏写。
(二).练习
1.有一个数学运算符叫Σ,在HP39gs中的用法是这样:
Σ(A=1,100,5*A+1)
有没有觉得和哪个语句很像?
这个读作sigma,在Editline里跑得比手写循环快得多。但是为了加深对它的印象,我们不妨写个程序来实现它。(要稍微能变通一点,加上输入和输出)
例程:
0->S:
INPUT N; "START" ; "START:" ; ""; 0:
INPUT M;"END" ; " END: " ; "" ; 0:
FOR A=N TO M STEP (N<=M)(这个不等式不是注释!!)
S +5*A + 1-> S:
END:
MSGBOX S:
此程序仅在M、N均为0时失效。
2.不用branch的低配版钢琴
之前在网上看到有玩家用IF、循环和BEEP做出钢琴的。其实,爱音乐何必受此羁绊?代码五行足矣。
例程:
WHILE 1
REPEAT
GETKEY B:
BEEP B2/4;0.1:
END:
调节分母大小可出不同音调,狂戳“on”即可安全退出,方便快捷,进退自如,实用到上天的程序!

在下最近一段时间受军训和夏令营所困,摸不着电脑,所以发帖晚了,在此向诸君道歉,并将少发的部分一并奉上。

2017年9月2日 23点19分
柜里猫
 楼主| 发表于 2017-9-3 01:15:47 | 显示全部楼层
还有一件事,在此补上CHOOSE的正确用法(在下终于搞懂错在什么地方了)

1->A:
CHOOSE A; "LUCKY NUMBER" ; " 1 " ; " 2 " ; " 3 " ; " 4 ":

LUCKY NUMBER 是选择框的标题,1、2、3、4则是可供选择的选项。1-> A非常重要,A的初始值就是选择时高亮条的初始位置。
当A=0时,将不会有高亮条出现(选不了),当A比选项个数大时,整个语句就无法运行。
选完后,A的值就是选的那个选项的编号(和它内容无关)。
 楼主| 发表于 2017-9-3 01:16:32 | 显示全部楼层
Part 7 branch分支语句
引言:branch语句在任何语言中都是相当重要的语句,起码是数一数二的。同样,掌握的简单程度也是数一数二的。
(一).语法
1.if语句


1->A:
IF A == 2
THEN
MSGBOX "2":
ELSE
MSGBOX "MDZZ":
END:


按照以上所写,您一定会看到马岛战争的有关信息。if语句是最基本的逻辑分支结构,可以说是学HP-BASIC的人必会的知识点。
介绍一个计算机学的概念:左值和右值。左值可以理解为能被修改的对象,右值可以理解为常数值。比如,在A==2这个表达式中,A是一个左值,而2是一个右值。再比如,在1->A中,A是左值,1是右值。广义上来讲,连“MDZZ”也能被理解为一个右值。
这就引来一个风险。比如,若不慎把“==”写作“=”,在某些语言中就会出现难以觉察的错误,因为“=”可做“赋值”解(像for中的A=1一样)。在这种情况下,最好养成在比较的时候左值写右边,右值写左边的习惯(2==A),这样在出错的时候就好找多了。(在HP-BASIC中倒是没差)。


2.case语句


CASE
IF A==1
THEN
MSGBOX "非":
END
IF A==2
THEN
MSGBOX "常":
END
IF A==3
THEN
MSGBOX "烦":
END
IF A==4
THEN
MSGBOX "琐"
END:


CASE就是if-else的另一种写法,本质上是没有差别的。在下莫名讨厌CASE语句,不知道是什么原因。


3.iferr语句
iferr的语法与if相同,但是逻辑相反。和DO-UNTIL类似,也是为了逻辑的简洁通顺才出现的。

4.run和stop
run提供了一个远比其他语言方便(好像没有什么可比性)的文件打开方式。
RUN "PIANO":
这样就打开了PIANO程序。在PIANO结束后,将跳转回来,接着运行run的后面的部分。
stop则是马上结束当前的所有进程,回到主界面。
run为HP39gs提供了很多的可能性,比如递归,比如多文件的程序(像各种比较大的游戏)、比如同一代码的重用,各种各样的东西都因run语句而得以实现。

(二).练习

1.辗转相除法
给定正整数A、B,求A、B的Gcd(最大公因数)
这是一个在计算机界非常有名的算法,如果是搞算法竞赛的人——可以毫不夸张地说——全都会。
例程:
PROMPT A:
PROMPT B:
WHILE A/B //计算机科学中非0为真,但是这个表达式只能在有保留小数时用
REPEAT
B->C:
A MOD B->B:
C->A:
END:
MSGBOX B:

2.猜数游戏
随机一个数,让玩家猜。如果猜大了或者猜小了,提示玩家。猜中了可以获得精美昂贵的礼品(玩家自己筹备)。
HP39gs内置了随机数生成器RANDOM,直接把它当常量用即可。
例程:
0->B:
0->D:
RANDOM->C:
WHILE B≠1
REPEAT
D + 1-> D:
PROMPT A:
IF A > C:
THEN
MSGBOX "TOO BIG":
ELSE

IF A < C
THEN
MSGBOX "TOO SMALL":
ELSE
MSGBOX "YOU GOT IT! " D " STEPS":
1-> B:
END:
END:
这是一个很棒的消遣,配合零食或者小视频或者各种可以用次计算的活动效果更佳。

2017年9月3日01点12分
柜里猫
发表于 2017-9-27 10:01:17 | 显示全部楼层
楼主,很喜欢你的语言风格hahaha
谢谢你的介绍
对39gs这台计算器有点刮目相看了
发表于 2017-10-1 12:30:52 | 显示全部楼层
真的很不错,希望继续能整理出hp39gs的说明书
发表于 2017-10-24 08:41:15 | 显示全部楼层
楼主能讲一下举证的行列式和其他一些关于矩阵计算的使用方法吗?最好配上图&#128591;
 楼主| 发表于 2018-3-2 23:17:14 | 显示全部楼层
Part 8 绘图
引言:绘图计算器的屏幕宽大,适于绘制各种图像,吧里也有用hp39gs绘图的大佬发的帖,好像很有趣。
还有,part8主要针对在屏幕上用语句画图以及在SKETCH里用光标画图。至于在应用里的plot里画图,这里暂且不表。
(一).相关变量
按下vars键就能打开vars菜单,我们能在其中找到许多关于图形绘制的变量。这些变量对绘图工作有很大帮助。
1.存贮图像信息的变量
G1到G0和Page以特殊格式(MAKEGROB语句)贮存图像。其中Page代表当前显示在SKETCH界面的图像。因此,当要查看贮存在G1-G0里的图像时,可以先把它赋给Page,然后再打开SKETCH查看。
2.控制屏幕缩放比的变量
Xmax、Ymax、Xmin、Ymin是用于控制屏幕缩放比的变量,分别代表屏幕的上下左右顶点的那个像素在坐标系里的位置。hp39gs的默认设置是将屏幕置于x∈±6.5,y∈±3.1的地方。我们在自己绘图时可以将Xmin、Ymin设为0,
将Xmax设为131,将Ymax设为64,这样就能把屏幕放在第一象限,而且每个像素都有整数坐标,便于操作。如果不慎设了奇怪的数值,又不想慢慢改回来,可以用function的plot的zoom里的decimal选项改回来。
顺带说一句,当Xmin>Xmax或Ymin>Ymax时,两者会互换数值。
(二).Drawing语句
1.arc语句 ARC 1;2;3;1;π:这个语句表达的是:以(1,2)为圆心,3为半径,从弧度1开始画一个弧度为π的圆。
2.box BOX 1;2;3;4:这是在画一个以(1,2)(3,4)为对角的矩形。
3.erase ERASE:将屏幕清空。这个语句比较常用。
4.freeze FREEZE:冻住不许走。这个语句也很常用,冻住之后按任意键继续。
5.line LINE 1;2;3;4: 将点(1,2)和点(3,4)连起来。
6.tline TLINE 1;2;3;4:将点(1,2)和点(3,4)之间的所有点换成另一种颜色(白变黑,黑变白);
7.pixoff 与 pixon PIXON 1;2:将点(1,2)变为黑色。pixoff同理。
这些语句可以对图像进行非常基本的操作,就像手工画图一样,观赏性强但是速度不快。
freeze的用途超越了画图,广泛运用在人类的反应赶不上计算器的地方(虽然这台计算器通常慢得让人着急)。
(三).Graphic语句
1.display-> DISPLAY->G1:这个语句可以将当前屏幕存到G1变量中。通常在程序中使用,和截屏并没有什么差别。
2.->display ->DISPLAY G1:这个语句可以将G1呈现在屏幕上。搭配erase和freeze更佳。
3.在下并不清楚->GROB是用来做什么的,在查阅hp39gs的说明书后仍旧不懂。
3.grobnot GROBNOT G1:可以讲G1的每个像素的颜色都反过来并保存(简单来说就是反色)。
4.grobor GROBOR G1;(0,0);G0:用or关系把G0叠加到G1的(0,0)上(即把G0的左上角放在G1显示出来时的(0,0)位置,只要是重合处并且在G0或G1中是黑色的地方都将其涂黑)。
5.grobxor GROBXOR G1;(0,0);G0;同grobor ,但是逻辑关系变为xor,重合且黑色的地方将被涂为白色。
6.makegrob MAKEGROB G1;131;64;151D5FAB15A1DF5B15……:将那一大堆十六进制数字存入以131为长,64为宽的G1中。正常人不会去操作这个的吧......
7.->PLOT 和PLOT->的用法和1、2的display差不多,但是它们所保存的是plot的图像。
(四)有趣的小程序
131->Xmax:
0->Ymin:
0->Xmin:
64->Ymax:
WHILE 1
REPEAT
TLINE 131*RANDOM;64*RANDOM;131*RANDOM;64*RANDOM:
END:
可以在计算器屏幕上乱画。用模拟器的最高速运行别有一番风味。




在下被禁网很久(实际上每两周有半个小时可以上网,但是显然可以忽略不计),导致最近几个月没有时间更新,在下深感抱歉。还有大家仿佛挺挂念在下断更数月的文章,在下在此表示感谢。不过最近有可能会再断更一段时间,毕竟这次也只是趁着寒假间隙发的。总之,今后随缘更新吧。感谢。






2018年2月25日04点04分
柜里猫
 楼主| 发表于 2018-3-2 23:57:58 | 显示全部楼层
谢谢大家的关注。最近在下在大家的“暗示”下终于注意到了hp39gs的矩阵功能(话说之前都是拿来当数组用)。在下计划在最近学习一下关于矩阵的基础知识,然后再来了解计算器的内置矩阵函数,下一部分将是关于矩阵的简单教程和部分应用,敬请期待!
发表于 2018-4-7 17:05:42 来自手机 | 显示全部楼层
话说楼主还在么。……比较想知道关于统计(statistics)的用法,比如怎么算回归方程之类的
发表于 2018-4-23 18:58:15 | 显示全部楼层
挖坟
 楼主| 发表于 2019-11-2 04:00:54 | 显示全部楼层
断更好久了,在这里向大家诚挚地道个歉
有几句心里话想跟大家说说(其实也是在跟自己说的啦)
在下的心态已经和原来不一样了。刚刚接触图形计算器的时候,就觉得这个东西很好玩,而且挺小众的。于是在下怀揣着对这个东西单纯的喜爱,像做着远大的梦想,又像发愿似的,写下了入门到精通的标题。在下想让每个玩家都能挖掘出这台机器的潜力,想把观望的朋友们拉进坑,想让这个圈子大起来,更热闹起来,抱着这样的想法,在下动起了笔。
为了不做标题党,为了金玉其外也金玉其中,在下一度每天熬夜写稿,翻来覆去地检查语法错误和常识性错误,再小心翼翼地码到电脑上去。因为花费了太多时间,在下也被家长禁过网,挨过家长的骂。但是,看到大家支持在下的话语,看到帮助大家解决的问题,在下觉得这样做真的很值,而且很快乐。
但是一两年过去了,在下到了一个不一样的人生阶段,见的大佬也多了,回头看去,唯独觉得自己太自以为是。言语中透露出的浮夸和莫名的自信,许多自说自话的论断,看似热情实则反复啰嗦的对答,无一不让现在的在下感到羞愧难当。论技术水平,在下非常欠缺;论详实与严密,与说明书一比简直天上地下;论趣味性,在下的文章里只有一个小学生生锈的幽默。那么,在下写这些文字的意义究竟是什么呢?
文章固然是在下辛苦写的,但是在下却再也找不到将它继续下去的意义,又舍不得删去,只好像缩头乌龟一样藏起来罢。
文章中的诸多不实之处,想是很难一一改正了,大家看着玩便好,就当是一名小学生周末熬夜时的呓语,权当消遣吧
 楼主| 发表于 2019-11-2 04:04:56 | 显示全部楼层
说出这种不负责任的话真的很对不起,但还是请大家原谅在下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-12-22 12:17 , Processed in 0.071278 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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