跳至內容

TI-BASIC

計算器百科,非營利的計算器專業知識百科。
於 2016年4月16日 (六) 03:58 由 春上冰月留言 | 貢獻 所作的修訂 (修正IO语句相关的错误)
此條目尚未完工。
此條目尚未完工。原作者將會繼續進行編寫,而您也可以對該條目進行編輯

TI-BASIC是德州儀器開發並內置在其圖形計算器產品中的一種面向過程的採用解釋運行方式的高級程式語言。

TI-BASIC有著類似於BASIC語言的語法,因為可以直接調用系統提供的計算函數從而擁有傳統BASIC語言所不具備的運算功能。

TI-BASIC具有簡單易學,使用靈活的特點。其缺點是運行效率不高,無法執行涉及硬體的操作,以及難以實現複雜的輸入輸出等。

隨著德州儀器計算器的不斷改進,TI-BASIC也在不斷地演化,然而,無論是哪種德州儀器圖形計算器,它們使用的TI-BASIC語法都是基本相同的。

基礎格式

TI-BASIC雖然屬於BASIC的一種,但它和QBASIC等通用語言有著一些不同。

程序開頭

  • 在TI-Z80系列計算器上,一個TI-BASIC程序以
 PROGRAM:程序名

為開頭的標誌。

  • 在TI-68K系列計算器上,一個TI-BASIC程序以
 储存程序的变量(形式参数1,形式参数2,...,形式参数n)
 :Prgm

為開頭;

  • 在TI-Nspire系列計算器上,一個TI-BASIC程序以
 Define 储存程序的变量(形式参数1,形式参数2,...,形式参数n)=
 Prgm

為開頭。

程序分行

TI-BASIC語言和QBASIC等BASIC分支不同,它不使用用戶輸入的行號。

在TI-68K系列計算器和TI-Z80系列計算器上,以一個冒號(:)作為新一行語句開始的標誌。因此,屏幕上的一行可以分寫多個語句。如果程序非常簡短,全部語句甚至可以寫在一行中。

在TI-Nspire中,換行符和獨立的冒號(:)都可以用於分隔語句。

程序結尾

  • 在TI-Z80系列計算器上,一個程序不需要特殊的結尾標誌。只要程序的最後一行執行完畢,程序即宣告結束。
  • 在TI-68K系列計算器和TI-Nspire系列計算器上,以EndPrgm(TI-68K系列計算器為:EndPrgm,包含該冒號)為程序結尾的標誌。若沒有這一標識程序結束的語句,計算器將發出警告,指示程序中缺失EndPrgm。

程序注釋

TI-BASIC的注釋符號是非常獨特的。

  • TI-Z80系列計算器使用"作為注釋記號(不需要另一個引號來成對使用),在"後的內容均會被作為注釋,直到該行語句結束,新一行語句開始。注意:這個操作會改動Ans變量內的數據。因此,請不要在調用了Ans的語句的前一行語句中添加注釋。
  • TI-68K和TI-BASIC系列計算器使用符號©(版權標誌)作為注釋符。寫在©標誌後的內容均作為注釋,直到新的一行語句的開始。

如果你的程序被設置為LibPublic並放置在MyLib中,那麼第一個©後面的內容將會顯示在目錄中作為參考。

變量類型和賦值

變量類型

TI-BASIC是一個弱類型的程式語言,用戶在向一個變量賦值和程序進行輸入輸出的時候,不需要指定變量的數據類型,用戶也無法指定一個變量的數據類型和進行數據類型的相互轉換,與此同時也不能自定義數據類型。這一切完全由計算器自身進行自動控制。

和其他高級語言不同,TI-BASIC的變量中存放的不限於數值,字符,字符串,數組等「常見的數據類型」——矩陣,函數,乃至是圖形,文本文檔,都可以被存儲在變量中。然而並不是所有的變量都能參與運算——一個變量能否參加一個運算取決於這個變量內存儲的數據是否為可參加該運算的數據類型。

特別地,對於帶有計算機代數系統(CAS)的德州儀器圖形計算器,如果一個變量沒有被賦予任何值卻參加了運算,則它將被當做一個代數式來對待。

TI-BASIC的變量名是大小寫無關的。例如,A和a被視為同一個變量,ParaMeter,paraMeter,parameter均被視為同一個變量——因此,不能使用大小寫來定義兩個不同的變量。

TI-BASIC中的變量在使用之前不需要進行預先定義。

TI-BASIC不使用常量和常變量。然而,可以通過Lock和Unlock命令來對一個變量的數據進行「鎖定」和「解鎖」,一定程度上起到「常量」的作用。

TI-BASIC允許通過Local命令定義局部變量。

很特殊地,一個TI-BASIC程序實際上也是存儲在一個函數變量中的,變量名就是該程序的程序名,編寫一個新的程序也就是把一段程序代碼作為數據賦給一個變量。因此,可以在一個程序內調用和編寫另一個程序(稱為「子程序」),便於複雜程序的編寫。

變量的賦值

TI-BASIC中有三種給一個變量賦值的方法。

  • 變量名:=數據 。例如:
 a:=3

代表將3這一數值賦給變量a。

  • 數據=:變量名。例如:
 3=:a

代表將3這一數值賦給變量a。

  • 數據→變量名。例如:
 3→a

代表將3這一數值賦給變量a。這是最簡單便捷的賦值方式。「→」可以通過STO鍵輸入。
另外,TI-Nspire保存程序時,會將所有的 =: 替換成 → 。

  • Define 變量名=數據。例如:
 Define a=3

代表將3這一數值賦給變量a。這種方式雖然麻煩,然而將一個程序或函數賦給一個變量(實際上就是編寫一個新的程序或函數)時,必須採用這種方式。

一些特殊的數據(如圖形和文本文檔)不能通過語句賦給變量。要把這些數據賦值給一個變量(實際上也就是把一個圖形/一段文本文檔儲存起來),需要在對應的繪圖程序/文檔編輯器等程序中進行操作。

關係表達式和布爾值

關係表達式

TI-BASIC中有如下幾種關係運算符:小於(<),小於等於(≤),大於(>),大於等於(≥),不等於(≠),等於(=)。其中,≤和≥可以通過shift+ >shift+ <打出,也可以通過<=和>=代替。≠可通過shift+ =打出,也可以通過/=代替。

此外要注意的是,TI-BASIC使用一個等號表示等於,而不像C/C++語言那樣使用雙等號(==)表示等於。

兩個關係表達式可以通過and(和),or(或),not(非),xor(異或)等邏輯運算符連接。除關係表達式外,兩個數值(或兩個布爾值)也可以通過邏輯運算符進行運算,兩個數值的運算結果服從邏輯運算的運算法則(而不是像C語言那樣將數值視為「真」和「假」來進行邏輯運算)。

一個關係表達式可以被直接進行運算並進行輸出。

  • 如果關係表達式能夠得出確定結果,則返回結果為一個布爾值。
  • 如果關係表達式無法得出確定結果(比如,其中含有未賦值變量),則返回結果為關係表達式本身。
  • 如果關係表達式無意義(比如,對兩個複數比較大小),則可能返回關係表達式本身或導致程序報錯。

布爾值

TI-BASIC中有三個布爾值:true(真),false(假)和undef(未定義)。

在很多的時候,布爾值true用於指代「全體實數」,而false用於指代「無解」等信息。

undef是一個TI-BASIC語言特有的布爾值,且僅在TI-68K和TI-Nspire系列計算器上使用。它用於指代一個無意義數學運算產生的結果(如,0/0),在有些場合也指代「±∞」。undef雖然是一個布爾值,但不能參加任何邏輯運算。

循環和跳轉

循環語句

TI-BASIC中有三種循環語句:for,while和loop。

For循環

for循環的格式是:

 For (循环变量,初值,终值[,步长])
 循环体
 EndFor

這個語句的含義是,循環變量首先被賦給一個初值,然後執行循環體中的語句,隨後循環變量被賦值為「循環變量+步長」,隨後再次執行循環體,直到循環變量的值與終止相等,循環結束。

While循環

While循環的格式是:

 While (条件表达式)
 循环体
 Endwhile

這個語句的含義是,只要While後面括號中的表達式成立,就循環執行循環體,直到不滿足該表達式為止。

Loop循環

Loop循環的格式是:

 Loop
 循环体
 EndLoop

這個語句的含義是,無條件地循環執行循環體。

Loop語句是沒有退出循環的判斷的。要使用Loop循環,循環體內必須有stop,exit等流程控制語句來在適當的時候退出循環,否則將造成死循環。

跳轉語句

TI-BASIC中使用Goto語句進行跳轉。

Goto命令和Lbl命令是配套使用的。Lbl用於在程序中做一個「標記」。用法為:

 Lbl(名称)

隨後,使用語句:

 Goto(名称)

程序在執行到Goto時,就會跳轉到對應的Lbl處,然後程序繼續向下執行。

使用過多的和不必要的Goto語句會導致程序的結構混亂,增加程序設計錯誤的概率,也不利於程序的閱讀和修改。因此,請不要濫用Goto語句。

輸入和輸出

輸入

TI-BASIC具有這樣幾種在程序中輸入數據的方式:

通過形式參數輸入

TI-BASIC中,即便是一個程序(而不是一個函數),也可以帶有形式參數。這時就可以通過形式參數進行數據輸入。例如,編寫如下的程序:

 Define sum(a,b,c)=
 Prgm
 d:=a+b+c
 EndPrgm

在運行時輸入:

 sum(1,2,3)

則程序運行後d的值為6,因為此時a,b,c分別被賦值了1,2,3。

通過彈出窗口輸入

TI-BASIC程序中可以彈出一個用於輸入數據的彈出窗口。其命令是:

 Request 提示语字符串,变量

例如:

 Request "Input A=?",a

當程序運行到此處時就會彈出一個輸入框,提示Input A=? 。當輸入數據並點擊「確認」時,這一數據就會被賦給變量a。

另有一個命令是RequestStr。這一命令的使用方法與Request相同,與Request不同的是,通過這一命令輸入的所有內容都被視為是字符串。

輸出

通過返回值輸出

TI-BASIC中,除了函數以外,一個程序也可以返回一個值。返回的值將顯示在計算區裡面。所返回的只能是一個變量的值。

要返回一個變量的值,使用的命令是:

 Return 变量

例如:

 Define sum(a,b,c)=
 Prgm
 d:=a+b+c
 Return d
 EndPrgm

則在計算器輸入sum(1,2,3)並按enter運行程序後,計算區會顯示6。

通過Disp命令進行輸出

Disp是程序中用於進行輸出的最常用的命令。其用法為:

 Disp 字符串1或变量1,[字符串2或变量2,...]

例如:

 Disp "Hello world!"

在執行之後就會在計算區輸出Hello world!字樣。

要注意的是,Disp輸出的內容不是計算結果的一部分。它不能被調用來參加其他運算,也不能存儲到變量。此外,一些特殊數據類型的變量(如程序,圖形等)是不能通過Disp輸出的。

有時會需要輸出類似「第X名」這種由變量和字符串共同組成的內容。這時候,可以通過逗號來將要輸出的內容「拼接」在一起。

例如:

 score:=95
 name:="Randname"
 Disp "该学生的姓名为",name,",","考试成绩为:",score,"分。"

則運行結果為:

 该学生的姓名为Randname,考试成绩为95分。

通過Text命令進行輸出

Text命令可以彈出一個對話框。使用方法為:

 Text 字符串

這樣會彈出一個內容為該字符串的窗口。

Text命令只能輸出字符串。要使用Text彈出一個變量的內容,可以套用string()命令,具體用法如下:

 Text string(变量)

要注意的是:

  • 有些數據類型的變量不能通過Text輸出。
  • 通過Text和string輸出的表達式會失去書面顯示特性。

函數

TI-BASIC中也使用「函數」這個概念,但僅有TI-68K系列計算器和TI-Nspire系列計算器才支持自定義函數。

除了作業系統中定義的函數之外,用戶可以自定義函數(就像C語言和其他程式語言中的函數那樣)。

一個函數和一個程序並沒有本質上的不同。但是能在函數中使用的 I/O 語句只有 Disp , 類似於 Request,RequestStr,Text 的需要彈出一個輸入或確認框的語句在函數中無效。

在TI-68K系列計算器上,定義一個函數的方法如下:

 函数名(形式参数1,形式参数2,...,形式参数n)
 :Func
 函数体
 :EndFunc

在TI-Nspire系列計算器上,定義一個函數的方法如下:

 Define 函数名(形式参数1,形式参数2,...,形式参数n)=Func
 函数体
 EndFunc

此外,和C/C++等程式語言不同的是,一個函數可以在計算區中被直接使用,而不是只能在程序中被調用。

外部連結