TI-Basic Z80 程式設計/技巧、竅門和最佳化
本章將重點介紹編寫良好的實踐程式碼,包括您可以應用的各種技巧、竅門和最佳化。
在計算器上編輯程式可能非常麻煩;滾動速度很慢,並且程式結構難以視覺化。此外,計算器可能會失去電源或凍結,這將破壞當前程式以及所有未存檔的其他程式。TI 提供免費下載的“Graph Link”軟體,該軟體很難使用,但比在計算器上手動程式設計更容易。它允許您以小寫字母顯示訊息並保護程式。不幸的是,Windows 版本未整合到 TI Connect 軟體中,該軟體是將程式傳輸到計算器所必需的。
- Graph Link 允許您鍵入包含小寫字母的字串,從而提供更好的使用者介面。
- 您可以“鎖定”程式,這將阻止在計算器上顯示程式碼,因此您(或您的朋友)不會意外弄亂程式。
- 幸運的是,TI Connect 的 Mac OS X 版本比其 Windows 版本功能強大得多,並且允許編輯程式。
與其他程式語言中的最佳化一樣,大多數 TI-BASIC 程式可以透過兩種方式進行最佳化:大小最佳化(使程式在計算器上佔用更少的空間)和速度最佳化(使程式執行得更快)。通常,提高程式的大小有助於提高其速度,反之亦然。以下是一些適用於 BASIC 程式的基本技巧
TI 圖形計算器內建了許多命令。要訪問它們,請轉到目錄。在 83+/84+ 上,可以透過按 2ND [CATALOG]。某些命令允許您大幅縮短和加快 TI-BASIC 程式的速度。例如,abs(函式會自動去掉數字的負號。abs(-2) 將返回 2。這比編寫去掉負號的 if/then 語句更快、更緊湊。
儘可能用While, For(和其他迴圈替換它們。這使您的程式碼更小、更快,並且更容易閱讀。有時您絕對需要標籤;不要害怕使用它們,但在可行的情況下替換它們。
您可以在 Input 函式後使用引號放置一行文字。然後用逗號隔開,接著是變數。這使您不必使用Disp函式並節省空間(例如,:INPUT "What number?",A 而不是 :Disp "What number?" :Input A)。
在 TI-BASIC 程式中每一行的末尾,計算器不關心您是否省略了結束引號或括號。因此,與其鍵入 :A+abs((2X+3)Y),不如鍵入 :A+abs(Y(2X+3 以節省空間。但是,您應該只在釋出程式時這樣做(保留原始程式!),因為這樣更難理解和編輯。並非所有命令或函式都允許這樣做。
對於不熟悉從許多代數課中學到的方程式操作的人來說,這可能是一項更困難的任務。更小、更簡化的方程式通常可以更快地執行,並且大小更小。值得注意的是,括號也只佔一個位元組。
(x + y) / z 可以是 z-1(x + y。這是因為計算器上有一個 -1 函式,它只佔一個位元組,因此理論上,透過去掉一個括號,您可以節省一個位元組。這個*命令不是必需的,因為它可以用空替換:A*B 變為 AB,A/(B*(C+4*F)) 變為 A/(B(C+4F。
這可能聽起來不多,但很快就會累積起來!
儘可能使用內建函式,而不是使用迴圈。例如,與其編寫
- 0→A
- For(X,1,len(L1
- A+L1→A
- End
不如編寫
- sum(L1)→A
與其鍵入 3.14 或 2.72,不如使用π和 e。這些變數具有更高的精度,並且允許您使用令牌而不是值來節省空間。
變數佔用 18 位元組。如果你使用了所有 27 個變數(不包括可用的字串和列表空間),這將佔用 486 位元組。這有時比程式本身還要多。儘可能簡化公式。你始終可以使用Ans變數。只需在程式碼中說明公式,而無需將其儲存到變數中。這會將答案/結果放到Ans變數本身。TheAns變數不會佔用額外的空間,因為它始終存在且始終變化。
通常,在較大的程式中(5+ KB 規模),會有重複的程式部分(或非常接近的部分)。製作執行復雜、重複任務的小程式。例如,假設你有一個程式,它多次執行復雜的計算。與其多次重寫複雜計算,不如將其一次性寫入另一個程式。然後,你可以在一行程式碼中多次提及程式名稱,而不是多次寫出長而複雜的程式碼。要做到這一點,你需要將單獨的程式視為“黑盒子”。“黑盒子”必須操作來自 Ans 變數的值。例如,考慮以下程式碼對,它們將一個數字平方兩次並加 1(prgmSQUARE 執行平方數字的重複任務)
- 提示 A
- A
- prgmSQUARE
- Ans
- prgmSQUARE
- Disp Ans+1
prgmSQUARE:
- Ans^2
任何使用If Then Else, While,或其他以End結尾的語句,都會導致程式使用更多記憶體,因為它需要記住該語句必須以End結尾。避免使用Goto來轉義這些塊,或在目的地處結束它們,否則如果你經常這樣做,你可能會遇到記憶體錯誤,並且會很快降低程式速度。
Ans可以儲存幾乎任何東西。如果你有一個包含你經常引用的數字的大語句,例如 100,你可以使用Ans來節省空間。例如
- Pxl-On(100,10
- Pxl-On(100,20
- Pxl-On(100,30
- Pxl-On(100,40
可以簡化為
- 100
- Pxl-On(Ans,10
- Pxl-On(Ans,20
- Pxl-On(Ans,30
- Pxl-On(Ans,40
可以進一步簡化為(實際上使用 100 效率更高,因為它只需要使用一次)
- For(I,10,40,10
- Pxl-On(100,I
- End
在一行程式碼中只有一個值,對於那些使用其他語言編寫程式碼的人來說,這令人驚訝地是一個有效的語句。它將值儲存到Ans.
這是一個可以極大地提高遊戲速度的最佳化方法。與其讓程式執行整個For( / While / Repeat迴圈,不如使用If:
- For(A,1,len(L1
- If L1(A)=4
- End
- End
上面的示例將在值為 4 時中斷For(迴圈。
與其在計算程式的 X,Y 座標後顯示文字或圖形,不如將公式放在通常放置 X,Y 變數的位置。例如,與其透過大量If語句來查詢數字的字串長度,不如使用log(運算子在你的Output(或Text(命令中動態查詢其字串長度並在正確的位置顯示它。
為了節省遊戲圖形繪製的時間,不要使用 clear draw 或 clear home 命令。計算器需要很長時間才能清除整個螢幕。相反,你可以輸出空格來清除。例如,你有一個代表宇宙飛船的符號。當宇宙飛船的位置發生變化時,與其重新繪製整個螢幕,不如只在它的舊位置繪製空格,並在其上繪製新的宇宙飛船。
一種簡單的解決方法,可以將程式的當前狀態暫停一小段時間,就是使用一個空For(迴圈。例如,要在訊息彈出時暫停遊戲
- For(Ans,1,30
- End
但是,要明智地使用它,因為它也會暫停所有使用者輸入。(除非你在 for 迴圈中放置一些程式碼)
幾乎所有最佳化都需要創造力才能得到正確且成功地實施。
如果你必須在計算器上程式設計,有幾種方法可以使編輯更容易。
- 使用 CtlgHelp。 在計算器上下載並安裝 CtlgHelp 應用程式。它需要 32 KB 的可用空間。這個應用程式是一個有用的語法參考。要訪問幫助,請在選單或目錄中突出顯示一個命令,然後按 + 鍵。
- 使用 Plus Silver Edition 計算器。 如果你負擔得起,請購買一臺“Plus Silver Edition”計算器,它速度更快,記憶體更大。
- 備份你的程式。 完成程式編寫或使用後,立即存檔(這會將程式從 RAM 儲存到內部快閃記憶體磁碟)。存檔的程式可以抵禦斷電和大多數崩潰,但 RAM 中的程式會消失。只有在需要保護單個程式時才推薦此操作。使用組來備份多個程式。你可能會發現 CalcUtil 很實用,因為它允許你編輯和執行存檔的程式,從而保護所有內容免遭意外刪除。
- 如果你的程式儲存永久資料,例如記事本或待辦事項列表,請在讀取或寫入後存檔該檔案。這樣,資料檔案就可以抵禦斷電或崩潰。但是,這會顯著降低效能,因此不應將其用於大量需要快速訪問的可替換資料(例如隨機數列表)。
- 或者,你可以在一個組中備份多個程式,該組可以在記憶體選單中建立。組中必須至少包含兩個物件(程式或變數)。
- 複製貼上程式碼。 假設你有一個程式,其中包含你不想在主程式中重寫的程式碼。首先導航到主程式中要插入程式碼的位置。然後,按 2ND [INS] 2ND [RCL] PRGM PRGM。導航到包含要複製的程式碼的程式名稱。然後,按 ENTER.
- 快速繪製圓形。 在你的圓形命令中將
{i}作為最後一個引數插入。例如,這會快速繪製一個以 (0,0) 為中心、半徑為 5 的圓::Circle(0,0,5,{i})。