《用 TI图形计算器学编程》—入门篇要学编程,应该从哪种语言入手?笔者推荐从 BASIC 语言入手,因为它简单易学,在许多国家都作为一种计算机程序的教学语言和入门语言. TINspire TM CX CAS 中文彩屏机,里面的程序语言是 TIBasic 语言,拥有数量庞大的内置函数,下面我们通过此类 TI图形计算器,一起走进 BASIC 的学习. 一、BASIC的故事 BASIC 的诞生,从一个传奇的故事开始. 1964 年,美国达特茅斯大学的 Thomas E. Kurtz(1928–)和 John G. Kemeny (1926.5.311992.12.26,原籍匈牙利)在 Fortran II 和 ALGOL60 的基础上设计了一种新的计算机语言,命名为“Beginner's Allpurpose Symbolic InstructionCode”,意为初学者通用符号指令代码,简称BASIC. 这个简单易学的计算机程序设计语言当时只有17条语句, 12个函数和3个命令,这就是 BASIC始祖——Dartmouth BASIC. 第一个BASIC程序(实际是一个编译器)于当地时间1964 年 5月 1 日凌晨4 点在一台GE265 (IBM 704) 主机中成功运行,操作者是Mike Busch和John McGeachie. 从此Kurtz和Kemeny作为BASIC 语言之父被永远载入史册. BASIC 语言自诞生起就显示出了强大的生命力,各种版本层出不穷. 从 APPLEⅡ机上用的 APPLE SOFT BASIC,到 LASER310 上用的MSBASIC,到 IBMPC 及其兼容机上用的 BASICA 和 GWBASIC,再到 MSDOS 上的 MS BASIC、QuickBASIC 和 VisualBasic 1.0,直至 Windows 下的 Visual Basic和 Linux 下的 XBasic、YaBASIC 等等, BASIC 无处不在,甚至许多电子游戏机(例如小霸王学习机)和微型电子词典(例如文曲星)中都实现了 BASIC. 从诞生之初,BASIC 语言就以其简单、易学和对硬件要求低等特点受到了广大程序设计人员,特别是电脑初学者的青睐,历经四十载,显示了其顽强的生命力. 如今BASIC语言在许多国家都作为一种计算机程序的教学语言和入门语言. 谭浩强教授八十年代所著《BASIC 语言》一书,曾经多次再版,现在的发行量已经超过千万之巨,BASIC 语言在中国有着大量拥趸,许多编程爱好者和专业人士也一直对它情有独钟.二、TI-BASIC简介 TInspire 系列所使用的 TIBasic 语言是非常简单的一门语言,同时也是局限性很大的一门语言. 这门语言拥有数量庞大的内置函数,其中相当一部分是数学函数. 在 nspire 上写出的所有程序都需要以函数的形式来运行,这一点会在具体的例子中解释. 创建一个 Nspire 程序,先新建一个计算器后,然后按b911即可新建一个程序,如右图. TINspire程序分为“程序”和“函数”两类.“程序”能够定义全局变量,可以有任意数量的输出(或者不输出),并且能够调用其它的程序或函数. 而“函数”则只能输出一个结果,不能定义全局变量,也不能调用其它的程序或函数.运行程序的方法是:在“计算器”页面里输入程序名和左括号,然后输入各项参数,输入右括号后按 Enter 键. 三、程序基础知识(一)、整体结构与数据类型 Nspire的程序的整体框架为:“程序”类“函数”类 Define [程序名](参数 1,参数 2,…)= Prgm [命令行] EndPrgm Define [程序名](参数 1,参数 2,…)= Func [命令行] EndFunc 例如 Nspire上的 Helloworld程序可以用如下的代码实现: Define hw( )= Prgm Disp “Helloworld!” EndPrgm 在 nspire编程中,数据的类型分为数字、字符串、数组、矩阵、函数和程序. 函数和程序在前文已经介绍过,“数字”指所有的整数和浮点数;“字符串”指在双引号中的数据,如“Helloworld”;“数组”指在花括号中的一组数据,如{1,3,5,7,9};“矩阵”指以矩阵形式呈现的一组数据. 数据的类型可用 getType()函数判定. 操作提示:在计算器页面,按b911新建一个程序,按b21检查语法并保存,按/e在计算窗口与程序窗口跳转. 在计算窗口,按h可调用程序(或变量) . 按/r可调用字符串符号,按/)可调用数组符号“{}”,按t可调用一系列矩阵符号. (二)、变量的定义,即赋值 Nspire程序的变量可以通过三种方式定义. 例如把变量a定义为 3,有如下三种方式:方式 1. a:=3 方式 2. 3→a 方式 3. Definea=3 除了数字以外,变量也可以用同样的方式定义为其他的数据类型. 此外,与变量操作相关的几个函数也要清楚. 1. Local函数,其作用是使变量仅在该程序或函数中有效,不作为全局变量. 格式为: Local [变量名 1],[变量名 2],…… 2. Delvar函数,其作用是将变量删除,此操作也同样适用于程序的删除. 格式为:Delvar([变量名]) 3. CopyVar函数,其作用是将变量 1 的内容复制到变量 2,此操作同样适用于程序的复制. 格式为:CopyVar([变量 1],[变量 2]) (三)、输入输出指令 Nspire程序有两种输入指令和三种输出指令. 1. Request输入指令,格式为:Request [“提示”,] 变量名 [,0] 输入指令的第一种为 Request,它要求用户输入的数据为数字,提示部分需要使用字符串形式. 后面的“0”,表示在输出的结果里不显示这一行的 Request 提示和用户输入值. 例:Request “1+1=?”, ans, 0 它表示若用户输入一个数值,它将被存入变量ans. 2. RequestStr输入指令,格式为:RequestStr [“提示”,] 变量名 [,0] RequestStr 与 Request 的唯一不同在于它对用户输入的值将以字符串形式存入变量. 例:RequestStr “What’s Your Name?”, name, 0 3. Disp 输出指令,格式为:Disp [内容] Disp 是最基本的输出指令,它在屏幕上显示指定的内容,该内容可以是除程序以外的任意数据类型. 例:Disp“Helloworld” Disp a+2 4. Tex输出指令,格式为:Text “[内容]” [,0] Text 指令会以弹出对话框的形式输出内容, 0 的作用与 Request 中的 0 相同. 内容要求为字符串格式. 例:Text “You Win!”, 0 5. Return输出指令,格式为: Return [内容] Return 指令为函数专用的输出指令,它使函数返回指定的内容. 例:Return factor(x) (四)、控制指令1.If条件语句 If句是最常用的条件语句,它有不同的形式. ⑴ If形式,格式为:If [条件 a] [命令 a] 最基本的 If句,它表示:如果条件 a成立则执行命令a. 值得注意的是,命令a 只能有一行. 例:If x5 x:=x5 ⑵ IfThenEndIf形式,格式为:If [条件 a] Then [命令 a] EndIf 与上一种不同的是,命令 a 从 Then之后延续到 EndIf 之前,没有长度限制. 例:If x5 Then x:=x5 Disp 2x EndIf ⑶ IfThenElseEndIf形式,格式为: If [条件a] Then [命令a] Else [命令b] EndIf 它表示:如果条件 a成立则执行命令 a,否则执行命令 b. 在一个 If句中只能出现一个 Else. 例:If x5 Then x:=x5 Disp 2x Else Disp 2xEndIf ⑷ IfThenElseIfThenEndIf形式,格式为: If [条件 a] Then [命令 a] ElseIf [条件 b] Then [命令 b] EndIf 它表示:如果条件 a成立则执行命令 a,如果条件 a 不成立而条件b 成立则执行命令 b. 在一个 If句中可以出现任意数量的 ElseIf…Then. 例如:If x3 then Disp “Too Small” ElseIf x3 Then Disp “Too Big” ElseIf x=3 Then Disp “Good!” 2.For循环语句 For 是 nspire三种循环句当中的一种. 格式为: For [变量名], [起始值], [结束值], [间隔] [命令行] EndFor 例如:For x,1,5,1 Disp 2x EndFor 它表示:变量x 的值由1 增加到 5 且以1 为间隔递增,x 每增加 1就输出一次 2x的值. 所以这段代码的输出应当为: 2 4 6 8 103.While循环语句 While也是一种循环句,它的基本格式为: While [条件] [命令行] EndWhile 它表示:如果条件成立则不断重复执行指定的命令,直到条件不成立为止. 所以在 While句中一定要有一个不断改变的量,否则就会成为一个死循环. 例如:x:=1 While x6 Disp 2x x:=x+1 EndWhile 这段语句的功能同上节的 For 语句相同. 4.Loop循环语句 Loop是一种死循环句,所以需要与 Exit 指令配合使用. 格式为: Loop [命令行] EndLoop 它的作用就是一直重复执行指定的命令. 例如:x:=1 Loop Disp 2xIf x≥5 Exit EndLoop 这段语句的功能同上两节的语句相同. 5.Try语句 Try是非常特殊的一种句法,它的基本格式为:Try [命令 a] Else [命令 b] EndTry 它表示:如果命令 a能够执行则执行命令 a,否则执行命令 b. 例如:Request “Enter a number:”, num, 0 Try If num0 Disp–num Else Disp “Invalid Input” EndTry 这段代码要求用户输入一个数字,如果该数小于零,则输出它的相反数. 但是,如果用户输入的不是一个数字而是其它的数据类型或未定义的变量,程序则无法判定其是否小于零,此时便转而执行 Else后的命令,输出“Invalid Input”. 6.ClrErr指令此命令清除当前的错误,并设置了错误的系统变量为零. 7.PassErr指令 PassErr将传递“try ... EndTry”的一个错误. (五)传送指令1.Lbl和Goto简单来说,Lbl 就是标签,Goto就是前往标签. 例:Lbl start x:=x10 If x0 Goto start 这段代码的功能是将x 值减 10,如果减 10 后的值大于零,则返回上一步再减 10. 2.Exit和Stop Exit 只在循环句中有效,表示跳出该循环. Stop的作用是直接终止程序(在函数中无效)例:For i,1,10,1 x:=10+I If int(x/6)=x/6 Exit EndFor 这段代码表示,在 i 从1 增到 10 的循环中,如果 i+10 能被 6 整除则跳出循环. 例:Define example(x)= Prgm If getType(x)≠“NUM” ThenText “Invalid Input” Stop EndIf 这段代码表示,如果用户输入的不是数字,则提示输入无效,直接终止程序的运行. 3.Return Return命令将退出一个子程序,