[分享]GQBASIC 編寫語法技術文件

所有GP1288 的技術文章將放在這裡
本板部分文章來自樂酷網,轉貼繁體版屬娛樂酷網站長授權,未經允許,嚴禁轉貼至其他網站

版主: 總版面管理員

回覆文章
Mowd
系統管理員
系統管理員
文章: 1828
註冊時間: 2003-07-16 6:31 PM
來自: 台灣台北
聯繫:

[分享]GQBASIC 編寫語法技術文件

文章 Mowd »

GQBasic User Guide
---
Version Date Author/Maintenance Note
0.2 2003-01-24 GGV Test Version
---
目錄

1、根源程式結構.3
2、介面說明..3
2.1、檔管理介面3
2.2、編輯介面..3
2.3、運行程式..3
3、GQBASIC的資料類型、運算符與運算式4
3.1、GQBASIC的資料類型。..4
3.2、變數、變數的命名規則、變數的類型說明。..4
3.2.1、變數..4
3.2.2、變數名規則..4
3.3、運算符和運算規則(算術運算、關係運算、邏輯運算、字元運算)。..4
3.3.1、算術運算符..4
3.3.2、關係運算符..4
3.3.3、邏輯運算符..5
4、陣列.5
4.1、陣列的建立.5
3.2、陣列的引用.5
5、字元處理..5
5.1、字串變數.5
5.2、字串變數的賦值.5
5.2.1、用LET語句5
5.2.2、用INPUT語句..6
5.2.3、用READ/DATA語句6
5.3、字串的連接6
5.4、字串的比較6
5.4.1、字元比較規則.6
5.4.2、字串比較的規則..6
5.4.3、字元關係運算式6
5.5、字串陣列.6
5.6、字元及字串處理函數..6
6、順序結構..7
6.1、輸出語句PRINT.7
6.1.1、一般格式7
6.1.2、作用..7
6.1.3、輸出格式7
6.2、賦值語句..7
6.2.1、一般格式7


6.2.2、作用..7
6.2.3、對變數的賦值操作..7
6.3、鍵盤輸入語句7
6.3.1、一般格式:INPUT [“提示資訊”;]<變數表>7
6.3.2、說明:.7
6.4、讀入語句..8
6.4.1、格式:.8
6.4.2、說明:.8
6.5、恢復資料指標語句.8
6.6、結束語句..8
6.7、程式注釋..8
7、選擇結構..8
7.1、行IF語句。..8
7.2、多分支轉移語句..8
8、迴圈結構..8
8.1、WHILE迴圈結構。..8
8.2、FOR-NEXT迴圈結構。.8
8.2.1、格式..8
8.2.2、說明..9
8.3、DO-UNTIL迴圈結構。..9
8.4、迴圈結構的嵌套。.9
9、函數與副程式..9
9.1、標準函數。.9
8.2、塊內副程式——子常式10
8.2.1、GOSUB-RETURN 語句10
8.2.2、ON GOSUB-RETURN語句10
9、文件..10
9.1、對順序檔的操作。.10
9.1.1、順序檔的打開與關閉.10
9.1.2、輸出資料(寫檔)..11
9.1.3、輸入資料(讀檔)..11
9.1.4、順序檔的修改.11
9.1.5、順序檔操作有關函數和語句.11
9.2、隨機文件(Random Access File)11
9.2.1、隨機文件的建立、打開和關閉.11
9.2.2、隨機檔的讀入步驟..12
10、螢幕控制與作圖12
10.1、顯示模式.12
10.2、螢幕控制語句..12
10.2.1、SCREEN函數..12
10.2.2、LOCATE語句..12
10.2.3、CLS語句.13
10.2.4、COLOR語句.13
10.3、繪圖語句.13


10.3.1、畫點.13
10.3.2、畫線.13
10.3.3、畫橢圓13
10.3.4、畫圓.13
11、聲音14
11.1、讓揚聲器發聲BEEP14
11.2、播放音樂PLAY(GP1288缺少API,暫不能使用)14
*---
1、根源程式結構
1.1、一個程式由若干個語句行組成,每一行稱為一個語句行,一行中可以包含多個語句(語句間用“:”號相隔)。
1.2、語句行必須有行號,程式按語句排列的順序依次執行,行號僅作為行標號(根源程式轉移的目標)而不代表執行順序。
1.3、每個語句行最多只能有256個字元長度,每個GQBasic程式的行數最多為10000行,每個GQBasic程式檔大小最大為64KB。
1.4、行首為“REM”或者為“#”表示改行為注釋行,將不被執行。
1.5、程式以END語句結束,END後面的語句將不被解釋執行。如果沒有END語句,解釋器遇到到檔結束時停止執行。
1.6、GQBasic程式檔保存為純文字檔案,副檔名為“.bas”。
2、介面說明
2.1、檔管理介面
檔管理介面用於打開、保存、另存Basic程式和管理GQBasic目錄。檔管理介面使用了gp1288行動碟升級版以及更高版本中提供的標準控制項,因此要使用GQBasic,必須先升級到gp1288行動碟以及更高版本。
當啟動GQBasic時,會首先進入打開檔視窗,用戶可以選擇打開一個已經存在的GQBasic程式或點擊“取消”按鈕編輯一個新的程式。
打開或新建一個程式,可以點擊功能表“File->Save”保存程式。
也可以點擊“File->SaveAs”功能表將程式更名保存。
點擊“File->New”將關閉當前編輯的程式,創建一個新的程式。
2.2、編輯介面
編輯介面如圖,可以將鍵盤最小化。在“Edit”功能表中可以使用“Cut”“Copy”“Paste”來剪切、複製、粘貼程式。
2.3、運行程式
點擊“Run->Run”功能表運行當前編輯的程式,運行程式之前,會先自動保存程式,如果是新增的程式,則會彈出保存檔窗口。
程式運行的時候可以有4中視窗模式:豎屏文本模式、橫屏文本模式、豎屏圖形模式、橫屏圖形模式。可以用SCREEN來設定運行時的表單模式,默認為豎屏文本模式。在文本模式下,如果輸出文本超出螢幕範圍,可以使用捲軸流覽輸出內容,而圖形模式將無法看

到超出螢幕範圍的內容。
程式運行結束後,可以點擊“Run->Run”重新運行或者點擊“Run->Back”返回到編輯介面。
如果執行了閉環的程式,或者希望強制終止程式,可以在程式運行時同時按下“同步+E-Mail”鍵,可以強行退出GQBasic。
3、GQBASIC的資料類型、運算符與運算式
3.1、GQBASIC的資料類型。
GQBasic只有兩種資料類型:數位類型和字串類型。
定義為數位類型的變數可以為整型數和實型數,實數可以用十進位和指數形式(科學計數法)表示。
字串類型的最大長度是250個字元。
3.2、變數、變數的命名規則、變數的類型說明。
3.2.1、變數
在程式執行過程種,其值可以發生變化的量稱為變數。
在GQBasic中,變數不需要聲明,可以直接賦值和引用,引用變數之前必須先賦值。
3.2.2、變數名規則
變數名的第一個字元必須是字母。
變數名中第2個字元及其後的字元可以是字母、數位。
變數名的長度範圍為1-16個字元。
如果是字串類型,那麼變數名稱的最後一個字元為“$”。
GQBasic的保留字不能用作變數名。
變數名中的大小寫字母等效。
變數名中不可有空格。
3.3、運算符和運算規則(算術運算、關係運算、邏輯運算、字元運算)。
3.3.1、算術運算符
加+
減-
乘*
除/
整除\
求餘MOD
乘方^
3.3.2、關係運算符
等於=
大於>
小於<
大於或等於>= =<
小於或等於<= =<
不等於<>

3.3.3、邏輯運算符
邏輯與AND
邏輯或OR
邏輯異或XOR
邏輯非NOT
4、陣列
4.1、陣列的建立
DIM <陣列名稱>(下標上界) 或DIM <陣列名稱>(上界1,上界2,..,上界5)
說明:
(1)下標值從1開始。如:
DIM A(5)即定義了a(1)、a(2)、…、a(5);
(2)GQBasic最多允許定義5維陣列。
(3)允許在同一模組中,陣列名稱與變數名同名,它們不代表同一物件。
DIM a(100)
A=3
(4)DIM語句中的上界可是常數或變數、運算式。如:
DIM a(10)
DIM a(n)
DIM a(n+2)
但變數值一定先賦值。
3.2、陣列的引用
引用陣列元素(下標變數),即在括弧中指定下標;
在程式中,陣列與其他變數的使用相同,即可參與運算,可以被賦值;
在引用陣列時,陣列名稱、類型、維數以及下標的範圍,應與定義時一致;
5、字元處理
5.1、字串變數
長度在0-250範圍;
(1)定義方法
變數名後加類型說明符“$”;
(2)說明
?變數名不分大小寫;
?變數名應避開關鍵字;
5.2、字串變數的賦值
5.2.1、用LET語句
[LET] <變數名>=<字串>

5.2.2、用INPUT語句
5.2.3、用READ/DATA語句
5.3、字串的連接
兩個字串的合併,運算符為“+”。
5.4、字串的比較
5.4.1、字元比較規則
用字元的ASCⅡ代碼的大小進行比較。
5.4.2、字串比較的規則
兩個字串從左到右逐個字元比較。
5.4.3、字元關係運算式
兩字串的比較結果(真假值);
六種關係運算符:= , <, <> ,> ,<=, >= 。
5.5、字串陣列
與數值陣列的定義相類似。
5.6、字元及字串處理函數
ASC():求字串第一個字元的ASCII代碼。
CHR$():把引數的值轉換成ASCII代碼。
INKEY$:讀按鍵,返回一個字元,GP1288的按鍵定義如下:
方向鍵:上—A,下—B,左-C,右-D
同步鍵:E
E-Mail鍵:F
滾輪:確認-G,向上-H,向下-I
ESC鍵:J
IrDA鍵:K
REC鍵:L
INSTR(字串,子串):在一個字串查找子串的第一個字元的位置。
LEFT$(字串,長度):從左邊取一個指定長度的字串。
RIGHT$(字串,長度):從右邊取一個指定長度的字串。
LEN():測試字串的長度。
LTRIM$():出去字串的前導空格。
RTRIM$():出去字串的尾端空格。
MID$(字串,m,[n]):從字串中取指定位置的字元。m、n為數字。
SPACE$(n):取n個空格的子串。
STR$():把數值轉換為字串。
LOWER$():把字串全部轉換為小寫。
UPPER$():把字串全部轉換為大寫。

6、順序結構
6.1、輸出語句PRINT
6.1.1、一般格式
PRINT [<運算式>]
運算式—常量、變數
6.1.2、作用
(1)輸出數值計算的結果
(2)輸出字串
6.1.3、輸出格式
(1)標準格式:輸出項以逗號分隔,逗號在螢幕輸出為一個空格。(GVBasic逗號分隔則換行輸出,而Qbasic則按照跳位字元分區輸出)
(2)緊湊格式:輸出項以分號相隔。
(3)在文本模式和圖形模式下,PRINT輸出有所不同。文本模式下每個PRINT語句輸出位置為當前游標位置,而且輸出之後會自動回車換行。在圖形模式下,PRINT語句輸出位置由LOCATE函數定位,輸出之後不會自動換行。因此在圖形模式下使用PRINT語句輸出,需用LOCATE函數指定輸出位置。
6.2、賦值語句
6.2.1、一般格式
[LET] <變數名>=<運算式>
6.2.2、作用
計算右邊的運算式,將其值賦給左邊變數。主要作用:運算。
“=”的作用於是賦值,與等於的差別,如:X=Y 與Y=X 不同
6.2.3、對變數的賦值操作
(1)變數的初值為0
(2)一個變數只有一個值,變數的當前值由最後一次賦值決定
(3)變數值的傳遞
a=b b的值不變
b=a a的值不變
(4)關於賦值類型,以左邊變數的類型為准
6.3、鍵盤輸入語句
6.3.1、一般格式:INPUT [“提示資訊”;]<變數表>
6.3.2、說明:
(1)執行該語句,將彈出輸入視窗輸入相應的資料。“提示資訊”顯示在輸入視窗上。
(2)每次彈出輸入視窗只輸入一個變數的值。
(3)輸入視窗根據輸入的變數類型,顯示提示資訊輸入數值或者字串。
(4)可以不指定提示資訊。

6.4、讀入語句
6.4.1、格式:
READ <變數表>
DATA <數據表>
6.4.2、說明:
(1)<資料表>中的資料個數不能少於<變數表>中的變數個數。
(2)DATA語句可放在程式的任何位置,可使用多個DATA語句來存放資料,這時將按DATA語句的先後順序,把資料放資料區。
(3)DATA語句中的資料只能是常量
6.5、恢復資料指標語句
RESTORE:將數據指標移至DATA的首位。
6.6、結束語句
結束程式運行。一個程式可有多個END語句,但運行程式時,只有一個起作用,即執行其中一個END語句都會使程式結束。
6.7、程式注釋
REM語句。與“#”注釋不同的是,“#”必須在行號之前,而REM可以在行號之後,也可以在行首。
7、選擇結構
7.1、行IF語句。
格式:IF <條件> THEN <語句1> [ELSE<語句2>]
例如:IF a>b THEN PRINT “a” ELSE PRINT “b”
7.2、多分支轉移語句
格式:ON <算術運算式> GOTO <行號1>,<行號2>,…
說明:根據算術運算式的值跳到指定的標號,比如算術運算式的值為1的時候跳到行號1所在的行,值為2時跳到行號2所在的行,以此類推。
8、迴圈結構
8.1、WHILE迴圈結構。
WHILE <條件>
<循環體>
WEND
注:<條件>是終止迴圈的邏輯運算式,<條件>應隨迴圈的執行而變化,最終退出迴圈。
8.2、FOR-NEXT迴圈結構。
8.2.1、格式
FOR <變數>=<初值> TO <終值> STEP <增量>

循環體
NEXT
8.2.2、說明
(1)FOR與NEXT必須一一配對;
(2)FOR必須在NEXT的前面;
(3)步長為1時“STEP 1”可省略;
(4)迴圈終止的條件是迴圈變數賦值超過終值,而不是等於終值。
(5)迴圈次數的計算
次數=(終值一初值)/步長+1
(6)迴圈變數初值和終值、步長值均可以是正值、負值或零,也可是整數或小數;
終止條件:當步長>0時,迴圈變數>終值
當步長<0時,迴圈變數<終值
當步長=0時,永不終止
(7)迴圈變數主要用來控制迴圈、可在循環體內引用,也可不在循環體出現。
注:在循環體內可對迴圈變數賦值,但這將改變迴圈次數。
8.3、DO-UNTIL迴圈結構。
格式:
DO
<循環體>
UNTIL <條件>
作用:當條件為真時終止迴圈,循環體至少執行一次。
8.4、迴圈結構的嵌套。
1)內外迴圈不應交叉
2)內外迴圈的變數名不應相同
9、函數與副程式
9.1、標準函數。
ABS(x):絕對值
SQR(x):平方根
INT(x):不大於x的整數
LOG(x):對數函數
SIN(x):正弦函數
CON(x):余弦函數
TAN(x)正切函數
ATN(x):反正切函數
EXP(x):指數函數
SGN(x):符號函數
RND(x):產生隨機函數

8.2、塊內副程式——子常式
8.2.1、GOSUB-RETURN 語句
副程式定義:
<行號>:
..
RETURN
副程式調用:
GOSUB <行號>
8.2.2、ON GOSUB-RETURN語句
格式:
副程式定義:
<行號>:
..
RETURN
副程式調用:
ON <算數運算式> GOSUB <子程1>,<子程2>,..,<子程n>
說明:根據算術運算式的值跳到指定的子常式,比如算術運算式的值為1的時候跳到常式1所在的行,值為2時跳到常式2所在的行,以此類推。
9、文件
9.1、對順序檔的操作。
9.1.1、順序檔的打開與關閉
使用之前,先“打開”檔,使用後“關閉”檔;
(1)OPEN 語句
格式:OPEN <檔案名> FOR <讀寫方式> AS #<檔號>
<讀寫方式>:
OUTPUT:寫資料,向檔輸出;
INPUT:讀數據,從檔讀入;
APPEND:寫資料,添加記錄;
<文件號>:
即檔緩衝區號,每一個檔都要指定一個不同的檔號(1~225);
說明:
i)以OUTPUT方式打開檔,建立新檔,指標指向首記錄;將刪除已存在的檔。
ii)以INPUT方式打開已存在的檔,指標指向首記錄;
iii)以APPEND方式打開檔,指標指向檔尾;如果檔不存在,則新建一個檔,並將指標指向檔頭。
(2)CLOSE語句
CLOSE [#<文件號1>][,#<文件號2>]..
關閉由檔號指定的檔緩衝區,將內容存檔,如不指定檔號,則關閉所有已打開的檔。

9.1.2、輸出資料(寫檔)
(1)PRINT #語句
格式:PRINT #<檔號>,<輸出項>
例如:PRINT #1,a;b;c
注意:逗號與分號的差別。逗號是輸出空格,分號以緊湊格式輸出。
9.1.3、輸入資料(讀檔)
INPUT#語句
格式:INPUT #<檔號>,<變數1>[,<變數2>.]
每次從檔中讀出一個記錄,
9.1.4、順序檔的修改
若要修改已有的順序檔,則要利用中間檔,因為對一個順序檔不能既讀又寫。對順序檔的修改步驟:
(1)、用INPUT方式打開需要修改的舊檔,準備從中逐個讀出資料;
(2)、另設一個中間暫存檔案(用OUTPUT方式打開),用來存放修改後的各記錄;
(3)、逐個讀入舊檔的記錄,用戶決定是否修改?如果不改,就把此記錄原封不動地寫到中間檔中去;如果要修改,則在修改後再寫到中間檔中。
(4)、將舊檔刪除,把中間檔改名為原來的舊檔的名稱。
9.1.5、順序檔操作有關函數和語句
(1)EOF函數
格式:EOF(<文件號>)
檢查制定的檔中的指標是否已經指向檔末尾。是則真(-1),否則為假(0)。
(2)INPUT$()函數
格式:INPUT$(<位元組數>,<檔號>)
從指定的打開檔中讀取指定數目的字元。
(3)LOF()函數
格式:LOF(<文件號>)
給出指定檔已進行讀寫的位元組數。
(4)SEEK語句
格式:SEEK#<檔號>,<位元組位置>
指標移動到指定位置,以位元組為單位。
9.2、隨機文件(Random Access File)
隨機存取檔——所有記錄等長,各記錄相應的資料項目的長度也相同;按記錄號進行存取,記錄的順序不一致,可直接讀寫任一條記錄。
9.2.1、隨機文件的建立、打開和關閉
(1)OPEN <檔案名> [FOR RANDOM] AS #<檔號> [LEN=<長度>]
(2)CLOSE關閉檔,用法與順序檔相同。
(3)隨機檔的記錄中各域只能存放字串資料,在對數值型資料進行處理時,要經過轉換。
(4)緩衝區中各域的字串變數賦值
LSET <域變數>=<字串>(左對齊)
RSET <域變數>=<字串>(右對齊)

(5)將檔緩衝區中的資料存檔
PUT #<檔號>[,<記錄號>][,<記錄變數>]
9.2.2、隨機檔的讀入步驟
(1)打開隨機文件
OPEN <檔案名> AS#<檔號> [LEN=<長度>]
(2)從指定的檔中讀取一個記錄
GET #<檔號> [,<記錄號>][,<記錄變數>]
(3)關閉文件
10、螢幕控制與作圖
10.1、顯示模式
GQBasic在運行的時候可以設定螢幕的顯示模式。目前支援的顯示模式包括:豎屏文本模式、橫屏文本模式、豎屏圖形模式、橫屏圖形模式。
文本運行模式下,螢幕上顯示的最小單位為一個字元,這種模式下的用戶不能用線條來繪製各種圖形。當文字超出螢幕範圍,可以拖拽水平和垂直捲軸流覽運行結果。
螢幕上顯示的最小單位是螢幕的象素點,可用基本的幾何圖形,如點、直線、方框、橢圓、圓等繪製出複雜而精美的圖畫。豎屏圖形模式的螢幕範圍是160×240,橫屏圖形模式的螢幕範圍是240×160。在螢幕左上角為座標原點,座標為(0,0)。
在圖形模式下,還支援黑白、4階灰度、16階灰度3種螢幕顏色模式。
10.2、螢幕控制語句
10.2.1、SCREEN函數
格式:SCREEN <螢幕模式>,<螢幕色階>
功能:設置螢幕模式為文本模式、圖形模式以及豎屏、橫屏顯示模式。
參數說明:
(1)螢幕模式
0-豎屏文本模式
1-橫屏文本模式
2-豎屏圖形模式
3-橫屏圖形模式
(2)螢幕色階
1-單色模式,及黑白色
2-4階灰度模式
4-16階灰度模式
例如:設置運行時的螢幕模式為16階灰度橫屏圖形模式:
SCREEN 3,4
10.2.2、LOCATE語句
格式:LOCATE <橫坐標>,<縱坐標>
功能:確定在螢幕上輸出文本的位置。PRINT輸出的文本的第一個文字的左上角座標將位於LOCATE定位的座標。
說明:只在圖形顯示模式時有效。與文本模式的PRINT不同的是輸出之後不會自動換行。所以如需換行,必須使用LOCATE重新定位。

10.2.3、CLS語句
格式:CLS
功能:清除螢幕資訊。
說明:清除螢幕之後,在文本方式下,將游標置於螢幕的左上角,在圖形方式下,將游標置於螢幕的中心。
10.2.4、COLOR語句
格式:COLOR <線條顏色>,<充填顏色>
功能:設置螢幕繪圖的線條顏色以及充填顏色
說明:顏色的代碼如下:
黑白顯示模式:0-1(白-黑)
4階灰度顯示模式:0-3(白-黑過渡)
16階灰度顯示模式:0-15(白-黑過渡)
例如16階灰度模式下,如果不設定顏色,默認為“COLOR 15,15”,即黑色線條,黑色充填色。
10.3、繪圖語句
10.3.1、畫點
格式:DRAW x,y
功能:在(x,y)座標畫一個點。
例如:DRAW 10,10
10.3.2、畫線
格式:LINE x0,y0,x1,y1
功能:從(x0,y0)畫一條直線到(x1,y0)。
例如從(20,20)到(50,50)畫一條直線
LINUE 20,20,50,50
10.3.3、畫橢圓
格式:ELLIPSE x0,y0,a,b,[fill]
功能:以制定的中心以及長邊和短邊畫橢圓。
說明:(x0,y0)為橢圓中心點座標,a為橢圓長邊,b為橢圓短邊。[fill]為1時為將以COLOR設定的充填色充填橢圓,[fill]為0時畫透明橢圓,[fill]不指定時默認為0。
例如畫一個中心在(80,100)長邊為30,短邊為20的實心橢圓:
ELLIPSE 80,100,30,20,1
畫一個中心在(80,100)長邊為30,短邊為20的透明橢圓:
ELLIPSE 80,100,30,20 或ELLIPSE 80,100,30,20,0
10.3.4、畫圓
格式:CIRCLE x,y,r,[fill]
功能:以指定的圓心和半徑畫一個圓。
說明:(x,y)為圓心座標,r為所要繪製圓的半徑;[fill]為1時將以COLOR設定的充填色充填圓,fill為0時畫透明圓,[fill]不指定時默認為0。
例如畫一個中心在(80,100),半徑為r實心圓:
CIRCLE 80,100,20,1

11、聲音
11.1、讓揚聲器發聲BEEP
BEEP:使揚聲器發出一個短促的聲音。
11.2、播放音樂PLAY(GP1288缺少API,暫不能使用)
PLAY函數可以播放一段連續的音樂。字母“CDEFGAB”是音名,分別代表簡譜音階中的“1234567”。同時音名後跟一表示音長的數字,比如“4”表示四分音符,如果不帶音長,默認為1。
P為休止符後接音長作用同音名。
O為調整音階的高低調,後接一數字(1-6)預設值為4。
Mowd 與你的交流天地
歡迎您的到來
edwinson
文章: 9
註冊時間: 2003-10-11 4:42 PM

文章 edwinson »

喔喔…版主辛苦啦…加油加油…
回覆文章